Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2299)

Unified Diff: cc/layer_tree_host_impl.cc

Issue 12519006: cc:: Add RenderingStatsInstrumentation to manage collection of RenderingStats (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Early out in methods, pass raw pointers, updated tests Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/layer_tree_host_impl.cc
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index a81b31faee7c7ab1450074423422399e8ed42ac5..67f6a8eda02483f3611fdc3b5e1491f872b51e9d 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -137,12 +137,12 @@ LayerTreeHostImpl::FrameData::~FrameData()
{
}
-scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy)
+scoped_ptr<LayerTreeHostImpl> LayerTreeHostImpl::create(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy, RenderingStatsRecorder* renderingStatsRecorder)
{
- return make_scoped_ptr(new LayerTreeHostImpl(settings, client, proxy));
+ return make_scoped_ptr(new LayerTreeHostImpl(settings, client, proxy, renderingStatsRecorder));
}
-LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy)
+LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTreeHostImplClient* client, Proxy* proxy, RenderingStatsRecorder* renderingStatsRecorder)
: m_client(client)
, m_proxy(proxy)
, m_didLockScrollingLayer(false)
@@ -160,14 +160,11 @@ LayerTreeHostImpl::LayerTreeHostImpl(const LayerTreeSettings& settings, LayerTre
, m_paintTimeCounter(PaintTimeCounter::create())
, m_memoryHistory(MemoryHistory::create())
, m_debugRectHistory(DebugRectHistory::create())
- , m_numImplThreadScrolls(0)
- , m_numMainThreadScrolls(0)
- , m_cumulativeNumLayersDrawn(0)
- , m_cumulativeNumMissingTiles(0)
, m_lastSentMemoryVisibleBytes(0)
, m_lastSentMemoryVisibleAndNearbyBytes(0)
, m_lastSentMemoryUseBytes(0)
, m_animationRegistrar(AnimationRegistrar::create())
+ , m_renderingStatsRecorder(renderingStatsRecorder)
{
DCHECK(m_proxy->IsImplThread());
didVisibilityChange(this, m_visible);
@@ -473,6 +470,8 @@ bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
// in the future.
bool drawFrame = true;
+ int64 layersDrawn = 0;
+
LayerIteratorType end = LayerIteratorType::end(frame.renderSurfaceLayerList);
for (LayerIteratorType it = LayerIteratorType::begin(frame.renderSurfaceLayerList); it != end; ++it) {
RenderPass::Id targetRenderPassId = it.targetRenderSurfaceLayer()->render_surface()->RenderPassId();
@@ -511,14 +510,14 @@ bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
appendQuadsForLayer(targetRenderPass, *it, occlusionTracker, appendQuadsData);
}
- ++m_cumulativeNumLayersDrawn;
+ layersDrawn++;
danakj 2013/03/13 17:25:41 ++layersDrawn is best practice
egraether 2013/03/14 18:58:07 Done.
}
if (appendQuadsData.hadOcclusionFromOutsideTargetSurface)
targetRenderPass->has_occlusion_from_outside_target_surface = true;
if (appendQuadsData.numMissingTiles) {
- m_cumulativeNumMissingTiles += appendQuadsData.numMissingTiles;
+ m_renderingStatsRecorder->AddMissingTiles(appendQuadsData.numMissingTiles);
bool layerHasAnimatingTransform = it->screen_space_transform_is_animating() || it->draw_transform_is_animating();
if (layerHasAnimatingTransform)
drawFrame = false;
@@ -530,6 +529,8 @@ bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
occlusionTracker.LeaveLayer(it);
}
+ m_renderingStatsRecorder->AddLayersDrawn(layersDrawn);
+
#ifndef NDEBUG
for (size_t i = 0; i < frame.renderPasses.size(); ++i) {
for (size_t j = 0; j < frame.renderPasses[i]->quad_list.size(); ++j)
@@ -804,6 +805,7 @@ void LayerTreeHostImpl::drawLayers(FrameData& frame)
// This value is currently inaccessible because it is up in Chromium's
// RenderWidget.
m_fpsCounter->saveTimeStamp(base::TimeTicks::Now());
+ m_renderingStatsRecorder->SetScreenAndDroppedFrameCount(m_fpsCounter->currentFrameNumber(), m_fpsCounter->droppedFrameCount());
danakj 2013/03/13 17:25:41 "SetScreen" -> "SetFrameNumber" ? What's "Screen"
egraether 2013/03/14 18:58:07 I split this weird double call into separate calls
if (m_tileManager) {
m_memoryHistory->SaveEntry(
@@ -1024,11 +1026,8 @@ void LayerTreeHostImpl::activatePendingTree()
m_client->setNeedsRedrawOnImplThread();
m_client->renewTreePriority();
- if (m_tileManager && m_debugState.continuousPainting) {
- RenderingStats stats;
- m_tileManager->GetRenderingStats(&stats);
- m_paintTimeCounter->SaveRasterizeTime(stats.totalRasterizeTimeForNowBinsOnPendingTree, m_activeTree->source_frame_number());
- }
+ if (m_tileManager && m_debugState.continuousPainting)
+ m_paintTimeCounter->SaveRasterizeTime(m_renderingStatsRecorder->GetRenderingStats().totalRasterizeTimeForNowBinsOnPendingTree, m_activeTree->source_frame_number());
}
void LayerTreeHostImpl::setVisible(bool visible)
@@ -1076,15 +1075,14 @@ bool LayerTreeHostImpl::initializeRenderer(scoped_ptr<OutputSurface> outputSurfa
if (!resourceProvider)
return false;
- if (m_settings.implSidePainting) {
+ if (m_settings.implSidePainting)
danakj 2013/03/13 17:25:41 keep the {}
egraether 2013/03/14 18:58:07 Done.
m_tileManager.reset(new TileManager(this,
resourceProvider.get(),
m_settings.numRasterThreads,
+ m_renderingStatsRecorder,
m_settings.useCheapnessEstimator,
m_settings.useColorEstimator,
m_settings.predictionBenchmarking));
- m_tileManager->SetRecordRenderingStats(m_debugState.recordRenderingStats());
- }
if (outputSurface->capabilities().has_parent_compositor)
m_renderer = DelegatingRenderer::Create(this, outputSurface.get(), resourceProvider.get());
@@ -1201,7 +1199,7 @@ InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp
for (; layerImpl; layerImpl = layerImpl->parent()) {
// The content layer can also block attempts to scroll outside the main thread.
if (layerImpl->TryScroll(deviceViewportPoint, type) == ScrollOnMainThread) {
- m_numMainThreadScrolls++;
+ m_renderingStatsRecorder->IncrementMainThreadScrolls();
UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", true);
return ScrollOnMainThread;
}
@@ -1214,7 +1212,7 @@ InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp
// If any layer wants to divert the scroll event to the main thread, abort.
if (status == ScrollOnMainThread) {
- m_numMainThreadScrolls++;
+ m_renderingStatsRecorder->IncrementMainThreadScrolls();
UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", true);
return ScrollOnMainThread;
}
@@ -1235,7 +1233,7 @@ InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp
m_activeTree->set_currently_scrolling_layer(potentiallyScrollingLayerImpl);
m_shouldBubbleScrolls = (type != NonBubblingGesture);
m_wheelScrolling = (type == Wheel);
- m_numImplThreadScrolls++;
+ m_renderingStatsRecorder->IncrementImplThreadScrolls();
m_client->renewTreePriority();
UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", false);
return ScrollStarted;
@@ -1581,19 +1579,6 @@ int LayerTreeHostImpl::sourceAnimationFrameNumber() const
return fpsCounter()->currentFrameNumber();
}
-void LayerTreeHostImpl::renderingStats(RenderingStats* stats) const
-{
- stats->numFramesSentToScreen = fpsCounter()->currentFrameNumber();
- stats->droppedFrameCount = fpsCounter()->droppedFrameCount();
- stats->numImplThreadScrolls = m_numImplThreadScrolls;
- stats->numMainThreadScrolls = m_numMainThreadScrolls;
- stats->numLayersDrawn = m_cumulativeNumLayersDrawn;
- stats->numMissingTiles = m_cumulativeNumMissingTiles;
-
- if (m_tileManager)
- m_tileManager->GetRenderingStats(stats);
-}
-
void LayerTreeHostImpl::sendManagedMemoryStats(
size_t memoryVisibleBytes,
size_t memoryVisibleAndNearbyBytes,
@@ -1725,9 +1710,6 @@ void LayerTreeHostImpl::setDebugState(const LayerTreeDebugState& debugState)
m_paintTimeCounter->ClearHistory();
m_debugState = debugState;
-
- if (m_tileManager)
- m_tileManager->SetRecordRenderingStats(m_debugState.recordRenderingStats());
}
void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime, int commitNumber)

Powered by Google App Engine
This is Rietveld 408576698