Loading libs/hwui/Caches.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include "Properties.h" #include "renderstate/RenderState.h" #include "ShadowTessellator.h" #include "utils/GLUtils.h" #include <utils/Log.h> #include <utils/String8.h> Loading Loading @@ -276,6 +277,9 @@ void Caches::flush(FlushMode mode) { clearGarbage(); glFinish(); // Errors during cleanup should be considered non-fatal, dump them and // and move on. TODO: All errors or just errors like bad surface? GLUtils::dumpGLErrors(); } /////////////////////////////////////////////////////////////////////////////// Loading libs/hwui/DeferredLayerUpdater.cpp +0 −1 Original line number Diff line number Diff line Loading @@ -119,7 +119,6 @@ void DeferredLayerUpdater::doUpdateTexImage() { void DeferredLayerUpdater::detachSurfaceTexture() { if (mSurfaceTexture.get()) { mRenderThread.eglManager().requireGlContext(); status_t err = mSurfaceTexture->detachFromContext(); if (err != 0) { // TODO: Elevate to fatal exception Loading libs/hwui/renderstate/RenderState.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -169,7 +169,8 @@ void RenderState::debugOverdraw(bool enable, bool clear) { void RenderState::requireGLContext() { assertOnGLThread(); mRenderThread.eglManager().requireGlContext(); LOG_ALWAYS_FATAL_IF(!mRenderThread.eglManager().hasEglContext(), "No GL context!"); } void RenderState::assertOnGLThread() { Loading libs/hwui/renderthread/CanvasContext.cpp +2 −13 Original line number Diff line number Diff line Loading @@ -262,8 +262,6 @@ void CanvasContext::draw() { if (drew) { swapBuffers(dirty, width, height); } else { mEglManager.cancelFrame(); } // TODO: Use a fence for real completion? Loading Loading @@ -297,7 +295,6 @@ void CanvasContext::invokeFunctor(RenderThread& thread, Functor* functor) { ATRACE_CALL(); DrawGlInfo::Mode mode = DrawGlInfo::kModeProcessNoContext; if (thread.eglManager().hasEglContext()) { thread.eglManager().requireGlContext(); mode = DrawGlInfo::kModeProcess; } Loading @@ -318,7 +315,6 @@ static void destroyPrefetechedNode(RenderNode* node) { void CanvasContext::freePrefetechedLayers() { if (mPrefetechedLayers.size()) { requireGlContext(); std::for_each(mPrefetechedLayers.begin(), mPrefetechedLayers.end(), destroyPrefetechedNode); mPrefetechedLayers.clear(); } Loading @@ -329,7 +325,6 @@ void CanvasContext::buildLayer(RenderNode* node) { if (!mEglManager.hasEglContext() || !mCanvas) { return; } requireGlContext(); // buildLayer() will leave the tree in an unknown state, so we must stop drawing stopDrawing(); Loading @@ -352,7 +347,6 @@ void CanvasContext::buildLayer(RenderNode* node) { } bool CanvasContext::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) { requireGlContext(); layer->apply(); return LayerRenderer::copyLayer(mRenderThread.renderState(), layer->backingLayer(), bitmap); } Loading @@ -360,7 +354,6 @@ bool CanvasContext::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) void CanvasContext::destroyHardwareResources() { stopDrawing(); if (mEglManager.hasEglContext()) { requireGlContext(); freePrefetechedLayers(); mRootRenderNode->destroyHardwareResources(); Caches::getInstance().flush(Caches::kFlushMode_Layers); Loading @@ -372,7 +365,6 @@ void CanvasContext::trimMemory(RenderThread& thread, int level) { if (!thread.eglManager().hasEglContext()) return; ATRACE_CALL(); thread.eglManager().requireGlContext(); if (level >= TRIM_MEMORY_COMPLETE) { Caches::getInstance().flush(Caches::kFlushMode_Full); thread.eglManager().destroy(); Loading @@ -382,7 +374,8 @@ void CanvasContext::trimMemory(RenderThread& thread, int level) { } void CanvasContext::runWithGlContext(RenderTask* task) { requireGlContext(); LOG_ALWAYS_FATAL_IF(!mEglManager.hasEglContext(), "GL context not initialized!"); task->run(); } Loading @@ -391,10 +384,6 @@ Layer* CanvasContext::createTextureLayer() { return LayerRenderer::createTextureLayer(mRenderThread.renderState()); } void CanvasContext::requireGlContext() { mEglManager.requireGlContext(); } void CanvasContext::setTextureAtlas(RenderThread& thread, const sp<GraphicBuffer>& buffer, int64_t* map, size_t mapSize) { thread.eglManager().setTextureAtlas(buffer, map, mapSize); Loading libs/hwui/renderthread/CanvasContext.h +0 −2 Original line number Diff line number Diff line Loading @@ -122,8 +122,6 @@ private: void swapBuffers(const SkRect& dirty, EGLint width, EGLint height); void requireSurface(); void requireGlContext(); void freePrefetechedLayers(); RenderThread& mRenderThread; Loading Loading
libs/hwui/Caches.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ #include "Properties.h" #include "renderstate/RenderState.h" #include "ShadowTessellator.h" #include "utils/GLUtils.h" #include <utils/Log.h> #include <utils/String8.h> Loading Loading @@ -276,6 +277,9 @@ void Caches::flush(FlushMode mode) { clearGarbage(); glFinish(); // Errors during cleanup should be considered non-fatal, dump them and // and move on. TODO: All errors or just errors like bad surface? GLUtils::dumpGLErrors(); } /////////////////////////////////////////////////////////////////////////////// Loading
libs/hwui/DeferredLayerUpdater.cpp +0 −1 Original line number Diff line number Diff line Loading @@ -119,7 +119,6 @@ void DeferredLayerUpdater::doUpdateTexImage() { void DeferredLayerUpdater::detachSurfaceTexture() { if (mSurfaceTexture.get()) { mRenderThread.eglManager().requireGlContext(); status_t err = mSurfaceTexture->detachFromContext(); if (err != 0) { // TODO: Elevate to fatal exception Loading
libs/hwui/renderstate/RenderState.cpp +2 −1 Original line number Diff line number Diff line Loading @@ -169,7 +169,8 @@ void RenderState::debugOverdraw(bool enable, bool clear) { void RenderState::requireGLContext() { assertOnGLThread(); mRenderThread.eglManager().requireGlContext(); LOG_ALWAYS_FATAL_IF(!mRenderThread.eglManager().hasEglContext(), "No GL context!"); } void RenderState::assertOnGLThread() { Loading
libs/hwui/renderthread/CanvasContext.cpp +2 −13 Original line number Diff line number Diff line Loading @@ -262,8 +262,6 @@ void CanvasContext::draw() { if (drew) { swapBuffers(dirty, width, height); } else { mEglManager.cancelFrame(); } // TODO: Use a fence for real completion? Loading Loading @@ -297,7 +295,6 @@ void CanvasContext::invokeFunctor(RenderThread& thread, Functor* functor) { ATRACE_CALL(); DrawGlInfo::Mode mode = DrawGlInfo::kModeProcessNoContext; if (thread.eglManager().hasEglContext()) { thread.eglManager().requireGlContext(); mode = DrawGlInfo::kModeProcess; } Loading @@ -318,7 +315,6 @@ static void destroyPrefetechedNode(RenderNode* node) { void CanvasContext::freePrefetechedLayers() { if (mPrefetechedLayers.size()) { requireGlContext(); std::for_each(mPrefetechedLayers.begin(), mPrefetechedLayers.end(), destroyPrefetechedNode); mPrefetechedLayers.clear(); } Loading @@ -329,7 +325,6 @@ void CanvasContext::buildLayer(RenderNode* node) { if (!mEglManager.hasEglContext() || !mCanvas) { return; } requireGlContext(); // buildLayer() will leave the tree in an unknown state, so we must stop drawing stopDrawing(); Loading @@ -352,7 +347,6 @@ void CanvasContext::buildLayer(RenderNode* node) { } bool CanvasContext::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) { requireGlContext(); layer->apply(); return LayerRenderer::copyLayer(mRenderThread.renderState(), layer->backingLayer(), bitmap); } Loading @@ -360,7 +354,6 @@ bool CanvasContext::copyLayerInto(DeferredLayerUpdater* layer, SkBitmap* bitmap) void CanvasContext::destroyHardwareResources() { stopDrawing(); if (mEglManager.hasEglContext()) { requireGlContext(); freePrefetechedLayers(); mRootRenderNode->destroyHardwareResources(); Caches::getInstance().flush(Caches::kFlushMode_Layers); Loading @@ -372,7 +365,6 @@ void CanvasContext::trimMemory(RenderThread& thread, int level) { if (!thread.eglManager().hasEglContext()) return; ATRACE_CALL(); thread.eglManager().requireGlContext(); if (level >= TRIM_MEMORY_COMPLETE) { Caches::getInstance().flush(Caches::kFlushMode_Full); thread.eglManager().destroy(); Loading @@ -382,7 +374,8 @@ void CanvasContext::trimMemory(RenderThread& thread, int level) { } void CanvasContext::runWithGlContext(RenderTask* task) { requireGlContext(); LOG_ALWAYS_FATAL_IF(!mEglManager.hasEglContext(), "GL context not initialized!"); task->run(); } Loading @@ -391,10 +384,6 @@ Layer* CanvasContext::createTextureLayer() { return LayerRenderer::createTextureLayer(mRenderThread.renderState()); } void CanvasContext::requireGlContext() { mEglManager.requireGlContext(); } void CanvasContext::setTextureAtlas(RenderThread& thread, const sp<GraphicBuffer>& buffer, int64_t* map, size_t mapSize) { thread.eglManager().setTextureAtlas(buffer, map, mapSize); Loading
libs/hwui/renderthread/CanvasContext.h +0 −2 Original line number Diff line number Diff line Loading @@ -122,8 +122,6 @@ private: void swapBuffers(const SkRect& dirty, EGLint width, EGLint height); void requireSurface(); void requireGlContext(); void freePrefetechedLayers(); RenderThread& mRenderThread; Loading