Loading libs/hwui/DeferredLayerUpdater.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer, OpenGLRenderer* rendere DeferredLayerUpdater::~DeferredLayerUpdater() { SkSafeUnref(mColorFilter); setTransform(0); if (mLayer) { mCaches.resourceCache.decrementRefcount(mLayer); } Loading libs/hwui/renderthread/CanvasContext.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -387,6 +387,7 @@ void CanvasContext::setup(int width, int height) { void CanvasContext::processLayerUpdates(const Vector<DeferredLayerUpdater*>* layerUpdaters, bool* hasFunctors) { LOG_ALWAYS_FATAL_IF(!mCanvas, "Cannot process layer updates without a canvas!"); mGlobalContext->makeCurrent(mEglSurface); for (size_t i = 0; i < layerUpdaters->size(); i++) { DeferredLayerUpdater* update = layerUpdaters->itemAt(i); Loading libs/hwui/renderthread/DrawFrameTask.cpp +6 −23 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ namespace android { namespace uirenderer { namespace renderthread { DrawFrameTask::DrawFrameTask() : mContext(0), mTaskMode(MODE_INVALID), mRenderNode(0) { DrawFrameTask::DrawFrameTask() : mContext(0), mRenderNode(0) { } DrawFrameTask::~DrawFrameTask() { Loading Loading @@ -69,23 +69,14 @@ void DrawFrameTask::drawFrame(RenderThread* renderThread) { LOG_ALWAYS_FATAL_IF(!mRenderNode.get(), "Cannot drawFrame with no render node!"); LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!"); postAndWait(renderThread, MODE_FULL); postAndWait(renderThread); // Reset the single-frame data mDirty.setEmpty(); mRenderNode = 0; } void DrawFrameTask::flushStateChanges(RenderThread* renderThread) { LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!"); postAndWait(renderThread, MODE_STATE_ONLY); } void DrawFrameTask::postAndWait(RenderThread* renderThread, TaskMode mode) { LOG_ALWAYS_FATAL_IF(mode == MODE_INVALID, "That's not a real mode, silly!"); mTaskMode = mode; void DrawFrameTask::postAndWait(RenderThread* renderThread) { AutoMutex _lock(mLock); renderThread->queue(this); mSignal.wait(mLock); Loading @@ -97,11 +88,6 @@ void DrawFrameTask::run() { // canUnblockUiThread is temporary until WebView has a solution for syncing frame state bool canUnblockUiThread = syncFrameState(); if (mTaskMode == MODE_STATE_ONLY) { unblockUiThread(); return; } // Grab a copy of everything we need Rect dirtyCopy(mDirty); sp<RenderNode> renderNode = mRenderNode; Loading @@ -125,12 +111,9 @@ bool DrawFrameTask::syncFrameState() { bool hasFunctors = false; mContext->processLayerUpdates(&mLayers, &hasFunctors); // If we don't have an mRenderNode this is a state flush only if (mRenderNode.get()) { TreeInfo info = {0}; mRenderNode->prepareTree(info); hasFunctors |= info.hasFunctors; } return !hasFunctors; } Loading libs/hwui/renderthread/DrawFrameTask.h +1 −9 Original line number Diff line number Diff line Loading @@ -56,18 +56,11 @@ public: void setRenderNode(RenderNode* renderNode); void setDirty(int left, int top, int right, int bottom); void drawFrame(RenderThread* renderThread); void flushStateChanges(RenderThread* renderThread); virtual void run(); private: enum TaskMode { MODE_INVALID, MODE_FULL, MODE_STATE_ONLY, }; void postAndWait(RenderThread* renderThread, TaskMode mode); void postAndWait(RenderThread* renderThread); bool syncFrameState(); void unblockUiThread(); static void drawRenderNode(CanvasContext* context, RenderNode* renderNode, Rect* dirty); Loading @@ -80,7 +73,6 @@ private: /********************************************* * Single frame data *********************************************/ TaskMode mTaskMode; sp<RenderNode> mRenderNode; Rect mDirty; Loading libs/hwui/renderthread/RenderProxy.cpp +0 −7 Original line number Diff line number Diff line Loading @@ -75,9 +75,6 @@ CREATE_BRIDGE1(destroyContext, CanvasContext* context) { void RenderProxy::destroyContext() { if (mContext) { // Flush any pending changes to ensure all garbage is destroyed mDrawFrameTask.flushStateChanges(&mRenderThread); SETUP_TASK(destroyContext); args->context = mContext; mContext = 0; Loading Loading @@ -149,10 +146,6 @@ CREATE_BRIDGE1(destroyCanvas, CanvasContext* context) { } void RenderProxy::destroyCanvas() { // If the canvas is being destroyed we won't be drawing again anytime soon // So flush any pending state changes to allow for resource cleanup. mDrawFrameTask.flushStateChanges(&mRenderThread); SETUP_TASK(destroyCanvas); args->context = mContext; post(task); Loading Loading
libs/hwui/DeferredLayerUpdater.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,7 @@ DeferredLayerUpdater::DeferredLayerUpdater(Layer* layer, OpenGLRenderer* rendere DeferredLayerUpdater::~DeferredLayerUpdater() { SkSafeUnref(mColorFilter); setTransform(0); if (mLayer) { mCaches.resourceCache.decrementRefcount(mLayer); } Loading
libs/hwui/renderthread/CanvasContext.cpp +1 −0 Original line number Diff line number Diff line Loading @@ -387,6 +387,7 @@ void CanvasContext::setup(int width, int height) { void CanvasContext::processLayerUpdates(const Vector<DeferredLayerUpdater*>* layerUpdaters, bool* hasFunctors) { LOG_ALWAYS_FATAL_IF(!mCanvas, "Cannot process layer updates without a canvas!"); mGlobalContext->makeCurrent(mEglSurface); for (size_t i = 0; i < layerUpdaters->size(); i++) { DeferredLayerUpdater* update = layerUpdaters->itemAt(i); Loading
libs/hwui/renderthread/DrawFrameTask.cpp +6 −23 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ namespace android { namespace uirenderer { namespace renderthread { DrawFrameTask::DrawFrameTask() : mContext(0), mTaskMode(MODE_INVALID), mRenderNode(0) { DrawFrameTask::DrawFrameTask() : mContext(0), mRenderNode(0) { } DrawFrameTask::~DrawFrameTask() { Loading Loading @@ -69,23 +69,14 @@ void DrawFrameTask::drawFrame(RenderThread* renderThread) { LOG_ALWAYS_FATAL_IF(!mRenderNode.get(), "Cannot drawFrame with no render node!"); LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!"); postAndWait(renderThread, MODE_FULL); postAndWait(renderThread); // Reset the single-frame data mDirty.setEmpty(); mRenderNode = 0; } void DrawFrameTask::flushStateChanges(RenderThread* renderThread) { LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!"); postAndWait(renderThread, MODE_STATE_ONLY); } void DrawFrameTask::postAndWait(RenderThread* renderThread, TaskMode mode) { LOG_ALWAYS_FATAL_IF(mode == MODE_INVALID, "That's not a real mode, silly!"); mTaskMode = mode; void DrawFrameTask::postAndWait(RenderThread* renderThread) { AutoMutex _lock(mLock); renderThread->queue(this); mSignal.wait(mLock); Loading @@ -97,11 +88,6 @@ void DrawFrameTask::run() { // canUnblockUiThread is temporary until WebView has a solution for syncing frame state bool canUnblockUiThread = syncFrameState(); if (mTaskMode == MODE_STATE_ONLY) { unblockUiThread(); return; } // Grab a copy of everything we need Rect dirtyCopy(mDirty); sp<RenderNode> renderNode = mRenderNode; Loading @@ -125,12 +111,9 @@ bool DrawFrameTask::syncFrameState() { bool hasFunctors = false; mContext->processLayerUpdates(&mLayers, &hasFunctors); // If we don't have an mRenderNode this is a state flush only if (mRenderNode.get()) { TreeInfo info = {0}; mRenderNode->prepareTree(info); hasFunctors |= info.hasFunctors; } return !hasFunctors; } Loading
libs/hwui/renderthread/DrawFrameTask.h +1 −9 Original line number Diff line number Diff line Loading @@ -56,18 +56,11 @@ public: void setRenderNode(RenderNode* renderNode); void setDirty(int left, int top, int right, int bottom); void drawFrame(RenderThread* renderThread); void flushStateChanges(RenderThread* renderThread); virtual void run(); private: enum TaskMode { MODE_INVALID, MODE_FULL, MODE_STATE_ONLY, }; void postAndWait(RenderThread* renderThread, TaskMode mode); void postAndWait(RenderThread* renderThread); bool syncFrameState(); void unblockUiThread(); static void drawRenderNode(CanvasContext* context, RenderNode* renderNode, Rect* dirty); Loading @@ -80,7 +73,6 @@ private: /********************************************* * Single frame data *********************************************/ TaskMode mTaskMode; sp<RenderNode> mRenderNode; Rect mDirty; Loading
libs/hwui/renderthread/RenderProxy.cpp +0 −7 Original line number Diff line number Diff line Loading @@ -75,9 +75,6 @@ CREATE_BRIDGE1(destroyContext, CanvasContext* context) { void RenderProxy::destroyContext() { if (mContext) { // Flush any pending changes to ensure all garbage is destroyed mDrawFrameTask.flushStateChanges(&mRenderThread); SETUP_TASK(destroyContext); args->context = mContext; mContext = 0; Loading Loading @@ -149,10 +146,6 @@ CREATE_BRIDGE1(destroyCanvas, CanvasContext* context) { } void RenderProxy::destroyCanvas() { // If the canvas is being destroyed we won't be drawing again anytime soon // So flush any pending state changes to allow for resource cleanup. mDrawFrameTask.flushStateChanges(&mRenderThread); SETUP_TASK(destroyCanvas); args->context = mContext; post(task); Loading