diff options
author | John Reck <jreck@google.com> | 2019-11-21 14:40:53 -0800 |
---|---|---|
committer | John Reck <jreck@google.com> | 2019-11-21 15:16:08 -0800 |
commit | cd18c2271d143fa842f0de40497a4685c52e2548 (patch) | |
tree | 8233476d70ef50e8048d90a838cebf1b3d214281 /libs/hwui/renderthread/CanvasContext.cpp | |
parent | a2186c9f79cb8e634ddbf067032f933bd9ea8769 (diff) |
Fix for Surface#lockHardwareCanvas lockups
By avoiding setting a dequeue buffer timeout we avoid
hitting a different path in BufferQueue that prevents
async behavior from happening. This restores P's
behavior in this path.
Bug: 143860379
Test: repro app in bug
Change-Id: Iffbd9f9e6689a40876ff3aa74c10020e3f09fc6a
Diffstat (limited to 'libs/hwui/renderthread/CanvasContext.cpp')
-rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index f0867686c321..84902210a751 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -140,13 +140,15 @@ void CanvasContext::destroy() { mAnimationContext->destroy(); } -void CanvasContext::setSurface(sp<Surface>&& surface) { +void CanvasContext::setSurface(sp<Surface>&& surface, bool enableTimeout) { ATRACE_CALL(); if (surface) { mNativeSurface = new ReliableSurface{std::move(surface)}; - // TODO: Fix error handling & re-shorten timeout - ANativeWindow_setDequeueTimeout(mNativeSurface.get(), 4000_ms); + if (enableTimeout) { + // TODO: Fix error handling & re-shorten timeout + ANativeWindow_setDequeueTimeout(mNativeSurface.get(), 4000_ms); + } } else { mNativeSurface = nullptr; } |