You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by cx...@apache.org on 2018/06/19 09:41:26 UTC

[39/50] [abbrv] incubator-weex git commit: [WEEX-441][core] mv core logic from core_android_impl to bridge.cpp

[WEEX-441][core] mv core logic from core_android_impl to bridge.cpp

* [core] merge fix


Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/676d0eb4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/676d0eb4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/676d0eb4

Branch: refs/heads/release
Commit: 676d0eb4d29f70dce447d916becf841ddb03198c
Parents: ece3827
Author: zhongcang <qh...@gmail.com>
Authored: Thu Jun 7 16:32:18 2018 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Thu Jun 14 16:26:31 2018 +0800

----------------------------------------------------------------------
 weex_core/Source/CMakeLists.txt                 |   1 +
 .../bridge/impl/weexcore_impl_android.cpp       | 194 ++++++------------
 weex_core/Source/core/bridge/bridge.cpp         | 197 +++++++++++++++++++
 weex_core/Source/core/bridge/bridge.h           |  28 +++
 weex_core/Source/core/bridge/js_bridge.h        |   3 -
 5 files changed, 284 insertions(+), 139 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/weex_core/Source/CMakeLists.txt b/weex_core/Source/CMakeLists.txt
index 6cb9c18..a63d430 100644
--- a/weex_core/Source/CMakeLists.txt
+++ b/weex_core/Source/CMakeLists.txt
@@ -51,6 +51,7 @@ set(COMMON_SRCS
   ./core/manager/weex_core_manager.cpp
   ./core/bridge/js_bridge.cpp
   ./core/parser/dom_wson.cpp
+   ./core/bridge/bridge.cpp
         )
 add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/wson)
 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/wson)

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
----------------------------------------------------------------------
diff --git a/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp b/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
index 3febd5b..e731026 100644
--- a/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
+++ b/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
@@ -26,6 +26,7 @@
 #include <core/render/node/render_object.h>
 #include <core/config/core_environment.h>
 #include <map>
+#include <core/manager/weex_core_manager.h>
 
 using namespace WeexCore;
 
@@ -119,30 +120,28 @@ static void BindMeasurementToRenderObject(JNIEnv* env, jobject jcaller,
 }
 
 static void OnInstanceClose(JNIEnv *env, jobject jcaller, jstring instanceId) {
-  RenderManager::GetInstance()->ClosePage(jString2StrFast(env, instanceId));
+    WeexCoreManager::getInstance()->getPlatformBridge()->onInstanceClose(
+            env->GetStringUTFChars(instanceId, JNI_FALSE)
+    );
 }
 
 static void SetDefaultHeightAndWidthIntoRootDom(JNIEnv *env, jobject jcaller,
                                                 jstring instanceId, jfloat defaultWidth, jfloat defaultHeight,
                                                 jboolean isWidthWrapContent, jboolean isHeightWrapContent) {
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-#if RENDER_LOG
-  LOGD("[JNI] SetDefaultHeightAndWidthIntoRootDom >>>> pageId: %s, defaultWidth: %f, defaultHeight: %f",
-       page->PageId().c_str(), defaultWidth,defaultHeight);
-#endif
-
-  page->SetDefaultHeightAndWidthIntoRootRender(defaultWidth, defaultHeight, isWidthWrapContent, isHeightWrapContent);
+  WeexCoreManager::getInstance()->getPlatformBridge()->setDefaultHeightAndWidthIntoRootDom(
+          env->GetStringUTFChars(instanceId, JNI_FALSE),
+          defaultWidth,
+          defaultHeight,
+          isWidthWrapContent,
+          isHeightWrapContent
+  );
 }
 
 static void SetRenderContainerWrapContent(JNIEnv* env, jobject jcaller, jboolean wrap, jstring instanceId) {
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  page->set_is_render_container_width_wrap_content(wrap);
+    const char *cInstanceId = env->GetStringUTFChars(instanceId, JNI_FALSE);
+    WeexCoreManager::getInstance()->getPlatformBridge()->setRenderContainerWrapContent(
+            cInstanceId,wrap
+    );
 }
 
 static jlongArray GetFirstScreenRenderTime(JNIEnv *env, jobject jcaller, jstring instanceId) {
@@ -211,153 +210,77 @@ static jlongArray GetRenderFinishTime(JNIEnv *env, jobject jcaller, jstring inst
 
 //Notice that this method is invoked from main thread.
 static jboolean NotifyLayout(JNIEnv* env, jobject jcaller, jstring instanceId) {
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page != nullptr) {
-
-    if (!page->need_layout_.load()) {
-      page->need_layout_.store(true);
-    }
-
-    bool ret = !page->has_fore_layout_action_.load() && page->is_dirty();
-    if (ret) {
-      page->has_fore_layout_action_.store(true);
-    }
+    bool ret = WeexCoreManager::getInstance()->getPlatformBridge()->notifyLayout(
+            env->GetStringUTFChars(instanceId, JNI_FALSE)
+    );
     return ret ? JNI_TRUE : JNI_FALSE;
-  }
 }
 
 //Notice that this method is invoked from JS thread.
 static void ForceLayout(JNIEnv *env, jobject jcaller, jstring instanceId) {
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page != nullptr) {
-
-#if RENDER_LOG
-    LOGD("[JNI] ForceLayout >>>> pageId: %s, needForceLayout: %s", jString2StrFast(env, instanceId).c_str(), page->hasForeLayoutAction.load()?"true":"false");
-#endif
-
-    page->LayoutImmediately();
-    page->has_fore_layout_action_.store(false);
-  }
+    WeexCoreManager::getInstance()->getPlatformBridge()->forceLayout(
+            env->GetStringUTFChars(instanceId, JNI_FALSE)
+    );
 }
 
 static void SetStyleWidth(JNIEnv *env, jobject jcaller,
                           jstring instanceId, jstring ref, jfloat value) {
 
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref));
-  if (render == nullptr)
-    return;
 
-  render->setStyleWidthLevel(CSS_STYLE);
-  render->setStyleWidth(value, true);
-  page->set_is_dirty(true);
+    WeexCoreManager::getInstance()->getPlatformBridge()->setStyleWidth(
+            env->GetStringUTFChars(instanceId, JNI_FALSE),
+            env->GetStringUTFChars(ref, JNI_FALSE),
+            value
+    );
 }
 
 static void SetStyleHeight(JNIEnv *env, jobject jcaller,
                            jstring instanceId, jstring ref, jfloat value) {
-
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref));
-  if (render == nullptr)
-    return;
-
-  render->setStyleHeightLevel(CSS_STYLE);
-  render->setStyleHeight(value);
-  page->set_is_dirty(true);
+    WeexCoreManager::getInstance()->getPlatformBridge()->setStyleHeight(
+            env->GetStringUTFChars(instanceId, JNI_FALSE),
+            env->GetStringUTFChars(ref, JNI_FALSE),
+            value
+    );
 }
 
 static void SetMargin(JNIEnv *env, jobject jcaller,
                       jstring instanceId, jstring ref, jint edge, jfloat value) {
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref));
-  if (render == nullptr)
-    return;
-
-  if (edge == 0) {
-    render->setMargin(kMarginTop, value);
-  } else if (edge == 1) {
-    render->setMargin(kMarginBottom, value);
-  } else if (edge == 2) {
-    render->setMargin(kMarginLeft, value);
-  } else if (edge == 3) {
-    render->setMargin(kMarginRight, value);
-  } else if (edge == 4) {
-    render->setMargin(kMarginALL, value);
-  }
-  page->set_is_dirty(true);
+    WeexCoreManager::getInstance()->getPlatformBridge()->setMargin(
+            env->GetStringUTFChars(instanceId, JNI_FALSE),
+            env->GetStringUTFChars(ref, JNI_FALSE),
+            edge,
+            value
+    );
 }
 
 static void SetPadding(JNIEnv *env, jobject jcaller,
                        jstring instanceId, jstring ref, jint edge, jfloat value) {
-
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref));
-  if (render == nullptr)
-    return;
-
-  if (edge == 0) {
-    render->setPadding(kPaddingTop, value);
-  } else if (edge == 1) {
-    render->setPadding(kPaddingBottom, value);
-  } else if (edge == 2) {
-    render->setPadding(kPaddingLeft, value);
-  } else if (edge == 3) {
-    render->setPadding(kPaddingRight, value);
-  } else if (edge == 4) {
-    render->setPadding(kPaddingALL, value);
-  }
-  page->set_is_dirty(true);
+    WeexCoreManager::getInstance()->getPlatformBridge()->setPadding(
+            env->GetStringUTFChars(instanceId, JNI_FALSE),
+            env->GetStringUTFChars(ref, JNI_FALSE),
+            edge,
+            value
+    );
 }
 
 
 static void SetPosition(JNIEnv *env, jobject jcaller,
                         jstring instanceId, jstring ref, jint edge, jfloat value) {
-
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref));
-  if (render == nullptr)
-    return;
-
-  if (edge == 0) {
-    render->setStylePosition(kPositionEdgeTop, value);
-  } else if (edge == 1) {
-    render->setStylePosition(kPositionEdgeBottom, value);
-  } else if (edge == 2) {
-    render->setStylePosition(kPositionEdgeLeft, value);
-  } else if (edge == 3) {
-    render->setStylePosition(kPositionEdgeRight, value);
-  }
-  page->set_is_dirty(true);
+  WeexCoreManager::getInstance()->getPlatformBridge()->setPosition(
+          env->GetStringUTFChars(instanceId, JNI_FALSE),
+          env->GetStringUTFChars(ref, JNI_FALSE),
+          edge,
+          value
+  );
 }
 
 static void MarkDirty(JNIEnv *env, jobject jcaller,
                       jstring instanceId, jstring ref, jboolean dirty) {
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  if (dirty) {
-
-    RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref));
-    if (render == nullptr)
-      return;
-    render->markDirty();
-  }
+    WeexCoreManager::getInstance()->getPlatformBridge()->markDirty(
+            env->GetStringUTFChars(instanceId, JNI_FALSE),
+            env->GetStringUTFChars(ref, JNI_FALSE),
+            dirty
+    );
 }
 
 static void RegisterCoreEnv(JNIEnv *env, jobject jcaller, jstring key, jstring value) {
@@ -367,11 +290,10 @@ static void RegisterCoreEnv(JNIEnv *env, jobject jcaller, jstring key, jstring v
 }
 
 static void SetViewPortWidth(JNIEnv *env, jobject jcaller, jstring instanceId, jfloat value) {
-  RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
-  if (page == nullptr)
-    return;
-
-  page->set_viewport_width(value);
+    const char *cInstanceId = env->GetStringUTFChars(instanceId, JNI_FALSE);
+    WeexCoreManager::getInstance()->getPlatformBridge()->setViewPortWidth(
+            cInstanceId,value
+    );
 }
 
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/core/bridge/bridge.cpp
----------------------------------------------------------------------
diff --git a/weex_core/Source/core/bridge/bridge.cpp b/weex_core/Source/core/bridge/bridge.cpp
new file mode 100644
index 0000000..22d9139
--- /dev/null
+++ b/weex_core/Source/core/bridge/bridge.cpp
@@ -0,0 +1,197 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+#include "bridge.h"
+#include <core/render/manager/render_manager.h>
+#include <core/render/page/render_page.h>
+#include <core/render/node/render_object.h>
+
+namespace WeexCore {
+    void Bridge::setStyleWidth(const char *instanceId, const char *ref, float value) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page == nullptr)
+            return;
+
+        RenderObject *render = page->GetRenderObject(std::string(ref));
+        if (render == nullptr)
+            return;
+
+        render->setStyleWidthLevel(CSS_STYLE);
+        render->setStyleWidth(value, true);
+        page->set_is_dirty(true);
+    }
+
+    void Bridge::setStyleHeight(const char *instanceId, const char *ref, float value) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page == nullptr)
+            return;
+
+        RenderObject *render = page->GetRenderObject(std::string(ref));
+        if (render == nullptr)
+            return;
+
+        render->setStyleHeightLevel(CSS_STYLE);
+        render->setStyleHeight(value);
+        page->set_is_dirty(true);
+    }
+
+
+    void Bridge::setMargin(const char *instanceId, const char *ref, int32_t edge, float value) {
+         RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+         if (page == nullptr)
+           return;
+
+         RenderObject *render = page->GetRenderObject(std::string(ref));
+         if (render == nullptr)
+           return;
+
+         if (edge == 0) {
+           render->setMargin(kMarginTop, value);
+         } else if (edge == 1) {
+           render->setMargin(kMarginBottom, value);
+         } else if (edge == 2) {
+           render->setMargin(kMarginLeft, value);
+         } else if (edge == 3) {
+           render->setMargin(kMarginRight, value);
+         } else if (edge == 4) {
+           render->setMargin(kMarginALL, value);
+         }
+         page->set_is_dirty(true);
+    }
+
+    void Bridge::setPadding(const char *instanceId, const char *ref, int32_t edge, float value) {
+         RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+         if (page == nullptr)
+           return;
+
+         RenderObject *render = page->GetRenderObject(std::string(ref));
+         if (render == nullptr)
+           return;
+
+         if (edge == 0) {
+           render->setPadding(kPaddingTop, value);
+         } else if (edge == 1) {
+           render->setPadding(kPaddingBottom, value);
+         } else if (edge == 2) {
+           render->setPadding(kPaddingLeft, value);
+         } else if (edge == 3) {
+           render->setPadding(kPaddingRight, value);
+         } else if (edge == 4) {
+           render->setPadding(kPaddingALL, value);
+         }
+         page->set_is_dirty(true);
+    }
+
+    void Bridge::setPosition(const char *instanceId, const char *ref, int32_t edge, float value) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page == nullptr)
+            return;
+
+        RenderObject *render = page->GetRenderObject(std::string(ref));
+        if (render == nullptr)
+            return;
+
+        if (edge == 0) {
+            render->setStylePosition(kPositionEdgeTop, value);
+        } else if (edge == 1) {
+            render->setStylePosition(kPositionEdgeBottom, value);
+        } else if (edge == 2) {
+            render->setStylePosition(kPositionEdgeLeft, value);
+        } else if (edge == 3) {
+            render->setStylePosition(kPositionEdgeRight, value);
+        }
+        page->set_is_dirty(true);
+    }
+
+    void Bridge::markDirty(const char *instanceId, const char *ref, bool dirty) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page == nullptr)
+            return;
+
+        if (dirty) {
+            RenderObject *render = page->GetRenderObject(std::string(ref));
+            if (render == nullptr)
+                return;
+            render->markDirty();
+        }
+    }
+
+    void Bridge::setViewPortWidth(const char *instanceId, float value) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+         if (page == nullptr)
+           return;
+         page->set_viewport_width(value);
+    }
+
+    void Bridge::setDefaultHeightAndWidthIntoRootDom(const char *instanceId, const float defaultWidth,
+                                                     const float defaultHeight,
+                                                     const bool isWidthWrapContent, const bool isHeightWrapContent) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page == nullptr) {
+            return;
+        }
+
+#if RENDER_LOG
+        LOGD("[JNI] SetDefaultHeightAndWidthIntoRootDom >>>> pageId: %s, defaultWidth: %f, defaultHeight: %f",
+       page->PageId().c_str(), defaultWidth,defaultHeight);
+#endif
+        page->SetDefaultHeightAndWidthIntoRootRender(defaultWidth, defaultHeight, isWidthWrapContent,
+                                                     isHeightWrapContent);
+    }
+
+    void Bridge::setRenderContainerWrapContent(const char *instanceId, bool wrap) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page == nullptr)
+            return;
+
+        page->set_is_render_container_width_wrap_content(wrap);
+
+    }
+
+    void Bridge::forceLayout(const char *instanceId) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page != nullptr) {
+
+#if RENDER_LOG
+            LOGD("[JNI] ForceLayout >>>> pageId: %s, needForceLayout: %s", jString2StrFast(env, instanceId).c_str(), page->hasForeLayoutAction.load()?"true":"false");
+#endif
+            page->LayoutImmediately();
+            page->has_fore_layout_action_.store(false);
+        }
+    }
+
+    bool Bridge::notifyLayout(const char *instanceId) {
+        RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId));
+        if (page != nullptr) {
+
+            if (!page->need_layout_.load()) {
+                page->need_layout_.store(true);
+            }
+
+            bool ret = !page->has_fore_layout_action_.load() && page->is_dirty();
+            if (ret) {
+                page->has_fore_layout_action_.store(true);
+            }
+        }
+    }
+
+    void Bridge::onInstanceClose(const char *instanceId) {
+        RenderManager::GetInstance()->ClosePage(std::string(instanceId));
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/core/bridge/bridge.h
----------------------------------------------------------------------
diff --git a/weex_core/Source/core/bridge/bridge.h b/weex_core/Source/core/bridge/bridge.h
index 5660e4c..8da0fdc 100644
--- a/weex_core/Source/core/bridge/bridge.h
+++ b/weex_core/Source/core/bridge/bridge.h
@@ -35,6 +35,7 @@ namespace WeexCore {
 
   class Bridge {
   public:
+    /**  platform  impl **/
     virtual void setJSVersion(const char* version) = 0;
 
     virtual void reportException(const char* pageId, const char *func, const char *exception_string) = 0;
@@ -100,6 +101,33 @@ namespace WeexCore {
     
     virtual int callHasTransitionPros(const char* pageId, const char* ref,
                                         std::vector<std::pair<std::string, std::string>> *style)=0;
+
+    /**  core api **/
+    void setStyleWidth(const char *instanceId, const char *ref, float value);
+    void setStyleHeight(const char *instanceId, const char *ref, float value);
+
+    void setMargin(const char *instanceId,const char *ref, int32_t edge, float value);
+
+    void setPadding(const char *instanceId, const char *ref, int32_t edge, float value);
+
+    void setPosition(const char *instanceId, const char *ref, int32_t edge, float value);
+
+    void markDirty(const char *instanceId,const  char *ref, bool dirty);
+
+    void setViewPortWidth(const char *instanceId, float value);
+
+    void setDefaultHeightAndWidthIntoRootDom(const char *instanceId, const float defaultWidth, const float defaultHeight,
+                                             const bool isWidthWrapContent, const bool isHeightWrapContent);
+    void setRenderContainerWrapContent(const char* instanceId,bool wrap);
+
+    /**Notice that this method is invoked from JS thread.**/
+    void forceLayout(const char *instanceId);
+
+    /**Notice that this method is invoked from JS thread.**/
+    bool notifyLayout(const char *instanceId);
+
+
+    void onInstanceClose(const char *instanceId) ;
   };
 } //end WeexCore
 #endif //Bridge_h

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/core/bridge/js_bridge.h
----------------------------------------------------------------------
diff --git a/weex_core/Source/core/bridge/js_bridge.h b/weex_core/Source/core/bridge/js_bridge.h
index ee9a771..f208164 100644
--- a/weex_core/Source/core/bridge/js_bridge.h
+++ b/weex_core/Source/core/bridge/js_bridge.h
@@ -16,9 +16,6 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-//
-// Created by 陈佩翰 on 2018/6/1.
-//
 
 #ifndef WEEXCORE_JS_BRIDGE_H
 #define WEEXCORE_JS_BRIDGE_H