[WEEX-349][jsengine] Make weex core can run on single process mode Since Weex core may fork multi process failed, so we make it can run in single process when failed to run multi process.
Bug: WEEX-349 Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/547da26a Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/547da26a Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/547da26a Branch: refs/heads/master Commit: 547da26af5e3afd5af24a21f37fb89d5d7b4f0ed Parents: c4a204e Author: ä¸ç <yayun....@alibaba-inc.com> Authored: Wed May 9 11:38:03 2018 +0800 Committer: YorkShen <shenyua...@gmail.com> Committed: Thu May 10 15:39:51 2018 +0800 ---------------------------------------------------------------------- android/sdk/libs/armeabi/libweexjsc.so | Bin 1748292 -> 939976 bytes android/sdk/libs/armeabi/libweexjss.so | Bin 6801432 -> 3758900 bytes .../java/com/taobao/weex/WXSDKInstance.java | 8 + .../weex/adapter/IWXUserTrackAdapter.java | 8 + .../java/com/taobao/weex/bridge/WXBridge.java | 30 + .../com/taobao/weex/bridge/WXBridgeManager.java | 27 + .../com/taobao/weex/bridge/WXModuleManager.java | 12 +- .../java/com/taobao/weex/bridge/WXParams.java | 14 + .../java/com/taobao/weex/common/IWXBridge.java | 1 + .../com/taobao/weex/common/WXErrorCode.java | 18 + weex_core/Source/CMakeLists.txt | 3 + .../Source/android/base/string/string_utils.h | 6 + .../jsengine/multiprocess/ExtendJSApi.cpp | 182 +- .../android/jsengine/multiprocess/WeexProxy.cpp | 2402 +++++++++++------- .../android/jsengine/multiprocess/WeexProxy.h | 9 +- weex_core/Source/core/api/WeexJSCoreApi.cpp | 292 +++ weex_core/Source/core/api/WeexJSCoreApi.h | 86 + weex_core/Source/include/WeexApiHeader.h | 214 ++ 18 files changed, 2241 insertions(+), 1071 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/libs/armeabi/libweexjsc.so ---------------------------------------------------------------------- diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so index fb1b9a6..6fb838d 100644 Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/libs/armeabi/libweexjss.so ---------------------------------------------------------------------- diff --git a/android/sdk/libs/armeabi/libweexjss.so b/android/sdk/libs/armeabi/libweexjss.so index dcd78cc..042e336 100755 Binary files a/android/sdk/libs/armeabi/libweexjss.so and b/android/sdk/libs/armeabi/libweexjss.so differ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java index d54d23c..682e9f2 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -182,6 +182,14 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan } /** + * set make weexCore run in single process mode + * @param flag true means weexCore run in single process mode or multi process mode + */ + public void setUseSingleProcess(boolean flag) { + WXBridgeManager.getInstance().setUseSingleProcess(flag); + } + + /** * set open SandBox * @param flag */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java index 604b461..ec6be03 100644 --- a/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java +++ b/android/sdk/src/main/java/com/taobao/weex/adapter/IWXUserTrackAdapter.java @@ -42,6 +42,14 @@ public interface IWXUserTrackAdapter { String JS_BRIDGE = "jsBridge"; String STREAM_MODULE = "streamModule"; String INVOKE_MODULE = "invokeModule"; + String INIT_FRAMEWORK = "initFramework"; + + /** + * monitor keys + */ + String MONITOR_ERROR_CODE = "errCode"; + String MONITOR_ARG = "arg"; + String MONITOR_ERROR_MSG = "errMsg"; void commit(Context context, String eventId, String type, WXPerformance perf, Map<String, Serializable> params); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java index a0023f5..667d8e0 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java @@ -27,13 +27,18 @@ import com.alibaba.fastjson.JSONObject; import com.taobao.weex.WXEnvironment; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKManager; +import com.taobao.weex.adapter.IWXUserTrackAdapter; import com.taobao.weex.common.IWXBridge; +import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.dom.CSSShorthand; import com.taobao.weex.layout.ContentBoxMeasurement; +import com.taobao.weex.utils.WXExceptionUtils; import com.taobao.weex.utils.WXLogUtils; +import java.io.Serializable; import java.util.HashMap; import java.util.HashSet; +import java.util.Map; /** * Communication interface for Java code and JavaScript code. @@ -584,4 +589,29 @@ public class WXBridge implements IWXBridge { public void setViewPortWidth(String instanceId, float value) { nativeSetViewPortWidth(instanceId, value); } + + public void reportNativeInitStatus(String statusCode, String errorMsg) { + if (WXErrorCode.WX_JS_FRAMEWORK_INIT_SINGLE_PROCESS_SUCCESS.getErrorCode().equals(statusCode) + || WXErrorCode.WX_JS_FRAMEWORK_INIT_FAILED.getErrorCode().equals(statusCode)) { + IWXUserTrackAdapter userTrackAdapter = WXSDKManager.getInstance().getIWXUserTrackAdapter(); + if (userTrackAdapter != null) { + Map<String, Serializable> params = new HashMap<>(3); + params.put(IWXUserTrackAdapter.MONITOR_ERROR_CODE, statusCode); + params.put(IWXUserTrackAdapter.MONITOR_ARG, "InitFrameworkNativeError"); + params.put(IWXUserTrackAdapter.MONITOR_ERROR_MSG, errorMsg); + Log.e("Dyy", "reportNativeInitStatus is running and errorCode is " + statusCode + " And errorMsg is " + errorMsg); + userTrackAdapter.commit(null, null, IWXUserTrackAdapter.INIT_FRAMEWORK, null, params); + } + + return; + } + + for (WXErrorCode e : WXErrorCode.values()) { + if (e.getErrorType().equals(WXErrorCode.ErrorType.NATIVE_ERROR) + && e.getErrorCode().equals(statusCode)) { + WXExceptionUtils.commitCriticalExceptionRT(null, e, "initFramework", errorMsg, null); + break; + } + } + } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java index 219ad11..ea27602 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java @@ -30,6 +30,7 @@ import android.support.annotation.Nullable; import android.support.annotation.UiThread; import android.support.v4.util.ArrayMap; import android.text.TextUtils; +import android.util.Log; import android.view.View; import android.view.ViewGroup; @@ -37,6 +38,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.taobao.weex.WXEnvironment; +import com.taobao.weex.WXSDKEngine; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKManager; import com.taobao.weex.adapter.IWXJSExceptionAdapter; @@ -71,6 +73,7 @@ import com.taobao.weex.ui.action.GraphicActionUpdateAttr; import com.taobao.weex.ui.action.GraphicActionUpdateStyle; import com.taobao.weex.ui.action.GraphicPosition; import com.taobao.weex.ui.action.GraphicSize; +import com.taobao.weex.ui.component.WXComponent; import com.taobao.weex.ui.module.WXDomModule; import com.taobao.weex.utils.WXExceptionUtils; import com.taobao.weex.utils.WXFileUtils; @@ -174,6 +177,10 @@ public class WXBridgeManager implements Callback, BactchExecutor { // if true will open weex sandbox for multi context private volatile static boolean isSandBoxContext = true; + // add for cloud setting, default value is false. + // weexcore use single process or not + private static boolean isUseSingleProcess = false; + private enum BundType { Vue, Rax, @@ -234,6 +241,25 @@ public class WXBridgeManager implements Callback, BactchExecutor { return mBridgeManager; } + public void setUseSingleProcess(final boolean flag) { + if (flag != isUseSingleProcess) { + isUseSingleProcess = flag; +// //we should reinit framework if js framework has been initialized +// if (isJSFrameworkInit()) { +// if (isJSThread()) { +// WXSDKEngine.reload(); +// } else { +// post(new Runnable() { +// @Override +// public void run() { +// WXSDKEngine.reload(); +// } +// }); +// } +// } + } + } + public void setSandBoxContext(final boolean flag) { if (flag != isSandBoxContext) { isSandBoxContext = flag; @@ -1793,6 +1819,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { wxParams.setDeviceModel(config.get(WXConfig.sysModel)); wxParams.setShouldInfoCollect(config.get("infoCollect")); wxParams.setLogLevel(config.get(WXConfig.logLevel)); + wxParams.setUseSingleProcess(isUseSingleProcess ? "true" : "false"); String appName = config.get(WXConfig.appName); if (!TextUtils.isEmpty(appName)) { wxParams.setAppName(appName); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java index 3ee0b87..c13a442 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java @@ -59,12 +59,6 @@ public class WXModuleManager { private static Map<String, WXModule> sGlobalModuleMap = new HashMap<>(); private static Map<String, WXDomModule> sDomModuleMap = new HashMap<>(); - /** - * monitor keys - */ - private static String MONITOR_ERROR_CODE = "errCode"; - private static String MONITOR_ARG = "arg"; - private static String MONITOR_ERROR_MSG = "errMsg"; /** * module object dictionary @@ -168,9 +162,9 @@ public class WXModuleManager { IWXUserTrackAdapter userTrackAdapter = WXSDKManager.getInstance().getIWXUserTrackAdapter(); if(userTrackAdapter != null) { HashMap<String, Serializable> data = new HashMap<String, Serializable>(); - data.put(MONITOR_ERROR_CODE, "101"); - data.put(MONITOR_ARG, moduleStr + "." + methodStr); - data.put(MONITOR_ERROR_MSG, instance.getBundleUrl()); + data.put(IWXUserTrackAdapter.MONITOR_ERROR_CODE, "101"); + data.put(IWXUserTrackAdapter.MONITOR_ARG, moduleStr + "." + methodStr); + data.put(IWXUserTrackAdapter.MONITOR_ERROR_MSG, instance.getBundleUrl()); userTrackAdapter.commit(instance.getContext(), null, IWXUserTrackAdapter.INVOKE_MODULE, null, data); } return dispatchCallModuleMethod(instance,wxModule,args,invoker); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java index 6f964ce..495cdab 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXParams.java @@ -18,6 +18,10 @@ */ package com.taobao.weex.bridge; +import android.util.Log; + +import com.taobao.weex.utils.WXLogUtils; + import java.util.Map; public class WXParams { @@ -34,6 +38,7 @@ public class WXParams { private String logLevel; private String needInitV8; private String cacheDir; + private String useSingleProcess; private Map<String, String> options; @@ -139,6 +144,15 @@ public class WXParams { return logLevel; } + public String getUseSingleProcess() { + WXLogUtils.e("getUseSingleProcess is running"); + return useSingleProcess; + } + + public void setUseSingleProcess(String useSingleProcess) { + this.useSingleProcess = useSingleProcess; + } + public void setLogLevel(String logLevel) { this.logLevel = logLevel; } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java index 05e2907..5213854 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java @@ -185,4 +185,5 @@ public interface IWXBridge extends IWXObject { void setViewPortWidth(String instanceId, float value); + void reportNativeInitStatus(String statusCode, String errorMsg); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java index 838b42f..e18a075 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java @@ -155,6 +155,24 @@ public enum WXErrorCode { WX_ERR_JS_FRAMEWORK("-1002", "js framework error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), WX_ERR_JS_REINIT_FRAMEWORK("-1003", "js reinit framework error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + /** + * Single progress init error + */ + WX_ERR_SINGLE_PROCESS_DLOPEN_FILE_NOT_EXIST("-1004", "so file is not exist",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + + WX_ERR_SINGLE_PROCESS_DLOPEN_FLAIED("-1005", "dlopen so file failed",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + + WX_ERR_SINGLE_PROCESS_DLSYM_FAILED("-1006", "find function from so file failed",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + + WX_ERR_SINGLE_PROCESS_JS_FRAMEWORK("-1007", "js framework init singleProcess failed",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + + WX_JS_FRAMEWORK_INIT_MULPROCESS_FAILED("-1008", "js framework init multiProcess failed",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + + WX_JS_FRAMEWORK_REINIT_MULPROCESS_FAILED("-1009", "js framework reinit multiProcess failed",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + + WX_JS_FRAMEWORK_INIT_FAILED("-1010", "js framework init failed",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + + WX_JS_FRAMEWORK_INIT_SINGLE_PROCESS_SUCCESS("-1011", "js framework init success in single process",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/weex_core/Source/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/weex_core/Source/CMakeLists.txt b/weex_core/Source/CMakeLists.txt index 5c7d379..478680a 100644 --- a/weex_core/Source/CMakeLists.txt +++ b/weex_core/Source/CMakeLists.txt @@ -20,6 +20,7 @@ add_subdirectory(${CMAKE_SOURCE_DIR}/Source/IPC) ## include_directories for include head file ## include_directories(${CMAKE_SOURCE_DIR}/Source/IPC) +include_directories("include") add_library(weexjsc SHARED @@ -41,6 +42,8 @@ add_library(weexjsc SHARED ./android/jsengine/multiprocess/WeexProxy.cpp ./android/jsengine/multiprocess/ExtendJSApi.cpp + ./core/api/WeexJSCoreApi.cpp + ./core/render/manager/render_manager.cpp ./core/render/page/render_page.cpp ./core/render/node/render_object.cpp http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/weex_core/Source/android/base/string/string_utils.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/android/base/string/string_utils.h b/weex_core/Source/android/base/string/string_utils.h index bc45361..aeda0c5 100644 --- a/weex_core/Source/android/base/string/string_utils.h +++ b/weex_core/Source/android/base/string/string_utils.h @@ -26,6 +26,7 @@ #include <IPC/IPCByteArray.h> #include <malloc.h> #include "scoped_jstring.h" +#include "scoped_jstring_utf8.h" #include <iostream> #include <sstream> #include <string> @@ -154,6 +155,11 @@ static inline void addString(JNIEnv *env, IPCSerializer *serializer, jstring str size_t charsLength = scopedString.getCharsLength(); serializer->add(chars, charsLength); } +static inline void addByteArrayString(JNIEnv *env, IPCSerializer *serializer, jstring str) { + ScopedJStringUTF8 scopedJStringUTF8(env,str); + const char *string = scopedJStringUTF8.getChars(); + serializer->add(string,strlen(string)); +} static inline void addJSONString(JNIEnv *env, IPCSerializer *serializer, jstring str) { ScopedJString scopedString(env, str); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/547da26a/weex_core/Source/android/jsengine/multiprocess/ExtendJSApi.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/android/jsengine/multiprocess/ExtendJSApi.cpp b/weex_core/Source/android/jsengine/multiprocess/ExtendJSApi.cpp index 13c88d3..6cd9dce 100644 --- a/weex_core/Source/android/jsengine/multiprocess/ExtendJSApi.cpp +++ b/weex_core/Source/android/jsengine/multiprocess/ExtendJSApi.cpp @@ -18,13 +18,14 @@ */ #include <android/base/string/string_utils.h> #include <base/ViewUtils.h> +#include <core/api/WeexJSCoreApi.h> #include "ExtendJSApi.h" using namespace WeexCore; -static WeexCore::FunType gCanvasFunc = nullptr; +WeexCore::FunType gCanvasFunc = nullptr; -static WeexCore::FunTypeT3d t3dFunc = nullptr; +WeexCore::FunTypeT3d t3dFunc = nullptr; /** * This class aim to extend JS Api @@ -85,14 +86,10 @@ void ExtendJSApi::initFunction(IPCHandler *handler) { std::unique_ptr<IPCResult> handleSetJSVersion(IPCArguments *arguments) { const char* version = getArumentAsCStr(arguments, 0); - LOGA("init JSFrm version %s", version); - Bridge_Impl_Android::getInstance()->setJSVersion(version); + _setJSVersion(version); return createVoidResult(); } -void reportException(const char* pageId, const char *func, const char *exception_string) { - Bridge_Impl_Android::getInstance()->reportException(pageId, func, exception_string); -} std::unique_ptr<IPCResult> handleReportException(IPCArguments *arguments) { const char *pageId = nullptr; @@ -115,7 +112,7 @@ std::unique_ptr<IPCResult> handleReportException(IPCArguments *arguments) { } LOGE(" ReportException : %s", exceptionInfo); - reportException(pageId, func, exceptionInfo); + _reportException(pageId, func, exceptionInfo); return createVoidResult(); } @@ -127,7 +124,7 @@ std::unique_ptr<IPCResult> handle(IPCArguments *arguments) { std::unique_ptr<IPCResult> handleCallNativeLog(IPCArguments *arguments) { const char* str_array = getArumentAsCStr(arguments, 0); - Bridge_Impl_Android::getInstance()->callNativeLog(str_array); + _callNativeLog(str_array); return createInt32Result(static_cast<int32_t>(true)); } @@ -138,7 +135,7 @@ std::unique_ptr<IPCResult> handleSetTimeout(IPCArguments *arguments) { if (callbackID == nullptr || time == nullptr) return createInt32Result(static_cast<int32_t>(false)); - Bridge_Impl_Android::getInstance()->setTimeout(callbackID, time); + _setTimeout(callbackID,time); if (callbackID != nullptr) { delete[]callbackID; @@ -159,7 +156,7 @@ std::unique_ptr<IPCResult> handleSetInterval(IPCArguments *arguments) { return createInt32Result(-1); long time_ = atoi(_time); - int _timerId = (atoi(pageId) << 16) | (atoi(callbackID)); + int _timerId = _setInterval(pageId,callbackID,_time); if (pageId != nullptr) { delete[]pageId; @@ -197,17 +194,7 @@ std::unique_ptr<IPCResult> handleCallNative(IPCArguments *arguments) { char* task = getArumentAsCStr(arguments, 1); char* callback = getArumentAsCStr(arguments, 2); - if (pageId != nullptr && task != nullptr) { -#if JSAPI_LOG - LOGD("[ExtendJSApi] handleCallNative >>>> pageId: %s, task: %s", pageId, task); -#endif - - if (strcmp(task, "[{\"module\":\"dom\",\"method\":\"createFinish\",\"args\":[]}]") == 0) { - RenderManager::GetInstance()->CreateFinish(pageId) ? 0 : -1; - } else { - Bridge_Impl_Android::getInstance()->callNative(pageId, task, callback); - } - } + _callNative(pageId, task, callback); if (pageId != nullptr) { delete[]pageId; @@ -236,10 +223,7 @@ static std::unique_ptr<IPCResult> handleCallGCanvasLinkNative(IPCArguments *argu LOGD("[ExtendJSApi] handleCallGCanvasLinkNative >>>> pageId: %s, type: %d, args: %s", pageId, type, args); #endif - const char *retVal = NULL; - if (gCanvasFunc) { - retVal = callGCanvasFun(gCanvasFunc, pageId, type, args); - } + const char *retVal = _callGCanvasLinkNative(pageId,type,args); std::unique_ptr<IPCResult> ret = createVoidResult(); if (retVal) { @@ -264,12 +248,7 @@ static std::unique_ptr<IPCResult> handleT3DLinkNative(IPCArguments* arguments) LOGD("[ExtendJSApi] handleT3DLinkNative >>>> type: %d, args: %s", type, args); #endif - const char* retVal = NULL; - if (t3dFunc) { - retVal = WeexCore::weexCallT3dFunc(t3dFunc, type, args); - } - - + const char*retVal = _t3dLinkNative(type, args); std::unique_ptr<IPCResult> ret = createVoidResult(); if (retVal) { @@ -289,45 +268,7 @@ std::unique_ptr<IPCResult> handleCallNativeModule(IPCArguments *arguments) { char* argString = getArumentAsCStr(arguments, 3); char* optString = getArumentAsCStr(arguments, 4); - std::unique_ptr<IPCResult> ret = createInt32Result(-1); - - if (pageId != nullptr && module != nullptr && method != nullptr) { -#if JSAPI_LOG - LOGD("[ExtendJSApi] handleCallNativeModule >>>> pageId: %s, module: %s, method: %s, arg: %s, opt: %s", - pageId, module, method, argString, optString); -#endif - - // add for android support - jobject result; - result = Bridge_Impl_Android::getInstance()->callNativeModule(pageId, module, method, - argString, optString); - - if (result == nullptr) - return ret; - - JNIEnv *env = getJNIEnv(); - jfieldID jTypeId = env->GetFieldID(jWXJSObject, "type", "I"); - jint jTypeInt = env->GetIntField(result, jTypeId); - jfieldID jDataId = env->GetFieldID(jWXJSObject, "data", "Ljava/lang/Object;"); - jobject jDataObj = env->GetObjectField(result, jDataId); - if (jTypeInt == 1) { - if (jDoubleValueMethodId == NULL) { - jclass jDoubleClazz = env->FindClass("java/lang/Double"); - jDoubleValueMethodId = env->GetMethodID(jDoubleClazz, "doubleValue", "()D"); - env->DeleteLocalRef(jDoubleClazz); - } - jdouble jDoubleObj = env->CallDoubleMethod(jDataObj, jDoubleValueMethodId); - ret = std::move(createDoubleResult(jDoubleObj)); - - } else if (jTypeInt == 2) { - jstring jDataStr = (jstring) jDataObj; - ret = std::move(createStringResult(env, jDataStr)); - } else if (jTypeInt == 3) { - jstring jDataStr = (jstring) jDataObj; - ret = std::move(createJSONStringResult(env, jDataStr)); - } - env->DeleteLocalRef(jDataObj); - } + std::unique_ptr<IPCResult> ret = _callNativeModule(pageId,module,method,argString,optString); if (pageId != nullptr) { delete[]pageId; @@ -359,15 +300,7 @@ std::unique_ptr<IPCResult> handleCallNativeComponent(IPCArguments *arguments) { char* argString = getArumentAsCStr(arguments, 3); char* optString = getArumentAsCStr(arguments, 4); - if (pageId != nullptr && ref != nullptr && method != nullptr) { - -#if JSAPI_LOG - LOGD("[ExtendJSApi] handleCallNativeComponent >>>> pageId: %s, ref: %s, method: %s, arg: %s, opt: %s", - pageId, ref, method, argString, optString); -#endif - - Bridge_Impl_Android::getInstance()->callNativeComponent(pageId, ref, method, argString, optString); - } + _callNativeComponent(pageId, ref, method, argString, optString); if (pageId != nullptr) { delete[]pageId; @@ -400,11 +333,7 @@ std::unique_ptr<IPCResult> functionCallCreateBody(IPCArguments *arguments) { if (pageId == nullptr || domStr == nullptr) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallCreateBody >>>> pageId: %s, domStr: %s", pageId, domStr); -#endif - - RenderManager::GetInstance()->CreatePage(pageId, domStr) ? 0 : -1; + _callCreateBody(pageId,domStr); delete[]pageId; delete[]domStr; @@ -417,37 +346,8 @@ std::unique_ptr<IPCResult> handleCallAddElement(IPCArguments *arguments) { char *parentRef = getArumentAsCStr(arguments, 1); char *domStr = getArumentAsCStr(arguments, 2); char *index_cstr = getArumentAsCStr(arguments, 3); - int index = atoi(index_cstr); - - if (pageId == nullptr || parentRef == nullptr || domStr == nullptr || index_cstr == nullptr || - index < -1) - return createInt32Result(0); - -#if JSAPI_LOG - std::string log = ""; - log.append("pageId: ").append(pageId).append(", parentRef: ").append(parentRef).append(", domStr: ").append(domStr); - int log_index = 0; - int maxLength = 800; - std::string sub; - while (log_index < log.length()) { - if (log.length() <= log_index + maxLength) { - sub = log.substr(log_index); - } else { - sub = log.substr(log_index, maxLength); - } - - - if (log_index == 0) - LOGD("[ExtendJSApi] functionCallAddElement >>>> %s", sub.c_str()); - else - LOGD(" [ExtendJSApi] functionCallAddElement >>>> %s", sub.c_str()); - - log_index += maxLength; - } -#endif - - RenderManager::GetInstance()->AddRenderObject(pageId, parentRef, index, domStr); + _callAddElement(pageId,parentRef,domStr,index_cstr); delete[]pageId; delete[]parentRef; @@ -464,12 +364,7 @@ std::unique_ptr<IPCResult> functionCallRemoveElement(IPCArguments *arguments) { if (pageId == nullptr || ref == nullptr) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallRemoveElement >>>> pageId: %s, ref: %s", pageId, - ref); -#endif - - RenderManager::GetInstance()->RemoveRenderObject(pageId, ref); + _callRemoveElement(pageId,ref); delete[]pageId; delete[]ref; @@ -488,12 +383,7 @@ std::unique_ptr<IPCResult> functionCallMoveElement(IPCArguments *arguments) { index < -1) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallRemoveElement >>>> pageId: %s, ref: %s, parentRef: %s, index: %d", - pageId, ref, parentRef, index); -#endif - - RenderManager::GetInstance()->MoveRenderObject(pageId, ref, parentRef, index); + _callMoveElement(pageId, ref, parentRef, index); delete[]pageId; delete[]ref; @@ -511,12 +401,7 @@ std::unique_ptr<IPCResult> functionCallAddEvent(IPCArguments *arguments) { if (pageId == nullptr || ref == nullptr || event == nullptr) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallAddEvent >>>> pageId: %s, ref: %s, event: %s", pageId, - ref, event); -#endif - - RenderManager::GetInstance()->AddEvent(pageId, ref, event); + _callAddEvent(pageId,ref,event); delete[]pageId; delete[]ref; @@ -533,12 +418,7 @@ std::unique_ptr<IPCResult> functionCallRemoveEvent(IPCArguments *arguments) { if (pageId == nullptr || ref == nullptr || event == nullptr) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallRemoveEvent >>>> pageId: %s, ref: %s, event: %s", pageId, - ref, event); -#endif - - RenderManager::GetInstance()->RemoveEvent(pageId, ref, event); + _callRemoveEvent(pageId,ref,event); delete[]pageId; delete[]ref; @@ -555,12 +435,7 @@ std::unique_ptr<IPCResult> functionCallUpdateStyle(IPCArguments *arguments) { if (pageId == nullptr || ref == nullptr || data == nullptr) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallUpdateStyle >>>> pageId: %s, ref: %s, data: %s", pageId, - ref, data); -#endif - - RenderManager::GetInstance()->UpdateStyle(pageId, ref, data); + _callUpdateStyle(pageId,ref,data); delete[] pageId; delete[] ref; @@ -577,12 +452,7 @@ std::unique_ptr<IPCResult> functionCallUpdateAttrs(IPCArguments *arguments) { if (pageId == nullptr || ref == nullptr || data == nullptr) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallUpdateAttrs >>>> pageId: %s, ref: %s, data: %s", pageId, - ref, data); -#endif - - RenderManager::GetInstance()->UpdateAttr(pageId, ref, data); + _callUpdateAttrs(pageId, ref,data); delete[] pageId; delete[] ref; @@ -597,11 +467,7 @@ std::unique_ptr<IPCResult> functionCallCreateFinish(IPCArguments *arguments) { if (pageId == nullptr) return createInt32Result(0); -#if JSAPI_LOG - LOGD("[ExtendJSApi] functionCallCreateFinish >>>> pageId: %s", pageId); -#endif - - RenderManager::GetInstance()->CreateFinish(pageId); + _callCreateFinish(pageId); delete[]pageId; return createInt32Result(0); @@ -617,7 +483,7 @@ std::unique_ptr<IPCResult> functionCallUpdateFinish(IPCArguments *arguments) { if (pageId == nullptr || task == nullptr) return createInt32Result(flag); - flag = Bridge_Impl_Android::getInstance()->callUpdateFinish(pageId, task, callback); + flag = _callUpdateFinish(pageId,task,callback); if (pageId != nullptr) { delete[]pageId; @@ -644,7 +510,7 @@ std::unique_ptr<IPCResult> functionCallRefreshFinish(IPCArguments *arguments) { if (pageId == nullptr) return createInt32Result(flag); - flag = Bridge_Impl_Android::getInstance()->callRefreshFinish(pageId, task, callback); + flag = _callRefreshFinish(pageId, task, callback); if (pageId != nullptr) { delete[]pageId;