summaryrefslogtreecommitdiffstats
path: root/libs/hwui/renderthread/DrawFrameTask.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'libs/hwui/renderthread/DrawFrameTask.cpp')
-rw-r--r--libs/hwui/renderthread/DrawFrameTask.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
index a7b781a..3b8786c 100644
--- a/libs/hwui/renderthread/DrawFrameTask.cpp
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -33,7 +33,8 @@ namespace renderthread {
DrawFrameTask::DrawFrameTask()
: mRenderThread(NULL)
, mContext(NULL)
- , mFrameTimeNanos(NULL) {
+ , mFrameTimeNanos(0)
+ , mSyncResult(kSync_OK) {
}
DrawFrameTask::~DrawFrameTask() {
@@ -63,15 +64,18 @@ void DrawFrameTask::setDirty(int left, int top, int right, int bottom) {
mDirty.set(left, top, right, bottom);
}
-void DrawFrameTask::drawFrame(nsecs_t frameTimeNanos) {
+int DrawFrameTask::drawFrame(nsecs_t frameTimeNanos) {
LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!");
+ mSyncResult = kSync_OK;
mFrameTimeNanos = frameTimeNanos;
postAndWait();
// Reset the single-frame data
mFrameTimeNanos = 0;
mDirty.setEmpty();
+
+ return mSyncResult;
}
void DrawFrameTask::postAndWait() {
@@ -114,14 +118,16 @@ bool DrawFrameTask::syncFrameState() {
Caches::getInstance().textureCache.resetMarkInUse();
TreeInfo info;
initTreeInfo(info);
- mContext->processLayerUpdates(&mLayers, info);
- mContext->prepareTree(info);
- if (info.hasAnimations) {
+ mContext->prepareDraw(&mLayers, info);
+ if (info.out.hasAnimations) {
// TODO: dirty calculations, for now just do a full-screen inval
mDirty.setEmpty();
+ if (info.out.requiresUiRedraw) {
+ mSyncResult |= kSync_UIRedrawRequired;
+ }
}
// If prepareTextures is false, we ran out of texture cache space
- return !info.hasFunctors && info.prepareTextures;
+ return !info.out.hasFunctors && info.prepareTextures;
}
void DrawFrameTask::unblockUiThread() {