From 781953d62dc17d761e39540f0480e5ca7451cdbe Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Fri, 25 Jun 2010 18:02:21 -0700 Subject: Revert "Revert "fix [2793164] Spam 2x/second with TOT master in SurfaceFlinger"" This reverts commit 330dd304a471d260a73e342a240921c03c825f99. --- libs/surfaceflinger/Layer.cpp | 41 ++++++++++++++++++++++------------------- 1 file changed, 22 insertions(+), 19 deletions(-) (limited to 'libs/surfaceflinger/Layer.cpp') diff --git a/libs/surfaceflinger/Layer.cpp b/libs/surfaceflinger/Layer.cpp index e606f713e07d..758da4e87653 100644 --- a/libs/surfaceflinger/Layer.cpp +++ b/libs/surfaceflinger/Layer.cpp @@ -31,6 +31,7 @@ #include #include "clz.h" +#include "GLExtensions.h" #include "Layer.h" #include "SurfaceFlinger.h" #include "DisplayHardware/DisplayHardware.h" @@ -50,10 +51,11 @@ template inline T min(T a, T b) { Layer::Layer(SurfaceFlinger* flinger, DisplayID display, const sp& client) : LayerBaseClient(flinger, display, client), + mGLExtensions(GLExtensions::getInstance()), mNeedsBlending(true), mNeedsDithering(false), mSecure(false), - mTextureManager(mFlags), + mTextureManager(), mBufferManager(mTextureManager), mWidth(0), mHeight(0), mFixedSize(false) { @@ -185,17 +187,13 @@ void Layer::reloadTexture(const Region& dirty) return; } -#ifdef EGL_ANDROID_image_native_buffer - if (mFlags & DisplayHardware::DIRECT_TEXTURE) { + if (mGLExtensions.haveDirectTexture()) { EGLDisplay dpy(mFlinger->graphicPlane(0).getEGLDisplay()); if (mBufferManager.initEglImage(dpy, buffer) != NO_ERROR) { // not sure what we can do here... - mFlags &= ~DisplayHardware::DIRECT_TEXTURE; goto slowpath; } - } else -#endif - { + } else { slowpath: GGLSurface t; status_t res = buffer->lock(&t, GRALLOC_USAGE_SW_READ_OFTEN); @@ -786,19 +784,24 @@ status_t Layer::BufferManager::initEglImage(EGLDisplay dpy, status_t err = NO_INIT; ssize_t index = mActiveBuffer; if (index >= 0) { - Image& texture(mBufferData[index].texture); - err = mTextureManager.initEglImage(&texture, dpy, buffer); - // if EGLImage fails, we switch to regular texture mode, and we - // free all resources associated with using EGLImages. - if (err == NO_ERROR) { - mFailover = false; - destroyTexture(&mFailoverTexture, dpy); - } else { - mFailover = true; - const size_t num = mNumBuffers; - for (size_t i=0 ; i