-
Notifications
You must be signed in to change notification settings - Fork 24.4k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Implement microtasks using new JSI method (#43397)
Summary: Pull Request resolved: #43397 Changelog: [internal] This migrates the Hermes-specific use of microtasks to an engine agnostic implementation based on the new JSI method to queue microtasks. Differential Revision: D54687056
- Loading branch information
1 parent
73bc5f6
commit cb884e2
Showing
12 changed files
with
192 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
24 changes: 24 additions & 0 deletions
24
packages/react-native/ReactCommon/react/nativemodule/microtasks/CMakeLists.txt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,24 @@ | ||
# Copyright (c) Meta Platforms, Inc. and affiliates. | ||
# | ||
# This source code is licensed under the MIT license found in the | ||
# LICENSE file in the root directory of this source tree. | ||
|
||
cmake_minimum_required(VERSION 3.13) | ||
set(CMAKE_VERBOSE_MAKEFILE on) | ||
|
||
add_compile_options( | ||
-fexceptions | ||
-frtti | ||
-std=c++20 | ||
-Wall | ||
-Wpedantic | ||
-DLOG_TAG=\"ReactNative\") | ||
|
||
file(GLOB react_nativemodule_microtasks_SRC CONFIGURE_DEPENDS *.cpp) | ||
add_library(react_nativemodule_microtasks SHARED ${react_nativemodule_microtasks_SRC}) | ||
|
||
target_include_directories(react_nativemodule_microtasks PUBLIC ${REACT_COMMON_DIR}) | ||
|
||
target_link_libraries(react_nativemodule_microtasks | ||
react_codegen_rncore | ||
reactnative) |
31 changes: 31 additions & 0 deletions
31
packages/react-native/ReactCommon/react/nativemodule/microtasks/NativeMicrotasks.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
/* | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
#include "NativeMicrotasks.h" | ||
|
||
#ifdef RN_DISABLE_OSS_PLUGIN_HEADER | ||
#include "Plugins.h" | ||
#endif | ||
|
||
std::shared_ptr<facebook::react::TurboModule> NativeMicrotasksModuleProvider( | ||
std::shared_ptr<facebook::react::CallInvoker> jsInvoker) { | ||
return std::make_shared<facebook::react::NativeMicrotasks>( | ||
std::move(jsInvoker)); | ||
} | ||
|
||
namespace facebook::react { | ||
|
||
NativeMicrotasks::NativeMicrotasks(std::shared_ptr<CallInvoker> jsInvoker) | ||
: NativeMicrotasksCxxSpec(std::move(jsInvoker)) {} | ||
|
||
void NativeMicrotasks::queueMicrotask( | ||
jsi::Runtime& runtime, | ||
jsi::Function callback) { | ||
runtime.queueMicrotask(callback); | ||
} | ||
|
||
} // namespace facebook::react |
28 changes: 28 additions & 0 deletions
28
packages/react-native/ReactCommon/react/nativemodule/microtasks/NativeMicrotasks.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,28 @@ | ||
/* | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
*/ | ||
|
||
#pragma once | ||
|
||
#if __has_include("rncoreJSI.h") // Cmake headers on Android | ||
#include "rncoreJSI.h" | ||
#elif __has_include("FBReactNativeSpecJSI.h") // CocoaPod headers on Apple | ||
#include "FBReactNativeSpecJSI.h" | ||
#else | ||
#include <FBReactNativeSpec/FBReactNativeSpecJSI.h> | ||
#endif | ||
|
||
namespace facebook::react { | ||
|
||
class NativeMicrotasks : public NativeMicrotasksCxxSpec<NativeMicrotasks>, | ||
std::enable_shared_from_this<NativeMicrotasks> { | ||
public: | ||
NativeMicrotasks(std::shared_ptr<CallInvoker> jsInvoker); | ||
|
||
void queueMicrotask(jsi::Runtime& runtime, jsi::Function callback); | ||
}; | ||
|
||
} // namespace facebook::react |
48 changes: 48 additions & 0 deletions
48
...act-native/ReactCommon/react/nativemodule/microtasks/React-microtasksnativemodule.podspec
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
# Copyright (c) Meta Platforms, Inc. and affiliates. | ||
# | ||
# This source code is licensed under the MIT license found in the | ||
# LICENSE file in the root directory of this source tree. | ||
|
||
require "json" | ||
|
||
package = JSON.parse(File.read(File.join(__dir__, "..", "..", "..", "..", "package.json"))) | ||
version = package['version'] | ||
|
||
source = { :git => 'https://github.com/facebook/react-native.git' } | ||
if version == '1000.0.0' | ||
# This is an unpublished version, use the latest commit hash of the react-native repo, which we’re presumably in. | ||
source[:commit] = `git rev-parse HEAD`.strip if system("git rev-parse --git-dir > /dev/null 2>&1") | ||
else | ||
source[:tag] = "v#{version}" | ||
end | ||
|
||
header_search_paths = [] | ||
|
||
if ENV['USE_FRAMEWORKS'] | ||
header_search_paths << "\"$(PODS_TARGET_SRCROOT)/../../..\"" # this is needed to allow the microtasks module access its own files | ||
end | ||
|
||
Pod::Spec.new do |s| | ||
s.name = "React-microtasksnativemodule" | ||
s.version = version | ||
s.summary = "React Native microtasks native module" | ||
s.homepage = "https://reactnative.dev/" | ||
s.license = package["license"] | ||
s.author = "Meta Platforms, Inc. and its affiliates" | ||
s.platforms = min_supported_versions | ||
s.source = source | ||
s.source_files = "*.{cpp,h}" | ||
s.header_dir = "react/nativemodule/microtasks" | ||
s.pod_target_xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", | ||
"HEADER_SEARCH_PATHS" => header_search_paths.join(' '), | ||
"DEFINES_MODULE" => "YES" } | ||
|
||
if ENV['USE_FRAMEWORKS'] | ||
s.module_name = "React_microtasksnativemodule" | ||
s.header_mappings_dir = "../.." | ||
end | ||
|
||
install_modules_dependencies(s) | ||
|
||
s.dependency "ReactCommon/turbomodule/core" | ||
end |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
19 changes: 19 additions & 0 deletions
19
packages/react-native/src/private/webapis/microtasks/specs/NativeMicrotasks.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
/** | ||
* Copyright (c) Meta Platforms, Inc. and affiliates. | ||
* | ||
* This source code is licensed under the MIT license found in the | ||
* LICENSE file in the root directory of this source tree. | ||
* | ||
* @flow strict | ||
* @format | ||
*/ | ||
|
||
import type {TurboModule} from '../../../../../Libraries/TurboModule/RCTExport'; | ||
|
||
import * as TurboModuleRegistry from '../../../../../Libraries/TurboModule/TurboModuleRegistry'; | ||
|
||
export interface Spec extends TurboModule { | ||
+queueMicrotask: (callback: () => mixed) => void; | ||
} | ||
|
||
export default (TurboModuleRegistry.get<Spec>('NativeMicrotasksCxx'): ?Spec); |