Remove android_react_native_perf.use_separate_ui_bg_thread experiment.

Reviewed By: AaaChiuuu

Differential Revision: D6313250

fbshipit-source-id: 583a729a157a2053827631a43e38917753e78477
This commit is contained in:
Dmitry Zakharov 2017-11-14 06:39:22 -08:00 committed by Facebook Github Bot
parent 053776338e
commit 4f886a29a1
14 changed files with 16 additions and 151 deletions

View File

@ -156,7 +156,6 @@ public class ReactInstanceManager {
private final @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
private final boolean mLazyNativeModulesEnabled;
private final boolean mDelayViewManagerClassLoadsEnabled;
private final boolean mUseSeparateUIBackgroundThread;
private final int mMinNumShakes;
private class ReactContextInitParams {
@ -204,7 +203,6 @@ public class ReactInstanceManager {
boolean lazyViewManagersEnabled,
boolean delayViewManagerClassLoadsEnabled,
@Nullable DevBundleDownloadListener devBundleDownloadListener,
boolean useSeparateUIBackgroundThread,
int minNumShakes,
int minTimeLeftInFrameForNonBatchedOperationMs) {
Log.d(ReactConstants.TAG, "ReactInstanceManager.ctor()");
@ -236,7 +234,6 @@ public class ReactInstanceManager {
mNativeModuleCallExceptionHandler = nativeModuleCallExceptionHandler;
mLazyNativeModulesEnabled = lazyNativeModulesEnabled;
mDelayViewManagerClassLoadsEnabled = delayViewManagerClassLoadsEnabled;
mUseSeparateUIBackgroundThread = useSeparateUIBackgroundThread;
mMinNumShakes = minNumShakes;
synchronized (mPackages) {
PrinterHolder.getPrinter()
@ -995,15 +992,6 @@ public class ReactInstanceManager {
Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
}
});
if (mUseSeparateUIBackgroundThread) {
reactContext.runOnUiBackgroundQueueThread(
new Runnable() {
@Override
public void run() {
Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
}
});
}
}
private void attachRootViewToInstance(
@ -1080,9 +1068,7 @@ public class ReactInstanceManager {
? mNativeModuleCallExceptionHandler
: mDevSupportManager;
CatalystInstanceImpl.Builder catalystInstanceBuilder = new CatalystInstanceImpl.Builder()
.setReactQueueConfigurationSpec(mUseSeparateUIBackgroundThread ?
ReactQueueConfigurationSpec.createWithSeparateUIBackgroundThread() :
ReactQueueConfigurationSpec.createDefault())
.setReactQueueConfigurationSpec(ReactQueueConfigurationSpec.createDefault())
.setJSExecutor(jsExecutor)
.setRegistry(nativeModuleRegistry)
.setJSBundleLoader(jsBundleLoader)

View File

@ -46,7 +46,6 @@ public class ReactInstanceManagerBuilder {
private boolean mDelayViewManagerClassLoadsEnabled;
private @Nullable DevBundleDownloadListener mDevBundleDownloadListener;
private @Nullable JavaScriptExecutorFactory mJavaScriptExecutorFactory;
private boolean mUseSeparateUIBackgroundThread;
private int mMinNumShakes = 1;
private int mMinTimeLeftInFrameForNonBatchedOperationMs = -1;
@ -214,12 +213,6 @@ public class ReactInstanceManagerBuilder {
return this;
}
public ReactInstanceManagerBuilder setUseSeparateUIBackgroundThread(
boolean useSeparateUIBackgroundThread) {
mUseSeparateUIBackgroundThread = useSeparateUIBackgroundThread;
return this;
}
public ReactInstanceManagerBuilder setMinNumShakes(int minNumShakes) {
mMinNumShakes = minNumShakes;
return this;
@ -286,7 +279,6 @@ public class ReactInstanceManagerBuilder {
mLazyViewManagersEnabled,
mDelayViewManagerClassLoadsEnabled,
mDevBundleDownloadListener,
mUseSeparateUIBackgroundThread,
mMinNumShakes,
mMinTimeLeftInFrameForNonBatchedOperationMs);
}

View File

@ -330,7 +330,7 @@ public class ReactRootView extends SizeMonitoringFrameLayout
}
final ReactContext reactApplicationContext = mReactInstanceManager.getCurrentReactContext();
if (reactApplicationContext != null) {
reactApplicationContext.runUIBackgroundRunnable(
reactApplicationContext.runOnNativeModulesQueueThread(
new GuardedRunnable(reactApplicationContext) {
@Override
public void runGuarded() {

View File

@ -83,7 +83,6 @@ public class CatalystInstanceImpl implements CatalystInstance {
private final NativeModuleRegistry mNativeModuleRegistry;
private final NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
private final MessageQueueThread mNativeModulesQueueThread;
private final @Nullable MessageQueueThread mUIBackgroundQueueThread;
private boolean mInitialized = false;
private volatile boolean mAcceptCalls = false;
@ -114,7 +113,6 @@ public class CatalystInstanceImpl implements CatalystInstance {
mJSBundleLoader = jsBundleLoader;
mNativeModuleCallExceptionHandler = nativeModuleCallExceptionHandler;
mNativeModulesQueueThread = mReactQueueConfiguration.getNativeModulesQueueThread();
mUIBackgroundQueueThread = mReactQueueConfiguration.getUIBackgroundQueueThread();
mTraceListener = new JSProfilerTraceListener(this);
Log.d(ReactConstants.TAG, "Initializing React Xplat Bridge before initializeBridge");
@ -123,7 +121,6 @@ public class CatalystInstanceImpl implements CatalystInstance {
jsExecutor,
mReactQueueConfiguration.getJSQueueThread(),
mNativeModulesQueueThread,
mUIBackgroundQueueThread,
mNativeModuleRegistry.getJavaModules(this),
mNativeModuleRegistry.getCxxModules());
Log.d(ReactConstants.TAG, "Initializing React Xplat Bridge after initializeBridge");
@ -191,7 +188,6 @@ public class CatalystInstanceImpl implements CatalystInstance {
JavaScriptExecutor jsExecutor,
MessageQueueThread jsQueue,
MessageQueueThread moduleQueue,
MessageQueueThread uiBackgroundQueue,
Collection<JavaModuleWrapper> javaModules,
Collection<ModuleHolder> cxxModules);

View File

@ -44,7 +44,6 @@ public class ReactContext extends ContextWrapper {
private @Nullable CatalystInstance mCatalystInstance;
private @Nullable LayoutInflater mInflater;
private @Nullable MessageQueueThread mUiMessageQueueThread;
private @Nullable MessageQueueThread mUiBackgroundMessageQueueThread;
private @Nullable MessageQueueThread mNativeModulesMessageQueueThread;
private @Nullable MessageQueueThread mJSMessageQueueThread;
private @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
@ -69,7 +68,6 @@ public class ReactContext extends ContextWrapper {
ReactQueueConfiguration queueConfig = catalystInstance.getReactQueueConfiguration();
mUiMessageQueueThread = queueConfig.getUIQueueThread();
mUiBackgroundMessageQueueThread = queueConfig.getUIBackgroundQueueThread();
mNativeModulesMessageQueueThread = queueConfig.getNativeModulesQueueThread();
mJSMessageQueueThread = queueConfig.getJSQueueThread();
}
@ -269,14 +267,6 @@ public class ReactContext extends ContextWrapper {
Assertions.assertNotNull(mUiMessageQueueThread).runOnQueue(runnable);
}
public void assertOnUiBackgroundQueueThread() {
Assertions.assertNotNull(mUiBackgroundMessageQueueThread).assertIsOnThread();
}
public void runOnUiBackgroundQueueThread(Runnable runnable) {
Assertions.assertNotNull(mUiBackgroundMessageQueueThread).runOnQueue(runnable);
}
public void assertOnNativeModulesQueueThread() {
Assertions.assertNotNull(mNativeModulesMessageQueueThread).assertIsOnThread();
}
@ -305,26 +295,6 @@ public class ReactContext extends ContextWrapper {
Assertions.assertNotNull(mJSMessageQueueThread).runOnQueue(runnable);
}
public boolean hasUIBackgroundRunnableThread() {
return mUiBackgroundMessageQueueThread != null;
}
public void assertOnUIBackgroundOrNativeModulesThread() {
if (mUiBackgroundMessageQueueThread == null) {
assertOnNativeModulesQueueThread();
} else {
assertOnUiBackgroundQueueThread();
}
}
public void runUIBackgroundRunnable(Runnable runnable) {
if (mUiBackgroundMessageQueueThread == null) {
runOnNativeModulesQueueThread(runnable);
} else {
runOnUiBackgroundQueueThread(runnable);
}
}
/**
* Passes the given exception to the current
* {@link com.facebook.react.bridge.NativeModuleCallExceptionHandler} if one exists, rethrowing

View File

@ -9,7 +9,6 @@
package com.facebook.react.bridge.queue;
import javax.annotation.Nullable;
/**
* Specifies which {@link MessageQueueThread}s must be used to run the various contexts of
@ -22,8 +21,6 @@ import javax.annotation.Nullable;
*/
public interface ReactQueueConfiguration {
MessageQueueThread getUIQueueThread();
@Nullable
MessageQueueThread getUIBackgroundQueueThread();
MessageQueueThread getNativeModulesQueueThread();
MessageQueueThread getJSQueueThread();
void destroy();

View File

@ -9,8 +9,6 @@
package com.facebook.react.bridge.queue;
import javax.annotation.Nullable;
import java.util.Map;
import android.os.Looper;
@ -20,17 +18,14 @@ import com.facebook.react.common.MapBuilder;
public class ReactQueueConfigurationImpl implements ReactQueueConfiguration {
private final MessageQueueThreadImpl mUIQueueThread;
private final @Nullable MessageQueueThreadImpl mUIBackgroundQueueThread;
private final MessageQueueThreadImpl mNativeModulesQueueThread;
private final MessageQueueThreadImpl mJSQueueThread;
private ReactQueueConfigurationImpl(
MessageQueueThreadImpl uiQueueThread,
@Nullable MessageQueueThreadImpl uiBackgroundQueueThread,
MessageQueueThreadImpl nativeModulesQueueThread,
MessageQueueThreadImpl jsQueueThread) {
MessageQueueThreadImpl uiQueueThread,
MessageQueueThreadImpl nativeModulesQueueThread,
MessageQueueThreadImpl jsQueueThread) {
mUIQueueThread = uiQueueThread;
mUIBackgroundQueueThread = uiBackgroundQueueThread;
mNativeModulesQueueThread = nativeModulesQueueThread;
mJSQueueThread = jsQueueThread;
}
@ -40,11 +35,6 @@ public class ReactQueueConfigurationImpl implements ReactQueueConfiguration {
return mUIQueueThread;
}
@Override
public @Nullable MessageQueueThread getUIBackgroundQueueThread() {
return mUIBackgroundQueueThread;
}
@Override
public MessageQueueThread getNativeModulesQueueThread() {
return mNativeModulesQueueThread;
@ -60,10 +50,6 @@ public class ReactQueueConfigurationImpl implements ReactQueueConfiguration {
* is destroyed so that we shut down the proper queue threads.
*/
public void destroy() {
if (mUIBackgroundQueueThread != null &&
mUIBackgroundQueueThread.getLooper() != Looper.getMainLooper()) {
mUIBackgroundQueueThread.quitSynchronous();
}
if (mNativeModulesQueueThread.getLooper() != Looper.getMainLooper()) {
mNativeModulesQueueThread.quitSynchronous();
}
@ -94,16 +80,8 @@ public class ReactQueueConfigurationImpl implements ReactQueueConfiguration {
MessageQueueThreadImpl.create(spec.getNativeModulesQueueThreadSpec(), exceptionHandler);
}
MessageQueueThreadImpl uiBackgroundThread =
specsToThreads.get(spec.getUIBackgroundQueueThreadSpec());
if (uiBackgroundThread == null && spec.getUIBackgroundQueueThreadSpec() != null) {
uiBackgroundThread =
MessageQueueThreadImpl.create(spec.getUIBackgroundQueueThreadSpec(), exceptionHandler);
}
return new ReactQueueConfigurationImpl(
uiThread,
uiBackgroundThread,
nativeModulesThread,
jsThread);
}

View File

@ -25,23 +25,16 @@ public class ReactQueueConfigurationSpec {
private static final long LEGACY_STACK_SIZE_BYTES = 2000000;
private final @Nullable MessageQueueThreadSpec mUIBackgroundQueueThreadSpec;
private final MessageQueueThreadSpec mNativeModulesQueueThreadSpec;
private final MessageQueueThreadSpec mJSQueueThreadSpec;
private ReactQueueConfigurationSpec(
@Nullable MessageQueueThreadSpec uiBackgroundQueueThreadSpec,
MessageQueueThreadSpec nativeModulesQueueThreadSpec,
MessageQueueThreadSpec jsQueueThreadSpec) {
mUIBackgroundQueueThreadSpec = uiBackgroundQueueThreadSpec;
mNativeModulesQueueThreadSpec = nativeModulesQueueThreadSpec;
mJSQueueThreadSpec = jsQueueThreadSpec;
}
public @Nullable MessageQueueThreadSpec getUIBackgroundQueueThreadSpec() {
return mUIBackgroundQueueThreadSpec;
}
public MessageQueueThreadSpec getNativeModulesQueueThreadSpec() {
return mNativeModulesQueueThreadSpec;
}
@ -64,32 +57,11 @@ public class ReactQueueConfigurationSpec {
.build();
}
public static ReactQueueConfigurationSpec createWithSeparateUIBackgroundThread() {
MessageQueueThreadSpec spec = Build.VERSION.SDK_INT < 21 ?
MessageQueueThreadSpec.newBackgroundThreadSpec("native_modules", LEGACY_STACK_SIZE_BYTES) :
MessageQueueThreadSpec.newBackgroundThreadSpec("native_modules");
return builder()
.setJSQueueThreadSpec(MessageQueueThreadSpec.newBackgroundThreadSpec("js"))
.setNativeModulesQueueThreadSpec(spec)
.setUIBackgroundQueueThreadSpec(
MessageQueueThreadSpec.newUIBackgroundTreadSpec("ui_background"))
.build();
}
public static class Builder {
private @Nullable MessageQueueThreadSpec mUIBackgroundQueueSpec;
private @Nullable MessageQueueThreadSpec mNativeModulesQueueSpec;
private @Nullable MessageQueueThreadSpec mJSQueueSpec;
public Builder setUIBackgroundQueueThreadSpec(MessageQueueThreadSpec spec) {
Assertions.assertCondition(
mUIBackgroundQueueSpec == null,
"Setting UI background queue multiple times!");
mUIBackgroundQueueSpec = spec;
return this;
}
public Builder setNativeModulesQueueThreadSpec(MessageQueueThreadSpec spec) {
Assertions.assertCondition(
mNativeModulesQueueSpec == null,
@ -106,7 +78,6 @@ public class ReactQueueConfigurationSpec {
public ReactQueueConfigurationSpec build() {
return new ReactQueueConfigurationSpec(
mUIBackgroundQueueSpec,
Assertions.assertNotNull(mNativeModulesQueueSpec),
Assertions.assertNotNull(mJSQueueSpec));
}

View File

@ -305,7 +305,7 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
new SizeMonitoringFrameLayout.OnSizeChangedListener() {
@Override
public void onSizeChanged(final int width, final int height, int oldW, int oldH) {
reactApplicationContext.runUIBackgroundRunnable(
reactApplicationContext.runOnNativeModulesQueueThread(
new GuardedRunnable(reactApplicationContext) {
@Override
public void runGuarded() {
@ -325,7 +325,7 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
}
public void updateNodeSize(int nodeViewTag, int newWidth, int newHeight) {
getReactApplicationContext().assertOnUIBackgroundOrNativeModulesThread();
getReactApplicationContext().assertOnNativeModulesQueueThread();
mUIImplementation.updateNodeSize(nodeViewTag, newWidth, newHeight);
}
@ -344,7 +344,7 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
reactApplicationContext.assertOnUiQueueThread();
reactApplicationContext.runUIBackgroundRunnable(
reactApplicationContext.runOnNativeModulesQueueThread(
new GuardedRunnable(reactApplicationContext) {
@Override
public void runGuarded() {

View File

@ -306,7 +306,7 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe
if (getChildCount() > 0) {
final int viewTag = getChildAt(0).getId();
ReactContext reactContext = (ReactContext) getContext();
reactContext.runUIBackgroundRunnable(
reactContext.runOnNativeModulesQueueThread(
new GuardedRunnable(reactContext) {
@Override
public void runGuarded() {

View File

@ -89,9 +89,6 @@ CatalystInstanceImpl::~CatalystInstanceImpl() {
if (moduleMessageQueue_ != NULL) {
moduleMessageQueue_->quitSynchronous();
}
if (uiBackgroundMessageQueue_ != NULL) {
uiBackgroundMessageQueue_->quitSynchronous();
}
}
void CatalystInstanceImpl::registerNatives() {
@ -119,15 +116,11 @@ void CatalystInstanceImpl::initializeBridge(
JavaScriptExecutorHolder* jseh,
jni::alias_ref<JavaMessageQueueThread::javaobject> jsQueue,
jni::alias_ref<JavaMessageQueueThread::javaobject> nativeModulesQueue,
jni::alias_ref<JavaMessageQueueThread::javaobject> uiBackgroundQueue,
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules,
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules) {
// TODO mhorowitz: how to assert here?
// Assertions.assertCondition(mBridge == null, "initializeBridge should be called once");
moduleMessageQueue_ = std::make_shared<JMessageQueueThread>(nativeModulesQueue);
if (uiBackgroundQueue.get() != nullptr) {
uiBackgroundMessageQueue_ = std::make_shared<JMessageQueueThread>(uiBackgroundQueue);
}
// This used to be:
//
@ -150,13 +143,12 @@ void CatalystInstanceImpl::initializeBridge(
std::weak_ptr<Instance>(instance_),
javaModules,
cxxModules,
moduleMessageQueue_,
uiBackgroundMessageQueue_));
moduleMessageQueue_));
instance_->initializeBridge(
folly::make_unique<JInstanceCallback>(
callback,
uiBackgroundMessageQueue_ != NULL ? uiBackgroundMessageQueue_ : moduleMessageQueue_),
moduleMessageQueue_),
jseh->getExecutorFactory(),
folly::make_unique<JMessageQueueThread>(jsQueue),
moduleRegistry_);
@ -169,8 +161,7 @@ void CatalystInstanceImpl::extendNativeModules(
std::weak_ptr<Instance>(instance_),
javaModules,
cxxModules,
moduleMessageQueue_,
uiBackgroundMessageQueue_));
moduleMessageQueue_));
}
void CatalystInstanceImpl::jniSetSourceURL(const std::string& sourceURL) {

View File

@ -46,7 +46,6 @@ class CatalystInstanceImpl : public jni::HybridClass<CatalystInstanceImpl> {
JavaScriptExecutorHolder* jseh,
jni::alias_ref<JavaMessageQueueThread::javaobject> jsQueue,
jni::alias_ref<JavaMessageQueueThread::javaobject> moduleQueue,
jni::alias_ref<JavaMessageQueueThread::javaobject> uiBackgroundQueue,
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules,
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules);
@ -79,7 +78,6 @@ class CatalystInstanceImpl : public jni::HybridClass<CatalystInstanceImpl> {
std::shared_ptr<Instance> instance_;
std::shared_ptr<ModuleRegistry> moduleRegistry_;
std::shared_ptr<JMessageQueueThread> moduleMessageQueue_;
std::shared_ptr<JMessageQueueThread> uiBackgroundMessageQueue_;
};
}}

View File

@ -33,25 +33,12 @@ std::vector<std::unique_ptr<NativeModule>> buildNativeModuleList(
std::weak_ptr<Instance> winstance,
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules,
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules,
std::shared_ptr<MessageQueueThread> moduleMessageQueue,
std::shared_ptr<MessageQueueThread> uiBackgroundMessageQueue) {
std::shared_ptr<MessageQueueThread> moduleMessageQueue) {
std::vector<std::unique_ptr<NativeModule>> modules;
if (javaModules) {
for (const auto& jm : *javaModules) {
std::string name = jm->getName();
if (uiBackgroundMessageQueue != NULL &&
// This is techinically a hack. Perhaps we should bind the specific queue to the module
// in the module holder or wrapper.
// TODO expose as module configuration option
(name == "UIManager" ||
name == "NativeAnimatedModule" ||
name == "FBFacebookReactNavigator")) {
modules.emplace_back(folly::make_unique<JavaNativeModule>(
winstance, jm, uiBackgroundMessageQueue));
} else {
modules.emplace_back(folly::make_unique<JavaNativeModule>(
winstance, jm, moduleMessageQueue));
}
modules.emplace_back(folly::make_unique<JavaNativeModule>(
winstance, jm, moduleMessageQueue));
}
}
if (cxxModules) {

View File

@ -27,7 +27,6 @@ std::vector<std::unique_ptr<NativeModule>> buildNativeModuleList(
std::weak_ptr<Instance> winstance,
jni::alias_ref<jni::JCollection<JavaModuleWrapper::javaobject>::javaobject> javaModules,
jni::alias_ref<jni::JCollection<ModuleHolder::javaobject>::javaobject> cxxModules,
std::shared_ptr<MessageQueueThread> moduleMessageQueue,
std::shared_ptr<MessageQueueThread> uiBackgroundMessageQueue);
std::shared_ptr<MessageQueueThread> moduleMessageQueue);
}
}