Revert D4840716: Refactor interfaces

Differential Revision: D4840716

fbshipit-source-id: 1b6a6050d78ccbbd3c817621df1c1c989594fdb1
This commit is contained in:
Martin Kralik 2017-04-06 05:50:28 -07:00 committed by Facebook Github Bot
parent 77bee75893
commit 5f37483466
11 changed files with 35 additions and 126 deletions

View File

@ -39,6 +39,7 @@ cxx_library(
preprocessor_flags = [ preprocessor_flags = [
"-DLOG_TAG=\"ReactNativeJNI\"", "-DLOG_TAG=\"ReactNativeJNI\"",
"-DWITH_FBSYSTRACE=1", "-DWITH_FBSYSTRACE=1",
"-DWITH_INSPECTOR=1",
], ],
soname = "libreactnativejnifb.$(ext)", soname = "libreactnativejnifb.$(ext)",
visibility = [ visibility = [

View File

@ -1,25 +1,24 @@
// Copyright 2004-present Facebook. All Rights Reserved. // Copyright 2004-present Facebook. All Rights Reserved.
#include "JInspector.h" #include "JInspector.h"
#include <jschelpers/JavaScriptCore.h>
#ifdef WITH_FBJSCEXTENSIONS #ifdef WITH_INSPECTOR
namespace facebook { namespace facebook {
namespace react { namespace react {
namespace { namespace {
class RemoteConnection : public IRemoteConnection { class RemoteConnection : public Inspector::RemoteConnection {
public: public:
RemoteConnection(jni::alias_ref<JRemoteConnection::javaobject> connection) RemoteConnection(jni::alias_ref<JRemoteConnection::javaobject> connection)
: connection_(jni::make_global(connection)) {} : connection_(jni::make_global(connection)) {}
virtual void onMessage(std::string message) override { void onMessage(std::string message) override {
connection_->onMessage(message); connection_->onMessage(message);
} }
virtual void onDisconnect() override { void onDisconnect() override {
connection_->onDisconnect(); connection_->onDisconnect();
} }
private: private:
@ -43,7 +42,7 @@ void JRemoteConnection::onDisconnect() const {
method(self()); method(self());
} }
JLocalConnection::JLocalConnection(std::unique_ptr<ILocalConnection> connection) JLocalConnection::JLocalConnection(std::unique_ptr<Inspector::LocalConnection> connection)
: connection_(std::move(connection)) {} : connection_(std::move(connection)) {}
void JLocalConnection::sendMessage(std::string message) { void JLocalConnection::sendMessage(std::string message) {
@ -61,17 +60,13 @@ void JLocalConnection::registerNatives() {
}); });
} }
static IInspector* getInspectorInstance() {
return JSC_JSInspectorGetInstance(true /*useCustomJSC*/);
}
jni::global_ref<JInspector::javaobject> JInspector::instance(jni::alias_ref<jclass>) { jni::global_ref<JInspector::javaobject> JInspector::instance(jni::alias_ref<jclass>) {
static auto instance = jni::make_global(newObjectCxxArgs(getInspectorInstance()/*&Inspector::instance()*/)); static auto instance = jni::make_global(newObjectCxxArgs(&Inspector::instance()));
return instance; return instance;
} }
jni::local_ref<jni::JArrayClass<JPage::javaobject>> JInspector::getPages() { jni::local_ref<jni::JArrayClass<JPage::javaobject>> JInspector::getPages() {
std::vector<InspectorPage> pages = inspector_->getPages(); std::vector<Inspector::Page> pages = inspector_->getPages();
auto array = jni::JArrayClass<JPage::javaobject>::newArray(pages.size()); auto array = jni::JArrayClass<JPage::javaobject>::newArray(pages.size());
for (size_t i = 0; i < pages.size(); i++) { for (size_t i = 0; i < pages.size(); i++) {
(*array)[i] = JPage::create(pages[i].id, pages[i].title); (*array)[i] = JPage::create(pages[i].id, pages[i].title);

View File

@ -2,9 +2,9 @@
#pragma once #pragma once
#ifdef WITH_FBJSCEXTENSIONS #ifdef WITH_INSPECTOR
#include <jschelpers/InspectorInterfaces.h> #include <inspector/Inspector.h>
#include <fb/fbjni.h> #include <fb/fbjni.h>
#include <folly/Memory.h> #include <folly/Memory.h>
@ -31,14 +31,14 @@ class JLocalConnection : public jni::HybridClass<JLocalConnection> {
public: public:
static constexpr auto kJavaDescriptor = "Lcom/facebook/react/bridge/Inspector$LocalConnection;"; static constexpr auto kJavaDescriptor = "Lcom/facebook/react/bridge/Inspector$LocalConnection;";
JLocalConnection(std::unique_ptr<ILocalConnection> connection); JLocalConnection(std::unique_ptr<Inspector::LocalConnection> connection);
void sendMessage(std::string message); void sendMessage(std::string message);
void disconnect(); void disconnect();
static void registerNatives(); static void registerNatives();
private: private:
std::unique_ptr<ILocalConnection> connection_; std::unique_ptr<Inspector::LocalConnection> connection_;
}; };
class JInspector : public jni::HybridClass<JInspector> { class JInspector : public jni::HybridClass<JInspector> {
@ -54,9 +54,9 @@ public:
private: private:
friend HybridBase; friend HybridBase;
JInspector(IInspector* inspector) : inspector_(inspector) {} JInspector(Inspector* inspector) : inspector_(inspector) {}
IInspector* inspector_; Inspector* inspector_;
}; };
} }

View File

@ -18,7 +18,7 @@
#include "JCallback.h" #include "JCallback.h"
#include "JSLogging.h" #include "JSLogging.h"
#ifdef WITH_FBJSCEXTENSIONS #ifdef WITH_INSPECTOR
#include "JInspector.h" #include "JInspector.h"
#endif #endif
@ -171,7 +171,7 @@ extern "C" JNIEXPORT jint JNI_OnLoad(JavaVM* vm, void* reserved) {
CxxModuleWrapperBase::registerNatives(); CxxModuleWrapperBase::registerNatives();
CxxModuleWrapper::registerNatives(); CxxModuleWrapper::registerNatives();
JCallbackImpl::registerNatives(); JCallbackImpl::registerNatives();
#ifdef WITH_FBJSCEXTENSIONS #ifdef WITH_INSPECTOR
JInspector::registerNatives(); JInspector::registerNatives();
#endif #endif

View File

@ -39,6 +39,7 @@ if THIS_IS_FBANDROID:
'-DWITH_JSC_MEMORY_PRESSURE=1', '-DWITH_JSC_MEMORY_PRESSURE=1',
'-DWITH_REACT_INTERNAL_SETTINGS=1', '-DWITH_REACT_INTERNAL_SETTINGS=1',
'-DWITH_FB_MEMORY_PROFILING=1', '-DWITH_FB_MEMORY_PROFILING=1',
'-DWITH_INSPECTOR=1',
], ],
deps = JSC_DEPS, deps = JSC_DEPS,
visibility = [ visibility = [

View File

@ -18,7 +18,10 @@
#include <jschelpers/JSCHelpers.h> #include <jschelpers/JSCHelpers.h>
#include <jschelpers/Value.h> #include <jschelpers/Value.h>
#include <jschelpers/InspectorInterfaces.h>
#ifdef WITH_INSPECTOR
#include <inspector/Inspector.h>
#endif
#include "JSBundleType.h" #include "JSBundleType.h"
#include "Platform.h" #include "Platform.h"
@ -217,16 +220,6 @@ void JSCExecutor::setContextName(const std::string& name) {
JSC_JSGlobalContextSetName(m_context, jsName); JSC_JSGlobalContextSetName(m_context, jsName);
} }
static bool canUseInspector(JSContextRef context) {
#if defined(__APPLE__)
return isCustomJSCPtr(context);
#elif defined(WITH_FBJSCEXTENSIONS)
return true;
#else
return false;
#endif
}
void JSCExecutor::initOnJSVMThread() throw(JSException) { void JSCExecutor::initOnJSVMThread() throw(JSException) {
SystraceSection s("JSCExecutor.initOnJSVMThread"); SystraceSection s("JSCExecutor.initOnJSVMThread");
@ -260,10 +253,9 @@ void JSCExecutor::initOnJSVMThread() throw(JSException) {
// Add a pointer to ourselves so we can retrieve it later in our hooks // Add a pointer to ourselves so we can retrieve it later in our hooks
Object::getGlobalObject(m_context).setPrivate(this); Object::getGlobalObject(m_context).setPrivate(this);
if (canUseInspector(m_context)) { #ifdef WITH_INSPECTOR
IInspector* pInspector = JSC_JSInspectorGetInstance(true); Inspector::instance().registerGlobalContext("main", m_context);
pInspector->registerGlobalContext("main", m_context); #endif
}
installNativeHook<&JSCExecutor::nativeFlushQueueImmediate>("nativeFlushQueueImmediate"); installNativeHook<&JSCExecutor::nativeFlushQueueImmediate>("nativeFlushQueueImmediate");
installNativeHook<&JSCExecutor::nativeCallSyncHook>("nativeCallSyncHook"); installNativeHook<&JSCExecutor::nativeCallSyncHook>("nativeCallSyncHook");
@ -319,10 +311,9 @@ void JSCExecutor::terminateOnJSVMThread() {
m_nativeModules.reset(); m_nativeModules.reset();
if (canUseInspector(m_context)) { #ifdef WITH_INSPECTOR
IInspector* pInspector = JSC_JSInspectorGetInstance(true); Inspector::instance().unregisterGlobalContext(m_context);
pInspector->unregisterGlobalContext(m_context); #endif
}
JSC_JSGlobalContextRelease(m_context); JSC_JSGlobalContextRelease(m_context);
m_context = nullptr; m_context = nullptr;

View File

@ -1,5 +1,4 @@
EXPORTED_HEADERS = [ EXPORTED_HEADERS = [
"InspectorInterfaces.h",
"JavaScriptCore.h", "JavaScriptCore.h",
"JSCHelpers.h", "JSCHelpers.h",
"JSCWrapper.h", "JSCWrapper.h",

View File

@ -1,55 +0,0 @@
/**
* Copyright (c) 2016-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
#pragma once
#include <memory>
#include <string>
#include <vector>
#include <JavaScriptCore/JSBase.h>
namespace facebook {
namespace react {
class IDestructible {
public:
virtual ~IDestructible() = 0;
};
struct InspectorPage {
const int id;
const std::string title;
};
class IRemoteConnection : public IDestructible {
public:
virtual ~IRemoteConnection() = 0;
virtual void onMessage(std::string message) = 0;
virtual void onDisconnect() = 0;
};
class ILocalConnection : public IDestructible {
public:
virtual ~ILocalConnection() = 0;
virtual void sendMessage(std::string message) = 0;
virtual void disconnect() = 0;
};
// Note: not destructible!
class IInspector {
public:
virtual void registerGlobalContext(std::string title, JSGlobalContextRef ctx) = 0;
virtual void unregisterGlobalContext(JSGlobalContextRef ctx) = 0;
virtual std::vector<InspectorPage> getPages() const = 0;
virtual std::unique_ptr<ILocalConnection> connect(int pageId, std::unique_ptr<IRemoteConnection> remote) = 0;
};
}
}

View File

@ -15,29 +15,19 @@
#include <jsc_stringref.h> #include <jsc_stringref.h>
#endif #endif
#include <jschelpers/InspectorInterfaces.h>
#if JSCINTERNAL || (!defined(__APPLE__))
#define JSC_IMPORT extern "C"
#else
#define JSC_IMPORT extern
#endif
JSC_IMPORT facebook::react::IInspector* JSInspectorGetInstance();
// This is used to substitute an alternate JSC implementation for
// testing. These calls must all be ABI compatible with the standard JSC.
JSC_IMPORT void configureJSCForIOS(std::string); // TODO: replace with folly::dynamic once supported
JSC_IMPORT JSValueRef JSEvaluateBytecodeBundle(JSContextRef, JSObjectRef, int, JSStringRef, JSValueRef*);
JSC_IMPORT bool JSSamplingProfilerEnabled();
JSC_IMPORT void JSStartSamplingProfilingOnMainJSCThread(JSGlobalContextRef);
JSC_IMPORT JSValueRef JSPokeSamplingProfiler(JSContextRef);
#if defined(__APPLE__) #if defined(__APPLE__)
#import <objc/objc.h> #import <objc/objc.h>
#import <JavaScriptCore/JSStringRefCF.h> #import <JavaScriptCore/JSStringRefCF.h>
#import <string> #import <string>
// This is used to substitute an alternate JSC implementation for
// testing. These calls must all be ABI compatible with the standard JSC.
extern void configureJSCForIOS(std::string); // TODO: replace with folly::dynamic once supported
extern JSValueRef JSEvaluateBytecodeBundle(JSContextRef, JSObjectRef, int, JSStringRef, JSValueRef*);
extern bool JSSamplingProfilerEnabled();
extern void JSStartSamplingProfilingOnMainJSCThread(JSGlobalContextRef);
extern JSValueRef JSPokeSamplingProfiler(JSContextRef);
/** /**
* JSNoBytecodeFileFormatVersion * JSNoBytecodeFileFormatVersion
* *
@ -124,8 +114,6 @@ struct JSCWrapper {
JSC_WRAPPER_METHOD(JSPokeSamplingProfiler); JSC_WRAPPER_METHOD(JSPokeSamplingProfiler);
JSC_WRAPPER_METHOD(JSStartSamplingProfilingOnMainJSCThread); JSC_WRAPPER_METHOD(JSStartSamplingProfilingOnMainJSCThread);
JSC_WRAPPER_METHOD(JSInspectorGetInstance);
JSC_WRAPPER_METHOD(configureJSCForIOS); JSC_WRAPPER_METHOD(configureJSCForIOS);
// Objective-C API // Objective-C API

View File

@ -182,10 +182,6 @@ jsc_poison(JSObjectMakeArrayBufferWithBytesNoCopy JSObjectMakeTypedArray
jsc_poison(JSSamplingProfilerEnabled JSPokeSamplingProfiler jsc_poison(JSSamplingProfilerEnabled JSPokeSamplingProfiler
JSStartSamplingProfilingOnMainJSCThread) JSStartSamplingProfilingOnMainJSCThread)
#define JSC_JSInspectorGetInstance(...) __jsc_bool_wrapper(JSInspectorGetInstance, __VA_ARGS__)
jsc_poison(JSInspectorGetInstance)
#define JSC_configureJSCForIOS(...) __jsc_bool_wrapper(configureJSCForIOS, __VA_ARGS__) #define JSC_configureJSCForIOS(...) __jsc_bool_wrapper(configureJSCForIOS, __VA_ARGS__)
jsc_poison(configureJSCForIOS) jsc_poison(configureJSCForIOS)

View File

@ -28,9 +28,6 @@ UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSStringCreateWithUTF8CStringExpectAscii)
#endif #endif
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSPokeSamplingProfiler) UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSPokeSamplingProfiler)
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSStartSamplingProfilingOnMainJSCThread) UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSStartSamplingProfilingOnMainJSCThread)
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(JSInspectorGetInstance)
UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(configureJSCForIOS) UNIMPLEMENTED_SYSTEM_JSC_FUNCTION(configureJSCForIOS)
bool JSSamplingProfilerEnabled() { bool JSSamplingProfilerEnabled() {
@ -122,10 +119,6 @@ const JSCWrapper* systemJSCWrapper() {
(decltype(&JSStartSamplingProfilingOnMainJSCThread)) (decltype(&JSStartSamplingProfilingOnMainJSCThread))
Unimplemented_JSStartSamplingProfilingOnMainJSCThread, Unimplemented_JSStartSamplingProfilingOnMainJSCThread,
.JSInspectorGetInstance =
(decltype(&JSInspectorGetInstance))
Unimplemented_JSInspectorGetInstance,
.configureJSCForIOS = .configureJSCForIOS =
(decltype(&configureJSCForIOS))Unimplemented_configureJSCForIOS, (decltype(&configureJSCForIOS))Unimplemented_configureJSCForIOS,