From bfb07a03777af424e99bca1dac4c903aaf44e99d Mon Sep 17 00:00:00 2001 From: John Reck Date: Mon, 24 Mar 2014 21:00:18 -0700 Subject: [PATCH] Move where updateProperties is called Change-Id: I27da448996019094c44487ce28c5689d098d6535 --- core/java/android/view/GLRenderer.java | 3 +++ core/jni/android_view_GLRenderer.cpp | 8 ++++++++ libs/hwui/DeferredLayerUpdater.cpp | 1 + libs/hwui/Layer.cpp | 1 - libs/hwui/OpenGLRenderer.cpp | 1 - libs/hwui/RenderNode.h | 2 +- libs/hwui/renderthread/CanvasContext.cpp | 2 ++ 7 files changed, 15 insertions(+), 3 deletions(-) diff --git a/core/java/android/view/GLRenderer.java b/core/java/android/view/GLRenderer.java index 4d42c5df68a89..90824abebce9a 100644 --- a/core/java/android/view/GLRenderer.java +++ b/core/java/android/view/GLRenderer.java @@ -1287,6 +1287,7 @@ public class GLRenderer extends HardwareRenderer { } Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawDisplayList"); + nUpdateRenderNodeProperties(displayList.getNativeDisplayList()); try { status |= canvas.drawDisplayList(displayList, mRedrawClip, RenderNode.FLAG_CLIP_CHILDREN); @@ -1466,6 +1467,8 @@ public class GLRenderer extends HardwareRenderer { static native void nDestroyLayer(long layerPtr); + private static native void nUpdateRenderNodeProperties(long displayListPtr); + class DrawPerformanceDataProvider extends GraphDataProvider { private final int mGraphType; diff --git a/core/jni/android_view_GLRenderer.cpp b/core/jni/android_view_GLRenderer.cpp index 00d92fc73d84e..e45c1b99156da 100644 --- a/core/jni/android_view_GLRenderer.cpp +++ b/core/jni/android_view_GLRenderer.cpp @@ -148,6 +148,13 @@ static void android_view_GLRenderer_setDisplayListData(JNIEnv* env, jobject claz displayList->setData(newData); } +static void android_view_GLRenderer_updateRenderNodeProperties(JNIEnv* env, jobject clazz, + jlong renderNodePtr) { + using namespace android::uirenderer; + RenderNode* renderNode = reinterpret_cast(renderNodePtr); + renderNode->updateProperties(); +} + #endif // USE_OPENGL_RENDERER // ---------------------------------------------------------------------------- @@ -179,6 +186,7 @@ static JNINativeMethod gMethods[] = { { "getSystemTime", "()J", (void*) android_view_GLRenderer_getSystemTime }, { "nDestroyLayer", "(J)V", (void*) android_view_GLRenderer_destroyLayer }, { "nSetDisplayListData", "(JJ)V", (void*) android_view_GLRenderer_setDisplayListData }, + { "nUpdateRenderNodeProperties", "(J)V", (void*) android_view_GLRenderer_updateRenderNodeProperties }, #endif { "setupShadersDiskCache", "(Ljava/lang/String;)V", diff --git a/libs/hwui/DeferredLayerUpdater.cpp b/libs/hwui/DeferredLayerUpdater.cpp index 7a83967607d80..7380bbf7115ea 100644 --- a/libs/hwui/DeferredLayerUpdater.cpp +++ b/libs/hwui/DeferredLayerUpdater.cpp @@ -75,6 +75,7 @@ bool DeferredLayerUpdater::apply() { success = LayerRenderer::resizeLayer(mLayer, mWidth, mHeight); } mLayer->setBlend(mBlend); + mDisplayList->updateProperties(); mLayer->updateDeferred(mRenderer, mDisplayList, mDirtyRect.left, mDirtyRect.top, mDirtyRect.right, mDirtyRect.bottom); mDirtyRect.setEmpty(); diff --git a/libs/hwui/Layer.cpp b/libs/hwui/Layer.cpp index 3f6c7df2294ff..bd9bfe95c0573 100644 --- a/libs/hwui/Layer.cpp +++ b/libs/hwui/Layer.cpp @@ -200,7 +200,6 @@ void Layer::defer() { renderer->setupFrameState(dirtyRect.left, dirtyRect.top, dirtyRect.right, dirtyRect.bottom, !isBlend()); - displayList->updateProperties(); displayList->computeOrdering(); displayList->defer(deferredState, 0); diff --git a/libs/hwui/OpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp index 5ef8abbc73e45..cdd789d92faea 100644 --- a/libs/hwui/OpenGLRenderer.cpp +++ b/libs/hwui/OpenGLRenderer.cpp @@ -1919,7 +1919,6 @@ status_t OpenGLRenderer::drawDisplayList(RenderNode* displayList, Rect& dirty, // will be performed by the display list itself if (displayList && displayList->isRenderable()) { // compute 3d ordering - displayList->updateProperties(); displayList->computeOrdering(); if (CC_UNLIKELY(mCaches.drawDeferDisabled)) { status = startFrame(); diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h index 9a7f9b458bba1..756c944425592 100644 --- a/libs/hwui/RenderNode.h +++ b/libs/hwui/RenderNode.h @@ -137,7 +137,7 @@ public: return properties().getHeight(); } - void updateProperties(); + ANDROID_API void updateProperties(); private: typedef key_value_pair_t ZDrawDisplayListOpPair; diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index 8ebffc28a4e27..b3b417370f8d1 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -392,6 +392,8 @@ void CanvasContext::drawDisplayList(RenderNode* displayList, Rect* dirty) { LOG_ALWAYS_FATAL_IF(!mCanvas || mEglSurface == EGL_NO_SURFACE, "drawDisplayList called on a context with no canvas or surface!"); + displayList->updateProperties(); + EGLint width, height; mGlobalContext->beginFrame(mEglSurface, &width, &height); if (width != mCanvas->getViewportWidth() || height != mCanvas->getViewportHeight()) {