diff options
| -rw-r--r-- | libs/hwui/renderthread/CanvasContext.cpp | 3 | ||||
| -rw-r--r-- | libs/hwui/renderthread/CanvasContext.h | 4 | ||||
| -rw-r--r-- | libs/hwui/renderthread/DrawFrameTask.cpp | 3 |
3 files changed, 8 insertions, 2 deletions
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp index dcaec428449c..70b9a436dee2 100644 --- a/libs/hwui/renderthread/CanvasContext.cpp +++ b/libs/hwui/renderthread/CanvasContext.cpp @@ -633,6 +633,9 @@ void CanvasContext::prepareAndDraw(RenderNode* node) { prepareTree(info, frameInfo, systemTime(CLOCK_MONOTONIC), node); if (info.out.canDrawThisFrame) { draw(); + } else { + // wait on fences so tasks don't overlap next frame + waitOnFences(); } } diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h index 3eef29b24473..e1821751b57f 100644 --- a/libs/hwui/renderthread/CanvasContext.h +++ b/libs/hwui/renderthread/CanvasContext.h @@ -168,6 +168,8 @@ public: ANDROID_API int64_t getFrameNumber(); + void waitOnFences(); + private: friend class RegisterFrameCallbackTask; // TODO: Replace with something better for layer & other GL object @@ -178,8 +180,6 @@ private: void freePrefetchedLayers(TreeObserver* observer); - void waitOnFences(); - bool isSwapChainStuffed(); EGLint mLastFrameWidth = 0; diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp index c9c07b3df292..e3b6dc6fd9fe 100644 --- a/libs/hwui/renderthread/DrawFrameTask.cpp +++ b/libs/hwui/renderthread/DrawFrameTask.cpp @@ -104,6 +104,9 @@ void DrawFrameTask::run() { if (CC_LIKELY(canDrawThisFrame)) { context->draw(); + } else { + // wait on fences so tasks don't overlap next frame + context->waitOnFences(); } if (!canUnblockUiThread) { |