summaryrefslogtreecommitdiff
path: root/libs/hwui/renderthread/DrawFrameTask.cpp
diff options
context:
space:
mode:
authorJohn Reck <jreck@google.com>2016-04-18 11:17:52 -0700
committerJohn Reck <jreck@google.com>2016-04-18 11:29:35 -0700
commit9a17da8125c36c82ba73e7f4b3ed80b9c633767f (patch)
treeff3412c792110b31f7a0a31611cef862a32400a1 /libs/hwui/renderthread/DrawFrameTask.cpp
parent7d0b8d792886b2ed5ff89ac6c2723fba9d44c7d4 (diff)
Don't reuse LOST_SURFACE for stopped
Fixes: 28218991 If a draw() happens while we are stopped, don't report that the surface is lost because this will prompt a tear-down of the surface which isn't desired. It can result in ViewRootImpl ending up in an internally-bad state in this case. Change-Id: If3eb8c6bc8702299e5330bc0917952624dce3b7e
Diffstat (limited to 'libs/hwui/renderthread/DrawFrameTask.cpp')
-rw-r--r--libs/hwui/renderthread/DrawFrameTask.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
index ed472ac4bd02..c9c07b3df292 100644
--- a/libs/hwui/renderthread/DrawFrameTask.cpp
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -32,7 +32,7 @@ namespace renderthread {
DrawFrameTask::DrawFrameTask()
: mRenderThread(nullptr)
, mContext(nullptr)
- , mSyncResult(kSync_OK) {
+ , mSyncResult(SyncResult::OK) {
}
DrawFrameTask::~DrawFrameTask() {
@@ -68,7 +68,7 @@ void DrawFrameTask::removeLayerUpdate(DeferredLayerUpdater* layer) {
int DrawFrameTask::drawFrame(TreeObserver* observer) {
LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!");
- mSyncResult = kSync_OK;
+ mSyncResult = SyncResult::OK;
mSyncQueued = systemTime(CLOCK_MONOTONIC);
mObserver = observer;
postAndWait();
@@ -127,13 +127,18 @@ bool DrawFrameTask::syncFrameState(TreeInfo& info) {
// This is after the prepareTree so that any pending operations
// (RenderNode tree state, prefetched layers, etc...) will be flushed.
if (CC_UNLIKELY(!mContext->hasSurface() || !canDraw)) {
- mSyncResult |= kSync_LostSurfaceRewardIfFound;
+ if (!mContext->hasSurface()) {
+ mSyncResult |= SyncResult::LostSurfaceRewardIfFound;
+ } else {
+ // If we have a surface but can't draw we must be stopped
+ mSyncResult |= SyncResult::ContextIsStopped;
+ }
info.out.canDrawThisFrame = false;
}
if (info.out.hasAnimations) {
if (info.out.requiresUiRedraw) {
- mSyncResult |= kSync_UIRedrawRequired;
+ mSyncResult |= SyncResult::UIRedrawRequired;
}
}
// If prepareTextures is false, we ran out of texture cache space