diff options
author | John Reck <jreck@google.com> | 2014-04-09 17:00:04 -0700 |
---|---|---|
committer | John Reck <jreck@google.com> | 2014-04-09 17:00:04 -0700 |
commit | f4198b713e43c0c0f9adac74203cf24c2a49b802 (patch) | |
tree | ed1e56915cfd87dbc949d72a49ccaf3ee122881b /libs/hwui/renderthread/DrawFrameTask.cpp | |
parent | 8e1f918738abf70a4dc86dbb12b386a9deea37f8 (diff) |
Merge hasFunctors & pushStaging into prepareTree
Bug: 13902607
Fixes synchronous mode for WebView in HardwareLayers
Change-Id: I90de1e26dcfd9b75cc2f03bac72705fc23237b68
Diffstat (limited to 'libs/hwui/renderthread/DrawFrameTask.cpp')
-rw-r--r-- | libs/hwui/renderthread/DrawFrameTask.cpp | 21 |
1 files changed, 10 insertions, 11 deletions
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp index 6e7ec9b42ef9..372d0d0084d6 100644 --- a/libs/hwui/renderthread/DrawFrameTask.cpp +++ b/libs/hwui/renderthread/DrawFrameTask.cpp @@ -94,7 +94,8 @@ void DrawFrameTask::postAndWait(RenderThread* renderThread, TaskMode mode) { void DrawFrameTask::run() { ATRACE_NAME("DrawFrame"); - syncFrameState(); + // canUnblockUiThread is temporary until WebView has a solution for syncing frame state + bool canUnblockUiThread = syncFrameState(); if (mTaskMode == MODE_STATE_ONLY) { unblockUiThread(); @@ -106,9 +107,6 @@ void DrawFrameTask::run() { sp<RenderNode> renderNode = mRenderNode; CanvasContext* context = mContext; - // This is temporary until WebView has a solution for syncing frame state - bool canUnblockUiThread = !requiresSynchronousDraw(renderNode.get()); - // From this point on anything in "this" is *UNSAFE TO ACCESS* if (canUnblockUiThread) { unblockUiThread(); @@ -121,15 +119,20 @@ void DrawFrameTask::run() { } } -void DrawFrameTask::syncFrameState() { +bool DrawFrameTask::syncFrameState() { ATRACE_CALL(); - mContext->processLayerUpdates(&mLayers); + bool hasFunctors = false; + mContext->processLayerUpdates(&mLayers, &hasFunctors); // If we don't have an mRenderNode this is a state flush only if (mRenderNode.get()) { - mRenderNode->pushStagingChanges(); + TreeInfo info = {0}; + mRenderNode->prepareTree(info); + hasFunctors |= info.hasFunctors; } + + return !hasFunctors; } void DrawFrameTask::unblockUiThread() { @@ -147,10 +150,6 @@ void DrawFrameTask::drawRenderNode(CanvasContext* context, RenderNode* renderNod context->drawDisplayList(renderNode, dirty); } -bool DrawFrameTask::requiresSynchronousDraw(RenderNode* renderNode) { - return renderNode->hasFunctors(); -} - } /* namespace renderthread */ } /* namespace uirenderer */ } /* namespace android */ |