Use new run_without_applying_deferred method in SingleThreadedExecutor#18684
Conversation
|
Less unsafe is more good! |
| world: &mut World, | ||
| ) -> Result { | ||
| let result = system.run_without_applying_deferred((), world); | ||
| black_box(()); |
There was a problem hiding this comment.
This is the first time I've seen black_box used like this, and after some searching I still don't know why this would be beneficial. Can you explain or link me to somewhere this is explained?
There was a problem hiding this comment.
I'm not actually sure! I just copied it from the other methods.
... Okay, I think I found the source. It comes from the __rust_begin_short_backtrace method in std, which has a comment "prevent this frame from being tail-call optimised away".
I'm going to add that as a comment to the black_box calls here, even though it's not strictly related to this PR.
SpecificProtagonist
left a comment
There was a problem hiding this comment.
Scheduler simplifications are nice. And yep, I should have commented the black_box.
…utor` (bevyengine#18684) # Objective Simplify code in the `SingleThreadedExecutor` by removing a special case for exclusive systems. The `SingleThreadedExecutor` runs systems without immediately applying deferred buffers. That required calling `run_unsafe()` instead of `run()`, but that would `panic` for exclusive systems, so the code also needed a special case for those. Following bevyengine#18076 and bevyengine#18406, we have a `run_without_applying_deferred` method that has the exact behavior we want and works on exclusive systems. ## Solution Replace the code in `SingleThreadedExecutor` that runs systems with a single call to `run_without_applying_deferred()`. Also add this as a wrapper in the `__rust_begin_short_backtrace` module to preserve the special behavior for backtraces.
Objective
Simplify code in the
SingleThreadedExecutorby removing a special case for exclusive systems.The
SingleThreadedExecutorruns systems without immediately applying deferred buffers. That required callingrun_unsafe()instead ofrun(), but that wouldpanicfor exclusive systems, so the code also needed a special case for those. Following #18076 and #18406, we have arun_without_applying_deferredmethod that has the exact behavior we want and works on exclusive systems.Solution
Replace the code in
SingleThreadedExecutorthat runs systems with a single call torun_without_applying_deferred(). Also add this as a wrapper in the__rust_begin_short_backtracemodule to preserve the special behavior for backtraces.