Skip to content

Tidy the bridgeless runtime executor plumbing (#58325) - #58325

Open
javache wants to merge 1 commit into
react:mainfrom
javache:export-D118616045
Open

Tidy the bridgeless runtime executor plumbing (#58325)#58325
javache wants to merge 1 commit into
react:mainfrom
javache:export-D118616045

Conversation

@javache

@javache javache commented Sep 4, 2026

Copy link
Copy Markdown
Contributor

Summary:

Follow-ups to the buffered CallInvoker, kept out of that diff so the behavioural
change stays reviewable on its own. No behaviour change intended here.

  • BufferedRuntimeExecutor gains asRuntimeExecutor() and
    asWeakRuntimeExecutor(). RuntimeExecutor is a std::function, so callers
    cannot hand it the object and instead each hand-rolled the same capturing
    lambda; the ownership question now has one answer per lifetime policy. The
    weak form is what getBufferedRuntimeExecutor needs, which must not keep the
    instance alive.
  • BufferedWork becomes private. It was only ever an implementation detail, and
    being public put its fields in the C++ API snapshot.
  • The buffer holds a std::vector sorted once at flush rather than a
    std::priority_queue. Indices are handed out before the lock, so arrival
    order can differ from submission order and something has to restore it — but a
    heap is the expensive way. std::priority_queue::top() returns a const
    reference, so every flushed item copied its std::function on the way out;
    that copy is now a move, and nothing sifts on the way in.
  • runtimeExecutorThatGoesThroughRuntimeScheduler was a second copy of
    getUnbufferedRuntimeExecutor(); it now calls it.
  • RuntimeSchedulerCallInvoker is marked deprecated. Its remaining users are
    migrated: ReactCxxPlatform holds a ReactInstance and can use
    createJSCallInvoker(), and four other files only #included it without ever
    constructing one. The single remaining use is the flag-off branch, which is
    suppressed locally and goes when the flag is cleaned up.
  • Drops a null check on bufferedRuntimeExecutor_ in callFunctionOnModule
    that the constructor makes unreachable.

Changelog:
[Internal]

Reviewed By: christophpurrer

Differential Revision: D118616045

@meta-cla meta-cla Bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Sep 4, 2026
@facebook-github-tools facebook-github-tools Bot added p: Facebook Partner: Facebook Partner labels Sep 4, 2026
@meta-codesync

meta-codesync Bot commented Sep 4, 2026

Copy link
Copy Markdown

@javache has exported this pull request. If you are a Meta employee, you can view the originating Diff in D118616045.

Summary:

Follow-ups to the buffered CallInvoker, kept out of that diff so the behavioural
change stays reviewable on its own. No behaviour change intended here.

- `BufferedRuntimeExecutor` gains `asRuntimeExecutor()` and
  `asWeakRuntimeExecutor()`. RuntimeExecutor is a std::function, so callers
  cannot hand it the object and instead each hand-rolled the same capturing
  lambda; the ownership question now has one answer per lifetime policy. The
  weak form is what `getBufferedRuntimeExecutor` needs, which must not keep the
  instance alive.
- `BufferedWork` becomes private. It was only ever an implementation detail, and
  being public put its fields in the C++ API snapshot.
- The buffer holds a `std::vector` sorted once at flush rather than a
  `std::priority_queue`. Indices are handed out before the lock, so arrival
  order can differ from submission order and something has to restore it — but a
  heap is the expensive way. `std::priority_queue::top()` returns a const
  reference, so every flushed item copied its `std::function` on the way out;
  that copy is now a move, and nothing sifts on the way in.
- `runtimeExecutorThatGoesThroughRuntimeScheduler` was a second copy of
  `getUnbufferedRuntimeExecutor()`; it now calls it.
- `RuntimeSchedulerCallInvoker` is marked deprecated. Its remaining users are
  migrated: `ReactCxxPlatform` holds a `ReactInstance` and can use
  `createJSCallInvoker()`, and four other files only `#include`d it without ever
  constructing one. The single remaining use is the flag-off branch, which is
  suppressed locally and goes when the flag is cleaned up.
- Drops a null check on `bufferedRuntimeExecutor_` in `callFunctionOnModule`
  that the constructor makes unreachable.

Changelog:
[Internal]

Reviewed By: christophpurrer

Differential Revision: D118616045
@meta-codesync meta-codesync Bot changed the title Tidy the bridgeless runtime executor plumbing Tidy the bridgeless runtime executor plumbing (#58325) Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. meta-exported p: Facebook Partner: Facebook Partner

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant