You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by GitBox <gi...@apache.org> on 2018/12/28 08:35:16 UTC

[GitHub] lucky-chen closed pull request #1248: [WEEX-441][core] mv core logic from core_android_impl to bridge.cpp

lucky-chen closed pull request #1248: [WEEX-441][core] mv core logic from core_android_impl to bridge.cpp
URL: https://github.com/apache/incubator-weex/pull/1248
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/weex_core/Source/CMakeLists.txt b/weex_core/Source/CMakeLists.txt
index 6cb9c182a5..a63d430599 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)
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 3febd5b6ef..e7310262a7 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
+    );
 }
 
 
diff --git a/weex_core/Source/core/bridge/bridge.cpp b/weex_core/Source/core/bridge/bridge.cpp
new file mode 100644
index 0000000000..22d913976c
--- /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
diff --git a/weex_core/Source/core/bridge/bridge.h b/weex_core/Source/core/bridge/bridge.h
index 5660e4c465..8da0fdc710 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
diff --git a/weex_core/Source/core/bridge/js_bridge.h b/weex_core/Source/core/bridge/js_bridge.h
index ee9a7717d1..f208164340 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


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services