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

Add queueMicrotask method to JSI #43235

Closed
wants to merge 1 commit into from

Conversation

rubennorte
Copy link
Contributor

@rubennorte rubennorte commented Feb 28, 2024

Summary:
Changelog: [internal]

Context

Microtasks are an important aspect of JavaScript and they will become increasingly important in the hosts where we're currently using JSI.

For example, React Native is going to adopt an event loop processing model similar to the one on the Web, which means it would need the ability to schedule and execute microtasks in every iteration of the loop. See react-native-community/discussions-and-proposals#744 for details.

JSI already has a method to execute all pending microtasks (drainMicrotasks) but without a method to schedule microtasks this is incomplete.

We're currently testing microtasks with Hermes using an internal method to schedule microtasks (HermesInternal.enqueueJob) but we need a method in JSI so this also works in other runtimes like JSC and V8.

Changes

This adds the queueMicrotask to the Runtime API in JSI so we have symmetric API for microtasks and we can implement the necessary functionality.

The expectation for JSI implementations is to queue microtasks from this method and from built-ins like Promises and async functions in the same queue, and not drain that queue until explicitly done via drainMicrotasks in JSI.

This also modifies Hermes and JSC to provide stubs for those methods, and the actual implementation will be done in following diffs.

Differential Revision: D54302536

@facebook-github-bot facebook-github-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 Feb 28, 2024
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D54302536

@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D54302536

@efstathiosntonas
Copy link

@rubennorte this opens the road for this?

@rubennorte
Copy link
Contributor Author

@rubennorte this opens the road for this?
#42742

@efstathiosntonas yes! The plan is to enable the new event loop in the new RN architecture soon, which will unblock WeakRefs in Hermes.

@efstathiosntonas
Copy link

efstathiosntonas commented Feb 28, 2024

@rubennorte thanks for the update, so this is targeting exclusively on new arch?

@rubennorte
Copy link
Contributor Author

@rubennorte thanks for the update, so this is targeting exclusively on new arch?

Yes, that's right.

Summary:
X-link: facebook/hermes#1331

Changelog: [internal]

## Context

Microtasks are an important aspect of JavaScript and they will become increasingly important in the hosts where we're currently using JSI.

For example, React Native is going to adopt an event loop processing model similar to the one on the Web, which means it would need the ability to schedule and execute microtasks in every iteration of the loop. See react-native-community/discussions-and-proposals#744 for details.

JSI already has a method to execute all pending microtasks (`drainMicrotasks`) but without a method to schedule microtasks this is incomplete.

We're currently testing microtasks with Hermes using an internal method to schedule microtasks (`HermesInternal.enqueueJob`) but we need a method in JSI so this also works in other runtimes like JSC and V8.

## Changes

This adds the `queueMicrotask` to the Runtime API in JSI so we have symmetric API for microtasks and we can implement the necessary functionality.

The expectation for JSI implementations is to queue microtasks from this method and from built-ins like Promises and async functions in the same queue, and not drain that queue until explicitly done via `drainMicrotasks` in JSI.

This also modifies Hermes and JSC to provide stubs for those methods, and the actual implementation will be done in following diffs.

Reviewed By: neildhar

Differential Revision: D54302536
@facebook-github-bot
Copy link
Contributor

This pull request was exported from Phabricator. Differential Revision: D54302536

@rubennorte
Copy link
Contributor Author

This was committed in 036f47e

@rubennorte rubennorte closed this Mar 20, 2024
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. fb-exported p: Facebook Partner: Facebook Partner
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants