TIME LORD!

Bug: 14444180

Change-Id: I68bec3807c4d1c88d5af1aec2fe6907d60b5f2f3
This commit is contained in:
John Reck
2014-05-02 16:46:41 -07:00
parent 29e594c520
commit 18f16e6fba
14 changed files with 181 additions and 43 deletions

View File

@ -30,13 +30,17 @@ namespace android {
namespace uirenderer {
namespace renderthread {
DrawFrameTask::DrawFrameTask() : mContext(0) {
DrawFrameTask::DrawFrameTask()
: mRenderThread(NULL)
, mContext(NULL)
, mFrameTimeNanos(NULL) {
}
DrawFrameTask::~DrawFrameTask() {
}
void DrawFrameTask::setContext(CanvasContext* context) {
void DrawFrameTask::setContext(RenderThread* thread, CanvasContext* context) {
mRenderThread = thread;
mContext = context;
}
@ -59,18 +63,20 @@ void DrawFrameTask::setDirty(int left, int top, int right, int bottom) {
mDirty.set(left, top, right, bottom);
}
void DrawFrameTask::drawFrame(RenderThread* renderThread) {
void DrawFrameTask::drawFrame(nsecs_t frameTimeNanos) {
LOG_ALWAYS_FATAL_IF(!mContext, "Cannot drawFrame with no CanvasContext!");
postAndWait(renderThread);
mFrameTimeNanos = frameTimeNanos;
postAndWait();
// Reset the single-frame data
mFrameTimeNanos = 0;
mDirty.setEmpty();
}
void DrawFrameTask::postAndWait(RenderThread* renderThread) {
void DrawFrameTask::postAndWait() {
AutoMutex _lock(mLock);
renderThread->queue(this);
mRenderThread->queue(this);
mSignal.wait(mLock);
}
@ -99,13 +105,11 @@ static void initTreeInfo(TreeInfo& info) {
info.prepareTextures = true;
info.performStagingPush = true;
info.evaluateAnimations = true;
// TODO: Get this from Choreographer
nsecs_t frameTimeNs = systemTime(CLOCK_MONOTONIC);
info.frameTimeMs = nanoseconds_to_milliseconds(frameTimeNs);
}
bool DrawFrameTask::syncFrameState() {
ATRACE_CALL();
mRenderThread->timeLord().vsyncReceived(mFrameTimeNanos);
mContext->makeCurrent();
Caches::getInstance().textureCache.resetMarkInUse();
TreeInfo info;