Merge "Fix layer recycling for GLRenderer"

This commit is contained in:
John Reck
2014-02-20 02:37:40 +00:00
committed by Android (Google) Code Review
2 changed files with 15 additions and 0 deletions

View File

@@ -504,6 +504,10 @@ public class GLRenderer extends HardwareRenderer {
if (mGlCanvas != null) {
mGlCanvas.cancelLayerUpdate(layer);
}
if (Looper.myLooper() == Looper.getMainLooper() && validate()) {
long backingLayer = layer.detachBackingLayer();
nDestroyLayer(backingLayer);
}
mAttachedLayers.remove(layer);
}
@@ -1449,6 +1453,8 @@ public class GLRenderer extends HardwareRenderer {
*/
static native boolean isBackBufferPreserved();
static native void nDestroyLayer(long layerPtr);
class DrawPerformanceDataProvider extends GraphDataProvider {
private final int mGraphType;

View File

@@ -28,6 +28,7 @@
#include <Caches.h>
#include <Extensions.h>
#include <LayerRenderer.h>
#ifdef USE_OPENGL_RENDERER
EGLAPI void EGLAPIENTRY eglBeginFrame(EGLDisplay dpy, EGLSurface surface);
@@ -131,6 +132,13 @@ static jlong android_view_GLRenderer_getSystemTime(JNIEnv* env, jobject clazz) {
return systemTime(SYSTEM_TIME_MONOTONIC);
}
static void android_view_GLRenderer_destroyLayer(JNIEnv* env, jobject clazz,
jlong layerPtr) {
using namespace android::uirenderer;
Layer* layer = reinterpret_cast<Layer*>(layerPtr);
LayerRenderer::destroyLayer(layer);
}
#endif // USE_OPENGL_RENDERER
// ----------------------------------------------------------------------------
@@ -160,6 +168,7 @@ static JNINativeMethod gMethods[] = {
{ "beginFrame", "([I)V", (void*) android_view_GLRenderer_beginFrame },
{ "getSystemTime", "()J", (void*) android_view_GLRenderer_getSystemTime },
{ "nDestroyLayer", "(J)V", (void*) android_view_GLRenderer_destroyLayer },
#endif
{ "setupShadersDiskCache", "(Ljava/lang/String;)V",