cc: Save correct frame begin time to FrameRateCounter
This change passes the frame begin time from RenderWidget::DoDeferredUpdate()
in single threaded compositing and the vsync tick time from cc::FrameRateController
in threaded compositing into the FrameRateCounter.
BUG=
Review URL: https://chromiumcodereview.appspot.com/12804006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@188452 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/cc/delegated_renderer_layer_impl_unittest.cc b/cc/delegated_renderer_layer_impl_unittest.cc
index def29c1..fe9358d 100644
--- a/cc/delegated_renderer_layer_impl_unittest.cc
+++ b/cc/delegated_renderer_layer_impl_unittest.cc
@@ -165,7 +165,7 @@
EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(),
frame.render_passes[2]->output_rect.ToString());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -201,7 +201,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(),
frame.render_passes[1]->quad_list[0]->rect.ToString());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -228,7 +228,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 15, 15).ToString(),
frame.render_passes[3]->quad_list[1]->rect.ToString());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -262,7 +262,7 @@
EXPECT_TRANSFORMATION_MATRIX_EQ(
gfx::Transform(), frame.render_passes[1]->quad_list[0]->quadTransform());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -274,7 +274,7 @@
// has no need to be a renderSurface for the quads it carries.
EXPECT_FALSE(delegated_renderer_layer_->render_surface());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -289,7 +289,7 @@
// render surface.
EXPECT_TRUE(delegated_renderer_layer_->render_surface());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -307,7 +307,7 @@
// render surface.
EXPECT_TRUE(delegated_renderer_layer_->render_surface());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -354,7 +354,7 @@
EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(),
frame.render_passes[2]->output_rect.ToString());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -391,7 +391,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 6, 6).ToString(),
frame.render_passes[1]->quad_list[0]->rect.ToString());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -416,7 +416,7 @@
EXPECT_EQ(gfx::Rect(7, 7, 7, 7).ToString(),
frame.render_passes[3]->quad_list[0]->rect.ToString());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -448,7 +448,7 @@
EXPECT_TRANSFORMATION_MATRIX_EQ(
gfx::Transform(), frame.render_passes[1]->quad_list[0]->quadTransform());
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -679,7 +679,7 @@
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -738,7 +738,7 @@
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -793,7 +793,7 @@
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -847,7 +847,7 @@
expected,
contrib_delegated_shared_quad_state->content_to_target_transform);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1026,7 +1026,7 @@
// Quads are clipped to the delegated renderer layer.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1057,7 +1057,7 @@
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1089,7 +1089,7 @@
// Quads are clipped to the delegated renderer layer.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1120,7 +1120,7 @@
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1151,7 +1151,7 @@
// clip rect is ignored, and they are not set as clipped.
EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1183,7 +1183,7 @@
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1214,7 +1214,7 @@
// clip rect is ignored, and they are not set as clipped.
EXPECT_FALSE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
@@ -1247,7 +1247,7 @@
// Quads came with a clip rect.
EXPECT_TRUE(root_delegated_shared_quad_state->is_clipped);
- host_impl_->DrawLayers(&frame);
+ host_impl_->DrawLayers(&frame, base::TimeTicks::Now());
host_impl_->DidDrawAllLayers(frame);
}
diff --git a/cc/frame_rate_controller.cc b/cc/frame_rate_controller.cc
index 2f19c253..5fa1255e 100644
--- a/cc/frame_rate_controller.cc
+++ b/cc/frame_rate_controller.cc
@@ -153,4 +153,12 @@
return base::TimeTicks();
}
+base::TimeTicks FrameRateController::lastTickTime()
+{
+ if (m_isTimeSourceThrottling)
+ return m_timeSource->lastTickTime();
+
+ return base::TimeTicks::Now();
+}
+
} // namespace cc
diff --git a/cc/frame_rate_controller.h b/cc/frame_rate_controller.h
index 681c6d20..c8a033e2 100644
--- a/cc/frame_rate_controller.h
+++ b/cc/frame_rate_controller.h
@@ -57,6 +57,9 @@
// This returns null for unthrottled frame-rate.
base::TimeTicks nextTickTime();
+ // This returns now for unthrottled frame-rate.
+ base::TimeTicks lastTickTime();
+
void setTimebaseAndInterval(base::TimeTicks timebase, base::TimeDelta interval);
void setSwapBuffersCompleteSupported(bool);
diff --git a/cc/layer_tree_host.cc b/cc/layer_tree_host.cc
index e2269863..f8a97f5 100644
--- a/cc/layer_tree_host.cc
+++ b/cc/layer_tree_host.cc
@@ -524,9 +524,10 @@
proxy_->StartPageScaleAnimation(target_offset, use_anchor, scale, duration);
}
-void LayerTreeHost::Composite() {
+void LayerTreeHost::Composite(base::TimeTicks frame_begin_time) {
if (!proxy_->HasImplThread())
- static_cast<SingleThreadProxy*>(proxy_.get())->CompositeImmediately();
+ static_cast<SingleThreadProxy*>(proxy_.get())->CompositeImmediately(
+ frame_begin_time);
else
SetNeedsCommit();
}
diff --git a/cc/layer_tree_host.h b/cc/layer_tree_host.h
index dff5c838..0eb6b9c 100644
--- a/cc/layer_tree_host.h
+++ b/cc/layer_tree_host.h
@@ -124,7 +124,7 @@
LayerTreeHostClient* client() { return client_; }
- void Composite();
+ void Composite(base::TimeTicks frame_begin_time);
// Only used when compositing on the main thread.
void ScheduleComposite();
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index 775b965..0891074 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -928,15 +928,13 @@
return metadata;
}
-void LayerTreeHostImpl::DrawLayers(FrameData* frame) {
+void LayerTreeHostImpl::DrawLayers(FrameData* frame,
+ base::TimeTicks frame_begin_time) {
TRACE_EVENT0("cc", "LayerTreeHostImpl::DrawLayers");
DCHECK(CanDraw());
DCHECK(!frame->render_passes.empty());
- // FIXME: use the frame begin time from the overall compositor scheduler.
- // This value is currently inaccessible because it is up in Chromium's
- // RenderWidget.
- fps_counter_->saveTimeStamp(base::TimeTicks::Now());
+ fps_counter_->saveTimeStamp(frame_begin_time);
if (tile_manager_) {
memory_history_->SaveEntry(
diff --git a/cc/layer_tree_host_impl.h b/cc/layer_tree_host_impl.h
index e2261da..323f398 100644
--- a/cc/layer_tree_host_impl.h
+++ b/cc/layer_tree_host_impl.h
@@ -135,7 +135,7 @@
// must also be called, regardless of whether DrawLayers is called between the
// two.
virtual bool PrepareToDraw(FrameData* frame);
- virtual void DrawLayers(FrameData* frame);
+ virtual void DrawLayers(FrameData* frame, base::TimeTicks frame_begin_time);
// Must be called if and only if PrepareToDraw was called.
void DidDrawAllLayers(const FrameData& frame);
diff --git a/cc/layer_tree_host_impl_unittest.cc b/cc/layer_tree_host_impl_unittest.cc
index 1d3bcbe..93eb529b 100644
--- a/cc/layer_tree_host_impl_unittest.cc
+++ b/cc/layer_tree_host_impl_unittest.cc
@@ -200,7 +200,7 @@
m_hostImpl->InitializeRenderer(createOutputSurface());
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -926,7 +926,7 @@
EXPECT_FALSE(layer->didDrawCalled());
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
EXPECT_FALSE(layer->willDrawCalled());
@@ -941,7 +941,7 @@
EXPECT_FALSE(layer->didDrawCalled());
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
EXPECT_TRUE(layer->willDrawCalled());
@@ -976,7 +976,7 @@
EXPECT_FALSE(topLayer->didDrawCalled());
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
EXPECT_FALSE(occludedLayer->willDrawCalled());
@@ -1005,7 +1005,7 @@
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
EXPECT_TRUE(root->didDrawCalled());
@@ -1051,7 +1051,7 @@
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
// When a texture is missing and we're not animating, we draw as usual with checkerboarding.
@@ -1060,7 +1060,7 @@
root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree(), 4, true, false, false, m_hostImpl->resource_provider()));
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
// When a texture is missing and we're animating, we don't want to draw anything.
@@ -1069,7 +1069,7 @@
root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree(), 6, true, false, true, m_hostImpl->resource_provider()));
EXPECT_FALSE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
// When the layer skips draw and we're animating, we still draw the frame.
@@ -1078,7 +1078,7 @@
root->AddChild(MissingTextureAnimatingLayer::Create(m_hostImpl->active_tree(), 8, false, true, true, m_hostImpl->resource_provider()));
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -1355,7 +1355,7 @@
// delta on the root layer is applied hierarchically.
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
EXPECT_EQ(root->draw_transform().matrix().getDouble(0, 0), newPageScale);
@@ -1818,7 +1818,7 @@
layer1->SetContentsOpaque(true);
layer1->setExpectation(false, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1826,7 +1826,7 @@
layer1->SetContentsOpaque(false);
layer1->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1835,7 +1835,7 @@
layer1->SetOpacity(0.5);
layer1->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1844,7 +1844,7 @@
layer1->SetOpacity(0.5);
layer1->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1860,7 +1860,7 @@
layer2->SetOpacity(1);
layer2->setExpectation(false, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
EXPECT_TRUE(layer2->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1871,7 +1871,7 @@
layer1->setExpectation(true, false);
layer2->setExpectation(false, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
EXPECT_TRUE(layer2->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1882,7 +1882,7 @@
layer1->setExpectation(false, false);
layer2->setExpectation(false, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
EXPECT_TRUE(layer2->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1897,7 +1897,7 @@
layer1->setExpectation(false, true);
layer2->setExpectation(false, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
EXPECT_TRUE(layer2->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1911,7 +1911,7 @@
layer2->SetOpacity(0.5);
layer2->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
EXPECT_TRUE(layer2->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1924,7 +1924,7 @@
layer2->SetOpacity(1);
layer2->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
EXPECT_TRUE(layer2->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1937,7 +1937,7 @@
layer2->SetOpacity(1);
layer2->setExpectation(false, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
EXPECT_TRUE(layer2->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1949,7 +1949,7 @@
layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
layer1->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1960,7 +1960,7 @@
layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
layer1->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1971,7 +1971,7 @@
layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
layer1->setExpectation(true, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -1982,7 +1982,7 @@
layer1->setOpaqueContentRect(gfx::Rect(5, 5, 2, 5));
layer1->setExpectation(false, false);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(layer1->quadsAppended());
m_hostImpl->DidDrawAllLayers(frame);
@@ -2114,7 +2114,7 @@
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
EXPECT_TRUE(reshapeTracker->reshapeCalled());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -2173,7 +2173,7 @@
// First frame, the entire screen should get swapped.
EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame));
- layerTreeHostImpl->DrawLayers(&frame);
+ layerTreeHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
layerTreeHostImpl->DidDrawAllLayers(frame);
layerTreeHostImpl->SwapBuffers();
gfx::Rect actualSwapRect = partialSwapTracker->partialSwapRect();
@@ -2189,7 +2189,7 @@
// expected swap rect: vertically flipped, with origin at bottom left corner.
layerTreeHostImpl->active_tree()->root_layer()->children()[0]->SetPosition(gfx::PointF(0, 0));
EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame));
- layerTreeHostImpl->DrawLayers(&frame);
+ layerTreeHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
layerTreeHostImpl->SwapBuffers();
actualSwapRect = partialSwapTracker->partialSwapRect();
@@ -2205,7 +2205,7 @@
layerTreeHostImpl->SetViewportSize(gfx::Size(10, 10), gfx::Size(10, 10));
layerTreeHostImpl->active_tree()->root_layer()->SetOpacity(0.7f); // this will damage everything
EXPECT_TRUE(layerTreeHostImpl->PrepareToDraw(&frame));
- layerTreeHostImpl->DrawLayers(&frame);
+ layerTreeHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
layerTreeHostImpl->SwapBuffers();
actualSwapRect = partialSwapTracker->partialSwapRect();
@@ -2368,7 +2368,7 @@
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mockContext);
@@ -2380,7 +2380,7 @@
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mockContext);
@@ -2401,7 +2401,7 @@
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mockContext);
@@ -2415,7 +2415,7 @@
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
Mock::VerifyAndClearExpectations(&mockContext);
@@ -2526,7 +2526,7 @@
EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->material);
EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->material);
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -2546,7 +2546,7 @@
EXPECT_EQ(DrawQuad::SOLID_COLOR, frame.render_passes[0]->quad_list[0]->material);
EXPECT_EQ(DrawQuad::RENDER_PASS, frame.render_passes[1]->quad_list[0]->material);
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -2644,7 +2644,7 @@
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
m_hostImpl->SwapBuffers();
@@ -2680,14 +2680,14 @@
.Times(1);
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
Mock::VerifyAndClearExpectations(&mockContext);
// Verify no quads are drawn when transparent background is set.
m_hostImpl->active_tree()->set_has_transparent_background(true);
EXPECT_TRUE(m_hostImpl->PrepareToDraw(&frame));
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
Mock::VerifyAndClearExpectations(&mockContext);
}
@@ -2810,7 +2810,7 @@
EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -2833,7 +2833,7 @@
EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U);
EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -2852,7 +2852,7 @@
EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -2926,7 +2926,7 @@
EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size());
EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -2949,7 +2949,7 @@
EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U);
EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -2968,7 +2968,7 @@
EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -3033,7 +3033,7 @@
EXPECT_EQ(3U, frame.render_passes[1]->quad_list.size());
EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3056,7 +3056,7 @@
EXPECT_GT(frame.render_passes[0]->quad_list.size(), 0U);
EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -3114,7 +3114,7 @@
EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
EXPECT_EQ(1U, frame.render_passes[1]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3129,7 +3129,7 @@
EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -3202,7 +3202,7 @@
EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
EXPECT_EQ(2U, frame.render_passes[2]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3225,7 +3225,7 @@
EXPECT_EQ(2U, frame.render_passes[0]->quad_list.size());
EXPECT_EQ(2U, frame.render_passes[1]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3242,7 +3242,7 @@
// Root render pass only.
ASSERT_EQ(1U, frame.render_passes.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -3322,7 +3322,7 @@
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3332,7 +3332,7 @@
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3345,7 +3345,7 @@
{
LayerTreeHostImpl::FrameData frame;
EXPECT_TRUE(myHostImpl->PrepareToDraw(&frame));
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3383,7 +3383,7 @@
ASSERT_TRUE(targetPass);
EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3400,7 +3400,7 @@
const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == frame.render_passes_by_id.end());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3418,7 +3418,7 @@
const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == frame.render_passes_by_id.end());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3440,7 +3440,7 @@
ASSERT_TRUE(targetPass);
EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3471,7 +3471,7 @@
// Was our surface evicted?
EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(targetPass->id));
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3488,7 +3488,7 @@
const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == frame.render_passes_by_id.end());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3508,7 +3508,7 @@
const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == frame.render_passes_by_id.end());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -3547,7 +3547,7 @@
EXPECT_FALSE(frame.render_passes[0]->has_occlusion_from_outside_target_surface);
EXPECT_FALSE(frame.render_passes[1]->has_occlusion_from_outside_target_surface);
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3564,7 +3564,7 @@
EXPECT_TRUE(frame.render_passes[0]->damage_rect.IsEmpty());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3582,7 +3582,7 @@
const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == frame.render_passes_by_id.end());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3604,7 +3604,7 @@
ASSERT_TRUE(targetPass);
EXPECT_FALSE(targetPass->damage_rect.IsEmpty());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3635,7 +3635,7 @@
// Was our surface evicted?
EXPECT_FALSE(myHostImpl->renderer()->HaveCachedResourcesForRenderPassId(targetPass->id));
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3650,7 +3650,7 @@
ASSERT_EQ(1U, frame.render_passes.size());
EXPECT_EQ(1U, frame.render_passes[0]->quad_list.size());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
@@ -3670,7 +3670,7 @@
const RenderPassDrawQuad* quad = RenderPassDrawQuad::MaterialCast(frame.render_passes[0]->quad_list[0]);
EXPECT_TRUE(frame.render_passes_by_id.find(quad->render_pass_id) == frame.render_passes_by_id.end());
- myHostImpl->DrawLayers(&frame);
+ myHostImpl->DrawLayers(&frame, base::TimeTicks::Now());
myHostImpl->DidDrawAllLayers(frame);
}
}
@@ -4064,7 +4064,7 @@
gfx::Rect expectedVisibleRect(m_hostImpl->active_tree()->root_layer()->content_bounds());
EXPECT_RECT_EQ(expectedVisibleRect, rootRenderPass->quad_list[0]->visible_rect);
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
};
@@ -4169,7 +4169,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToString());
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mask_uv_rect.ToString());
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -4192,7 +4192,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), renderPassQuad->rect.ToString());
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mask_uv_rect.ToString());
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -4216,7 +4216,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 200, 200).ToString(), renderPassQuad->rect.ToString());
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mask_uv_rect.ToString());
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
}
@@ -4273,7 +4273,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 50, 50).ToString(), renderPassQuad->rect.ToString());
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mask_uv_rect.ToString());
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -4296,7 +4296,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToString());
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mask_uv_rect.ToString());
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -4321,7 +4321,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToString());
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mask_uv_rect.ToString());
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
@@ -4341,7 +4341,7 @@
EXPECT_EQ(gfx::Rect(0, 0, 100, 100).ToString(), renderPassQuad->rect.ToString());
EXPECT_EQ(gfx::RectF(0.f, 0.f, 1.f, 1.f).ToString(), renderPassQuad->mask_uv_rect.ToString());
- m_hostImpl->DrawLayers(&frame);
+ m_hostImpl->DrawLayers(&frame, base::TimeTicks::Now());
m_hostImpl->DidDrawAllLayers(frame);
}
}
diff --git a/cc/scheduler.cc b/cc/scheduler.cc
index 365d68b..d0009f1 100644
--- a/cc/scheduler.cc
+++ b/cc/scheduler.cc
@@ -150,6 +150,11 @@
return m_frameRateController->nextTickTime();
}
+base::TimeTicks Scheduler::lastVSyncTime()
+{
+ return m_frameRateController->lastTickTime();
+}
+
void Scheduler::vsyncTick(bool throttled)
{
TRACE_EVENT1("cc", "Scheduler::vsyncTick", "throttled", throttled);
diff --git a/cc/scheduler.h b/cc/scheduler.h
index 5e727d9..8eacad0 100644
--- a/cc/scheduler.h
+++ b/cc/scheduler.h
@@ -99,6 +99,8 @@
base::TimeTicks anticipatedDrawTime();
+ base::TimeTicks lastVSyncTime();
+
// FrameRateControllerClient implementation
virtual void vsyncTick(bool throttled) OVERRIDE;
diff --git a/cc/single_thread_proxy.cc b/cc/single_thread_proxy.cc
index 08af799..b1f03ac 100644
--- a/cc/single_thread_proxy.cc
+++ b/cc/single_thread_proxy.cc
@@ -55,7 +55,7 @@
TRACE_EVENT0("cc", "SingleThreadProxy::compositeAndReadback");
DCHECK(Proxy::IsMainThread());
- if (!CommitAndComposite())
+ if (!CommitAndComposite(base::TimeTicks::Now()))
return false;
{
@@ -337,8 +337,8 @@
// Called by the legacy scheduling path (e.g. where render_widget does the
// scheduling)
-void SingleThreadProxy::CompositeImmediately() {
- if (CommitAndComposite()) {
+void SingleThreadProxy::CompositeImmediately(base::TimeTicks frame_begin_time) {
+ if (CommitAndComposite(frame_begin_time)) {
layer_tree_host_impl_->SwapBuffers();
DidSwapFrame();
}
@@ -368,7 +368,7 @@
void SingleThreadProxy::OnSwapBuffersCompleteOnImplThread() { NOTREACHED(); }
-bool SingleThreadProxy::CommitAndComposite() {
+bool SingleThreadProxy::CommitAndComposite(base::TimeTicks frame_begin_time) {
DCHECK(Proxy::IsMainThread());
if (!layer_tree_host_->InitializeRendererIfNeeded())
@@ -392,13 +392,14 @@
layer_tree_host_->WillCommit();
DoCommit(queue.Pass());
- bool result = DoComposite(offscreen_context_provider);
+ bool result = DoComposite(offscreen_context_provider, frame_begin_time);
layer_tree_host_->DidBeginFrame();
return result;
}
bool SingleThreadProxy::DoComposite(
- scoped_refptr<cc::ContextProvider> offscreen_context_provider) {
+ scoped_refptr<cc::ContextProvider> offscreen_context_provider,
+ base::TimeTicks frame_begin_time) {
DCHECK(!output_surface_lost_);
{
DebugScopedSetImplThread impl(this);
@@ -421,7 +422,7 @@
LayerTreeHostImpl::FrameData frame;
layer_tree_host_impl_->PrepareToDraw(&frame);
- layer_tree_host_impl_->DrawLayers(&frame);
+ layer_tree_host_impl_->DrawLayers(&frame, frame_begin_time);
layer_tree_host_impl_->DidDrawAllLayers(frame);
output_surface_lost_ = layer_tree_host_impl_->IsContextLost();
diff --git a/cc/single_thread_proxy.h b/cc/single_thread_proxy.h
index a5e14e3..8e3e97f 100644
--- a/cc/single_thread_proxy.h
+++ b/cc/single_thread_proxy.h
@@ -75,15 +75,16 @@
virtual void RenewTreePriority() OVERRIDE {}
// Called by the legacy path where RenderWidget does the scheduling.
- void CompositeImmediately();
+ void CompositeImmediately(base::TimeTicks frame_begin_time);
private:
explicit SingleThreadProxy(LayerTreeHost* layer_tree_host);
- bool CommitAndComposite();
+ bool CommitAndComposite(base::TimeTicks frame_begin_time);
void DoCommit(scoped_ptr<ResourceUpdateQueue> queue);
bool DoComposite(
- scoped_refptr<cc::ContextProvider> offscreen_context_provider);
+ scoped_refptr<cc::ContextProvider> offscreen_context_provider,
+ base::TimeTicks frame_begin_time);
void DidSwapFrame();
// Accessed on main thread only.
diff --git a/cc/test/layer_tree_test_common.cc b/cc/test/layer_tree_test_common.cc
index f24c6b0..46e3089 100644
--- a/cc/test/layer_tree_test_common.cc
+++ b/cc/test/layer_tree_test_common.cc
@@ -92,9 +92,9 @@
return result;
}
-void MockLayerTreeHostImpl::DrawLayers(FrameData* frame)
+void MockLayerTreeHostImpl::DrawLayers(FrameData* frame, base::TimeTicks frameBeginTime)
{
- LayerTreeHostImpl::DrawLayers(frame);
+ LayerTreeHostImpl::DrawLayers(frame, frameBeginTime);
m_testHooks->drawLayersOnThread(this);
}
@@ -494,7 +494,7 @@
}
m_scheduleWhenSetVisibleTrue = false;
- m_layerTreeHost->Composite();
+ m_layerTreeHost->Composite(base::TimeTicks::Now());
}
void ThreadedTest::runTest(bool threaded)
diff --git a/cc/test/layer_tree_test_common.h b/cc/test/layer_tree_test_common.h
index 28991b3..2808fa9 100644
--- a/cc/test/layer_tree_test_common.h
+++ b/cc/test/layer_tree_test_common.h
@@ -167,7 +167,7 @@
virtual void BeginCommit() OVERRIDE;
virtual void CommitComplete() OVERRIDE;
virtual bool PrepareToDraw(FrameData* frame) OVERRIDE;
- virtual void DrawLayers(FrameData* frame) OVERRIDE;
+ virtual void DrawLayers(FrameData* frame, base::TimeTicks frameBeginTime) OVERRIDE;
virtual bool SwapBuffers() OVERRIDE;
virtual bool ActivatePendingTreeIfNeeded() OVERRIDE;
virtual bool InitializeRenderer(scoped_ptr<OutputSurface> outputSurface) OVERRIDE;
diff --git a/cc/thread_proxy.cc b/cc/thread_proxy.cc
index d7e62e55..6c10d48 100644
--- a/cc/thread_proxy.cc
+++ b/cc/thread_proxy.cc
@@ -916,7 +916,9 @@
layer_tree_host_impl_->CanDraw() &&
(layer_tree_host_impl_->PrepareToDraw(&frame) || forced_draw);
if (draw_frame) {
- layer_tree_host_impl_->DrawLayers(&frame);
+ layer_tree_host_impl_->DrawLayers(
+ &frame,
+ scheduler_on_impl_thread_->lastVSyncTime());
result.didDraw = true;
}
layer_tree_host_impl_->DidDrawAllLayers(frame);