am f7d3ce6a: am 4b19b7aa: Merge "Fix wrong-thread issue" into lmp-mr1-dev

* commit 'f7d3ce6a3ca88b23a227e29a5fa3285e24f7b2b1':
  Fix wrong-thread issue
This commit is contained in:
John Reck
2014-11-07 18:48:43 +00:00
committed by Android Git Automerger
8 changed files with 13 additions and 18 deletions

View File

@@ -242,7 +242,7 @@ class GLES20Canvas extends HardwareCanvas {
void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) { void drawHardwareLayer(HardwareLayer layer, float x, float y, Paint paint) {
layer.setLayerPaint(paint); layer.setLayerPaint(paint);
nDrawLayer(mRenderer, layer.getLayer(), x, y); nDrawLayer(mRenderer, layer.getLayerHandle(), x, y);
} }
private static native void nDrawLayer(long renderer, long layer, float x, float y); private static native void nDrawLayer(long renderer, long layer, float x, float y);

View File

@@ -126,8 +126,8 @@ final class HardwareLayer {
mRenderer.detachSurfaceTexture(mFinalizer.get()); mRenderer.detachSurfaceTexture(mFinalizer.get());
} }
public long getLayer() { public long getLayerHandle() {
return nGetLayer(mFinalizer.get()); return mFinalizer.get();
} }
public void setSurfaceTexture(SurfaceTexture surface) { public void setSurfaceTexture(SurfaceTexture surface) {
@@ -153,6 +153,5 @@ final class HardwareLayer {
private static native void nUpdateRenderLayer(long layerUpdater, long displayList, private static native void nUpdateRenderLayer(long layerUpdater, long displayList,
int left, int top, int right, int bottom); int left, int top, int right, int bottom);
private static native long nGetLayer(long layerUpdater);
private static native int nGetTexName(long layerUpdater); private static native int nGetTexName(long layerUpdater);
} }

View File

@@ -828,7 +828,7 @@ static jint android_view_GLES20Canvas_drawRenderNode(JNIEnv* env,
static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz, static void android_view_GLES20Canvas_drawLayer(JNIEnv* env, jobject clazz,
jlong rendererPtr, jlong layerPtr, jfloat x, jfloat y) { jlong rendererPtr, jlong layerPtr, jfloat x, jfloat y) {
DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr); DisplayListRenderer* renderer = reinterpret_cast<DisplayListRenderer*>(rendererPtr);
Layer* layer = reinterpret_cast<Layer*>(layerPtr); DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerPtr);
renderer->drawLayer(layer, x, y); renderer->drawLayer(layer, x, y);
} }

View File

@@ -81,12 +81,6 @@ static void android_view_HardwareLayer_updateSurfaceTexture(JNIEnv* env, jobject
layer->updateTexImage(); layer->updateTexImage();
} }
static jlong android_view_HardwareLayer_getLayer(JNIEnv* env, jobject clazz,
jlong layerUpdaterPtr) {
DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
return reinterpret_cast<jlong>( layer->backingLayer() );
}
static jint android_view_HardwareLayer_getTexName(JNIEnv* env, jobject clazz, static jint android_view_HardwareLayer_getTexName(JNIEnv* env, jobject clazz,
jlong layerUpdaterPtr) { jlong layerUpdaterPtr) {
DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr); DeferredLayerUpdater* layer = reinterpret_cast<DeferredLayerUpdater*>(layerUpdaterPtr);
@@ -111,7 +105,6 @@ static JNINativeMethod gMethods[] = {
(void*) android_view_HardwareLayer_setSurfaceTexture }, (void*) android_view_HardwareLayer_setSurfaceTexture },
{ "nUpdateSurfaceTexture", "(J)V", (void*) android_view_HardwareLayer_updateSurfaceTexture }, { "nUpdateSurfaceTexture", "(J)V", (void*) android_view_HardwareLayer_updateSurfaceTexture },
{ "nGetLayer", "(J)J", (void*) android_view_HardwareLayer_getLayer },
{ "nGetTexName", "(J)I", (void*) android_view_HardwareLayer_getTexName }, { "nGetTexName", "(J)I", (void*) android_view_HardwareLayer_getTexName },
#endif #endif
}; };

View File

@@ -76,7 +76,7 @@ public:
ANDROID_API bool apply(); ANDROID_API bool apply();
ANDROID_API Layer* backingLayer() { Layer* backingLayer() {
return mLayer; return mLayer;
} }

View File

@@ -23,6 +23,7 @@
#include "ResourceCache.h" #include "ResourceCache.h"
#include "DeferredDisplayList.h" #include "DeferredDisplayList.h"
#include "DeferredLayerUpdater.h"
#include "DisplayListLogBuffer.h" #include "DisplayListLogBuffer.h"
#include "DisplayListOp.h" #include "DisplayListOp.h"
#include "DisplayListRenderer.h" #include "DisplayListRenderer.h"
@@ -188,9 +189,11 @@ status_t DisplayListRenderer::drawRenderNode(RenderNode* renderNode, Rect& dirty
return DrawGlInfo::kStatusDone; return DrawGlInfo::kStatusDone;
} }
status_t DisplayListRenderer::drawLayer(Layer* layer, float x, float y) { status_t DisplayListRenderer::drawLayer(DeferredLayerUpdater* layerHandle, float x, float y) {
mDisplayListData->ref(layer); // We ref the DeferredLayerUpdater due to its thread-safe ref-counting
addDrawOp(new (alloc()) DrawLayerOp(layer, x, y)); // semantics.
mDisplayListData->ref(layerHandle);
addDrawOp(new (alloc()) DrawLayerOp(layerHandle->backingLayer(), x, y));
return DrawGlInfo::kStatusDone; return DrawGlInfo::kStatusDone;
} }

View File

@@ -45,6 +45,7 @@ namespace uirenderer {
/////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////
class DeferredDisplayList; class DeferredDisplayList;
class DeferredLayerUpdater;
class DisplayListRenderer; class DisplayListRenderer;
class DisplayListOp; class DisplayListOp;
class DrawOp; class DrawOp;
@@ -151,7 +152,7 @@ public:
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Canvas draw operations - special // Canvas draw operations - special
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
virtual status_t drawLayer(Layer* layer, float x, float y); virtual status_t drawLayer(DeferredLayerUpdater* layerHandle, float x, float y);
virtual status_t drawRenderNode(RenderNode* renderNode, Rect& dirty, int32_t replayFlags); virtual status_t drawRenderNode(RenderNode* renderNode, Rect& dirty, int32_t replayFlags);
// TODO: rename for consistency // TODO: rename for consistency

View File

@@ -220,7 +220,6 @@ public:
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// Canvas draw operations - special // Canvas draw operations - special
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
virtual status_t drawLayer(Layer* layer, float x, float y) = 0;
virtual status_t drawRenderNode(RenderNode* renderNode, Rect& dirty, virtual status_t drawRenderNode(RenderNode* renderNode, Rect& dirty,
int32_t replayFlags) = 0; int32_t replayFlags) = 0;