Merge "Fix wrong-thread issue" into lmp-mr1-dev
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ public:
|
|||||||
|
|
||||||
ANDROID_API bool apply();
|
ANDROID_API bool apply();
|
||||||
|
|
||||||
ANDROID_API Layer* backingLayer() {
|
Layer* backingLayer() {
|
||||||
return mLayer;
|
return mLayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user