Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

C/C++ errorhandling #3001

Merged
merged 34 commits into from
Aug 17, 2023
Merged

C/C++ errorhandling #3001

merged 34 commits into from
Aug 17, 2023

Conversation

Wumpf
Copy link
Member

@Wumpf Wumpf commented Aug 16, 2023

What

Introduces error handling to C/C++.

  • C status object
    • utilities for dealing safely with pointers in rerun_c and exposing any errors on the way
  • C++ wrapper with configurable logging
  • bunch of tests for various error cases on recording stream (not 100% coverage but deemed "good enough")
  • depend on loguru in tests but not in the sdk itself

Missing (and already in the works!) is a custom result type that will allow us to remove dependency on arrow status/result which right now doesn't translate to rerun::Status

Checklist

@Wumpf Wumpf added the 🌊 C++ API C/C++ API specific label Aug 16, 2023
crates/rerun_c/src/error.rs Outdated Show resolved Hide resolved
Copy link
Member

@emilk emilk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice, error handling is a lot of work 😓

I find it a bit confusing that you mix "error" and "status". I get it that Status doesn't always imply an error, nor does ErrorCode, but it is pretty standard in C and C++ for error codes to include the OK case.

I do think Status is a better name for the C++ type, and matches that of Arrow, but I am leaning towards that ErrorCode is better for the enum. In any case: let's be consistent everywhere. It's quite confusing now that "Error" becomes "Status" on the FFI boundary imho

crates/rerun_c/src/error.rs Outdated Show resolved Hide resolved
crates/rerun_c/src/error.rs Outdated Show resolved Hide resolved
crates/rerun_c/src/error.rs Outdated Show resolved Hide resolved
crates/rerun_c/src/lib.rs Outdated Show resolved Hide resolved
crates/rerun_c/src/rerun.h Show resolved Hide resolved
rerun_cpp/src/rerun/recording_stream.cpp Outdated Show resolved Hide resolved
rerun_cpp/src/rerun/status.hpp Outdated Show resolved Hide resolved
rerun_cpp/src/rerun/status.hpp Outdated Show resolved Hide resolved
rerun_cpp/src/rerun/status.hpp Outdated Show resolved Hide resolved
rerun_cpp/tests/status_check.hpp Outdated Show resolved Hide resolved
rerun_cpp/src/rerun/status.hpp Outdated Show resolved Hide resolved
rerun_cpp/src/rerun/status.hpp Outdated Show resolved Hide resolved
@Wumpf Wumpf merged commit 2c0d2f3 into main Aug 17, 2023
23 checks passed
@Wumpf Wumpf deleted the andreas/cpp/errorhandling branch August 17, 2023 11:26
Wumpf added a commit that referenced this pull request Aug 17, 2023
* Depends on #3001
* Part of #2919
* Fixes #2917
* Solves a big chunk of #2873

### What

Introduces a very simple `rerun::Result`. I decided to keep it **a lot**
more simple than the arrow Result type and refrained from the typical
"return or assign" etc. macro since I noticed that they get quite
complicated quickly.

The idea is that the rerun result type won't be needed by a lot of
manual code, so erring on the too lightweight side should be in our
favor.

We use this now accross the entire public serialization path - meaning
that once we move out array->arrow serialization helper into separate
headers we should be pretty much done with not exposing arrow headers!


### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested [demo.rerun.io](https://demo.rerun.io/pr/3005) (if
applicable)

- [PR Build Summary](https://build.rerun.io/pr/3005)
- [Docs
preview](https://rerun.io/preview/pr%3Aandreas%2Fcpp%2Fcustom-result-type/docs)
- [Examples
preview](https://rerun.io/preview/pr%3Aandreas%2Fcpp%2Fcustom-result-type/examples)
Wumpf added a commit that referenced this pull request Aug 18, 2023
* Part of #2919
* Depends on #3001
* Solves C++ part of #2537

### What

Moves out all affix-fuzzer and co. testing types of the actual SDK.

While working on that...
* I figured out why warnings from arrow headers showed up only
sometimes: When Arrow isn't added explicitely as a dependency, CMake
doesn't seem to declare it as system header which normally suppresses
warnings (as you can imagine this got really bad now when adding more
cpps that include arrow to the test library). Obvious workaround is to
add arrow explicitly to the text executable.
* internal include paths got shorter/more natural in some cases. I had
to make the `Includes` utility more clever in order to support types
outside of the sdk, so we got this almost for free :)

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested [demo.rerun.io](https://demo.rerun.io/pr/3007) (if
applicable)

- [PR Build Summary](https://build.rerun.io/pr/3007)
- [Docs
preview](https://rerun.io/preview/pr%3Aandreas%2Fcpp%2Fseparate-test-types/docs)
- [Examples
preview](https://rerun.io/preview/pr%3Aandreas%2Fcpp%2Fseparate-test-types/examples)
emilk added a commit that referenced this pull request Jan 23, 2024
### What
This is so we can test things out before the next release, and also get
in some new egui features for the plot aggregator and drag-and-drop.

* Closes #4716
* Closes #4794

### TODO
* [x] Fix hovering ListItems in blueprint panel

### wgpu changelog
https://github.com/gfx-rs/wgpu/blob/trunk/CHANGELOG.md#v0190-2024-01-17

### relevant egui changelog (so far)

#### eframe
* Keep `ViewportInfo::maximized` and `minimized` up-to-date on Windows
[#3831](emilk/egui#3831) (thanks
[@rustbasic](https://github.com/rustbasic)!)
* Update wgpu to 0.19 [#3824](emilk/egui#3824)
* Fix: handle `IconData::default()` without crashing
[#3842](emilk/egui#3842)

#### egui_extras
* Fix unwraps in SVG scaling
[#3826](emilk/egui#3826) (thanks
[@amPerl](https://github.com/amPerl)!)
* Update to ehttp 0.4 [#3834](emilk/egui#3834)

#### egui_plot
* Make `egui_plot::PlotMemory` public
[#3871](emilk/egui#3871)

#### egui
* Selectable text in Labels
[#3814](emilk/egui#3814)
* `ComboBox`: add builder method for height
[#3001](emilk/egui#3001) (thanks
[@hinto-janai](https://github.com/hinto-janai)!)
* Add keys `?`, `/`, `|`
[#3820](emilk/egui#3820)
* Fix clickable widgets blocking scrolling on touch screens
[#3815](emilk/egui#3815) (thanks
[@lucasmerlin](https://github.com/lucasmerlin)!)
* Fix `stable_dt` [#3832](emilk/egui#3832)
* Bug Fix : `Response::is_pointer_button_down_on` is now false the frame
the button is released [#3833](emilk/egui#3833)
(thanks [@rustbasic](https://github.com/rustbasic)!)
* Use runtime knowledge of OS for OS-specific text editing
[#3840](emilk/egui#3840)
* Refactor: move text selection logic to own module
[#3843](emilk/egui#3843)
* Fix: dragging to above/below a `TextEdit` or `Label` will select text
to begin/end [#3858](emilk/egui#3858)
* Add `Response::contains_pointer`
[#3859](emilk/egui#3859)
* Always set `response.hovered` to false when dragging another widget
[#3860](emilk/egui#3860)
* Add `Align2::anchor_size`
[#3863](emilk/egui#3863)
* Add `Context::debug_text`
[#3864](emilk/egui#3864)

#### epaint
* Add `Align2::anchor_size`
[#3863](emilk/egui#3863)

### Checklist
* [x] I have read and agree to [Contributor
Guide](https://github.com/rerun-io/rerun/blob/main/CONTRIBUTING.md) and
the [Code of
Conduct](https://github.com/rerun-io/rerun/blob/main/CODE_OF_CONDUCT.md)
* [x] I've included a screenshot or gif (if applicable)
* [x] I have tested the web demo (if applicable):
* Using newly built examples:
[app.rerun.io](https://app.rerun.io/pr/4885/index.html)
* Using examples from latest `main` build:
[app.rerun.io](https://app.rerun.io/pr/4885/index.html?manifest_url=https://app.rerun.io/version/main/examples_manifest.json)
* Using full set of examples from `nightly` build:
[app.rerun.io](https://app.rerun.io/pr/4885/index.html?manifest_url=https://app.rerun.io/version/nightly/examples_manifest.json)
* [x] The PR title and labels are set such as to maximize their
usefulness for the next release's CHANGELOG

- [PR Build Summary](https://build.rerun.io/pr/4885)
- [Docs
preview](https://rerun.io/preview/eb1bce846c3adb29b99d04018b002475994ad213/docs)
<!--DOCS-PREVIEW-->
- [Examples
preview](https://rerun.io/preview/eb1bce846c3adb29b99d04018b002475994ad213/examples)
<!--EXAMPLES-PREVIEW-->
- [Recent benchmark results](https://build.rerun.io/graphs/crates.html)
- [Wasm size tracking](https://build.rerun.io/graphs/sizes.html)

---------

Co-authored-by: Andreas Reich <r_andreas2@web.de>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌊 C++ API C/C++ API specific
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants