Skip to content

Commit 37e509f

Browse files
nlutsenkofacebook-github-bot
authored andcommitted
rn-android | Allow injecting a custom ChoreographerProvider via ReactNativeHost into construction of ReactInstanceManager.
Summary: Further propagating extension to the Android choreographer, now allowing to override it from the perspective of ReactNativeHost/ReactInstanceManager(Builder). Changelog: [Android][Added] ReactChoreographer can now use an implementation substitution instead of relying on android.view.Choreographer directly. Reviewed By: javache Differential Revision: D50827973 fbshipit-source-id: 42efaa3ece2c2b45fe4ee04a4bbc87c9d59132c8
1 parent 751f7e9 commit 37e509f

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
import com.facebook.react.devsupport.interfaces.PackagerStatusCallback;
8989
import com.facebook.react.devsupport.interfaces.RedBoxHandler;
9090
import com.facebook.react.internal.AndroidChoreographerProvider;
91+
import com.facebook.react.internal.ChoreographerProvider;
9192
import com.facebook.react.internal.turbomodule.core.TurboModuleManager;
9293
import com.facebook.react.internal.turbomodule.core.TurboModuleManagerDelegate;
9394
import com.facebook.react.modules.appearance.AppearanceModule;
@@ -236,7 +237,8 @@ public static ReactInstanceManagerBuilder builder() {
236237
@Nullable Map<String, RequestHandler> customPackagerCommandHandlers,
237238
@Nullable ReactPackageTurboModuleManagerDelegate.Builder tmmDelegateBuilder,
238239
@Nullable SurfaceDelegateFactory surfaceDelegateFactory,
239-
@Nullable DevLoadingViewManager devLoadingViewManager) {
240+
@Nullable DevLoadingViewManager devLoadingViewManager,
241+
@Nullable ChoreographerProvider choreographerProvider) {
240242
FLog.d(TAG, "ReactInstanceManager.ctor()");
241243
initializeSoLoaderIfNecessary(applicationContext);
242244

@@ -294,7 +296,10 @@ public void invokeDefaultOnBackPressed() {
294296
mJSIModulePackage = jsiModulePackage;
295297

296298
// Instantiate ReactChoreographer in UI thread.
297-
ReactChoreographer.initialize(AndroidChoreographerProvider.getInstance());
299+
ReactChoreographer.initialize(
300+
choreographerProvider != null
301+
? choreographerProvider
302+
: AndroidChoreographerProvider.getInstance());
298303
if (mUseDeveloperSupport) {
299304
mDevSupportManager.startInspector();
300305
}

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerBuilder.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import com.facebook.react.devsupport.interfaces.DevLoadingViewManager;
3333
import com.facebook.react.devsupport.interfaces.DevSupportManager;
3434
import com.facebook.react.devsupport.interfaces.RedBoxHandler;
35+
import com.facebook.react.internal.ChoreographerProvider;
3536
import com.facebook.react.jscexecutor.JSCExecutor;
3637
import com.facebook.react.jscexecutor.JSCExecutorFactory;
3738
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
@@ -72,6 +73,7 @@ public class ReactInstanceManagerBuilder {
7273
private @Nullable SurfaceDelegateFactory mSurfaceDelegateFactory;
7374
private @Nullable DevLoadingViewManager mDevLoadingViewManager;
7475
private @Nullable JSEngineResolutionAlgorithm mJSEngineResolutionAlgorithm = null;
76+
private @Nullable ChoreographerProvider mChoreographerProvider = null;
7577

7678
/* package protected */ ReactInstanceManagerBuilder() {}
7779

@@ -287,6 +289,12 @@ public ReactInstanceManagerBuilder setReactPackageTurboModuleManagerDelegateBuil
287289
return this;
288290
}
289291

292+
public ReactInstanceManagerBuilder setChoreographerProvider(
293+
@Nullable ChoreographerProvider choreographerProvider) {
294+
mChoreographerProvider = choreographerProvider;
295+
return this;
296+
}
297+
290298
/**
291299
* Instantiates a new {@link ReactInstanceManager}. Before calling {@code build}, the following
292300
* must be called:
@@ -350,7 +358,8 @@ public ReactInstanceManager build() {
350358
mCustomPackagerCommandHandlers,
351359
mTMMDelegateBuilder,
352360
mSurfaceDelegateFactory,
353-
mDevLoadingViewManager);
361+
mDevLoadingViewManager,
362+
mChoreographerProvider);
354363
}
355364

356365
private JavaScriptExecutorFactory getDefaultJSExecutorFactory(

packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactNativeHost.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import com.facebook.react.devsupport.DevSupportManagerFactory;
2222
import com.facebook.react.devsupport.interfaces.DevLoadingViewManager;
2323
import com.facebook.react.devsupport.interfaces.RedBoxHandler;
24+
import com.facebook.react.internal.ChoreographerProvider;
2425
import java.util.List;
2526

2627
/**
@@ -87,7 +88,8 @@ protected ReactInstanceManager createReactInstanceManager() {
8788
.setInitialLifecycleState(LifecycleState.BEFORE_CREATE)
8889
.setReactPackageTurboModuleManagerDelegateBuilder(
8990
getReactPackageTurboModuleManagerDelegateBuilder())
90-
.setJSEngineResolutionAlgorithm(getJSEngineResolutionAlgorithm());
91+
.setJSEngineResolutionAlgorithm(getJSEngineResolutionAlgorithm())
92+
.setChoreographerProvider(getChoreographerProvider());
9193

9294
for (ReactPackage reactPackage : getPackages()) {
9395
builder.addPackage(reactPackage);
@@ -213,4 +215,12 @@ protected String getJSMainModuleName() {
213215
protected @Nullable JSEngineResolutionAlgorithm getJSEngineResolutionAlgorithm() {
214216
return null;
215217
}
218+
219+
/**
220+
* Returns a custom implementation of ChoreographerProvider to be used this host. If null - React
221+
* will use default direct android.view.Choreographer-based provider.
222+
*/
223+
protected @Nullable ChoreographerProvider getChoreographerProvider() {
224+
return null;
225+
}
216226
}

0 commit comments

Comments
 (0)