Index: cc/layer_tree_host_impl.cc |
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc |
index 55f6452ded8bc55344b72f71dc08478de00335a7..96b1bd6ac613e50e2e152e59ed2c4e6acfe48449 100644 |
--- a/cc/layer_tree_host_impl.cc |
+++ b/cc/layer_tree_host_impl.cc |
@@ -317,6 +317,7 @@ OutputSurface* LayerTreeHostImpl::outputSurface() const |
void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallClockTime) |
{ |
+ setLatencyInfo(LatencyInfo()); |
animatePageScale(monotonicTime); |
animateLayers(monotonicTime, wallClockTime); |
animateScrollbars(monotonicTime); |
@@ -938,10 +939,29 @@ bool LayerTreeHostImpl::swapBuffers() |
{ |
DCHECK(m_renderer); |
+ m_createdFrame = false; |
+ TRACE_EVENT_ASYNC_END2("cc", "Frame", this, "implFrameNumber", m_latencyInfo.rendererImplFrameNumber, "mainFrameNumber", m_latencyInfo.rendererMainFrameNumber); |
+ TRACE_EVENT_INSTANT1("cc", "Frame", "inputNumber", m_latencyInfo.inputNumber); |
m_fpsCounter->markEndOfFrame(); |
return m_renderer->swapBuffers(); |
} |
+void LayerTreeHostImpl::setLatencyInfo(const LatencyInfo& latency_info) { |
+ m_latencyInfo.rendererMainFrameNumber = std::max(latency_info.rendererMainFrameNumber, m_latencyInfo.rendererMainFrameNumber); |
+ m_latencyInfo.rendererImplFrameNumber = std::max(latency_info.rendererImplFrameNumber, m_latencyInfo.rendererImplFrameNumber); |
+ m_latencyInfo.inputNumber = std::max(latency_info.inputNumber, m_latencyInfo.inputNumber); |
+ if (!m_createdFrame) { |
+ m_createdFrame = true; |
+ m_latencyInfo.rendererImplFrameNumber++; |
+ TRACE_EVENT_ASYNC_BEGIN2("cc", "Frame", this, "implFrameNumber", m_latencyInfo.rendererImplFrameNumber, "mainFrameNumber", m_latencyInfo.rendererMainFrameNumber); |
+ } |
+ m_outputSurface->SetLatencyInfo(m_latencyInfo); |
+} |
+ |
+void LayerTreeHostImpl::OnReceivedLatencyInfo(const LatencyInfo& latency_info) { |
+ m_client->onReceivedLatencyInfo(latency_info); |
+} |
+ |
const gfx::Size& LayerTreeHostImpl::deviceViewportSize() const |
{ |
return m_deviceViewportSize; |
@@ -1332,7 +1352,8 @@ static gfx::Vector2dF scrollLayerWithLocalDelta(LayerImpl& layerImpl, gfx::Vecto |
return layerImpl.scrollDelta() - previousDelta; |
} |
-bool LayerTreeHostImpl::scrollBy(const gfx::Point& viewportPoint, |
+bool LayerTreeHostImpl::scrollBy(int64 input_number, |
+ const gfx::Point& viewportPoint, |
const gfx::Vector2d& scrollDelta) |
{ |
TRACE_EVENT0("cc", "LayerTreeHostImpl::scrollBy"); |
@@ -1380,6 +1401,9 @@ bool LayerTreeHostImpl::scrollBy(const gfx::Point& viewportPoint, |
} |
if (didScroll) { |
+ LatencyInfo latency_info; |
+ latency_info.inputNumber = input_number; |
+ setLatencyInfo(latency_info); |
m_client->setNeedsCommitOnImplThread(); |
m_client->setNeedsRedrawOnImplThread(); |
setNeedsUpdateDrawProperties(); |