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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 12035038: Added a UMA metric to track slow path scrolling. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@layer_tree
Patch Set: Created 7 years, 11 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 unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layer_tree_host_impl.h" 5 #include "cc/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
11 #include "base/json/json_writer.h" 11 #include "base/json/json_writer.h"
12 #include "base/metrics/histogram.h"
12 #include "base/stl_util.h" 13 #include "base/stl_util.h"
13 #include "cc/append_quads_data.h" 14 #include "cc/append_quads_data.h"
14 #include "cc/compositor_frame_metadata.h" 15 #include "cc/compositor_frame_metadata.h"
15 #include "cc/damage_tracker.h" 16 #include "cc/damage_tracker.h"
16 #include "cc/debug_rect_history.h" 17 #include "cc/debug_rect_history.h"
17 #include "cc/delay_based_time_source.h" 18 #include "cc/delay_based_time_source.h"
18 #include "cc/delegating_renderer.h" 19 #include "cc/delegating_renderer.h"
19 #include "cc/frame_rate_counter.h" 20 #include "cc/frame_rate_counter.h"
20 #include "cc/gl_renderer.h" 21 #include "cc/gl_renderer.h"
21 #include "cc/heads_up_display_layer_impl.h" 22 #include "cc/heads_up_display_layer_impl.h"
(...skipping 470 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface; 493 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface;
493 else { 494 else {
494 DCHECK_EQ(activeTree(), it->layerTreeImpl()); 495 DCHECK_EQ(activeTree(), it->layerTreeImpl());
495 it->willDraw(m_resourceProvider.get()); 496 it->willDraw(m_resourceProvider.get());
496 frame.willDrawLayers.push_back(*it); 497 frame.willDrawLayers.push_back(*it);
497 498
498 if (it->hasContributingDelegatedRenderPasses()) { 499 if (it->hasContributingDelegatedRenderPasses()) {
499 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId(); 500 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId();
500 while (frame.renderPassesById.find(contributingRenderPassId) != frame.renderPassesById.end()) { 501 while (frame.renderPassesById.find(contributingRenderPassId) != frame.renderPassesById.end()) {
501 RenderPass* renderPass = frame.renderPassesById[contribu tingRenderPassId]; 502 RenderPass* renderPass = frame.renderPassesById[contribu tingRenderPassId];
502 503
503 AppendQuadsData appendQuadsData(renderPass->id); 504 AppendQuadsData appendQuadsData(renderPass->id);
504 appendQuadsForLayer(renderPass, *it, occlusionTracker, a ppendQuadsData); 505 appendQuadsForLayer(renderPass, *it, occlusionTracker, a ppendQuadsData);
505 506
506 contributingRenderPassId = it->nextContributingRenderPas sId(contributingRenderPassId); 507 contributingRenderPassId = it->nextContributingRenderPas sId(contributingRenderPassId);
507 } 508 }
508 } 509 }
509 510
510 appendQuadsForLayer(targetRenderPass, *it, occlusionTracker, app endQuadsData); 511 appendQuadsForLayer(targetRenderPass, *it, occlusionTracker, app endQuadsData);
511 } 512 }
512 513
(...skipping 641 matching lines...) Expand 10 before | Expand all | Expand 10 after
1154 // First find out which layer was hit from the saved list of visible layers 1155 // First find out which layer was hit from the saved list of visible layers
1155 // in the most recent frame. 1156 // in the most recent frame.
1156 LayerImpl* layerImpl = LayerTreeHostCommon::findLayerThatIsHitByPoint(device ViewportPoint, activeTree()->RenderSurfaceLayerList()); 1157 LayerImpl* layerImpl = LayerTreeHostCommon::findLayerThatIsHitByPoint(device ViewportPoint, activeTree()->RenderSurfaceLayerList());
1157 1158
1158 // Walk up the hierarchy and look for a scrollable layer. 1159 // Walk up the hierarchy and look for a scrollable layer.
1159 LayerImpl* potentiallyScrollingLayerImpl = 0; 1160 LayerImpl* potentiallyScrollingLayerImpl = 0;
1160 for (; layerImpl; layerImpl = layerImpl->parent()) { 1161 for (; layerImpl; layerImpl = layerImpl->parent()) {
1161 // The content layer can also block attempts to scroll outside the main thread. 1162 // The content layer can also block attempts to scroll outside the main thread.
1162 if (layerImpl->tryScroll(deviceViewportPoint, type) == ScrollOnMainThrea d) { 1163 if (layerImpl->tryScroll(deviceViewportPoint, type) == ScrollOnMainThrea d) {
1163 m_numMainThreadScrolls++; 1164 m_numMainThreadScrolls++;
1165 UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", true);
1164 return ScrollOnMainThread; 1166 return ScrollOnMainThread;
1165 } 1167 }
1166 1168
1167 LayerImpl* scrollLayerImpl = findScrollLayerForContentLayer(layerImpl); 1169 LayerImpl* scrollLayerImpl = findScrollLayerForContentLayer(layerImpl);
1168 if (!scrollLayerImpl) 1170 if (!scrollLayerImpl)
1169 continue; 1171 continue;
1170 1172
1171 ScrollStatus status = scrollLayerImpl->tryScroll(deviceViewportPoint, ty pe); 1173 ScrollStatus status = scrollLayerImpl->tryScroll(deviceViewportPoint, ty pe);
1172 1174
1173 // If any layer wants to divert the scroll event to the main thread, abo rt. 1175 // If any layer wants to divert the scroll event to the main thread, abo rt.
1174 if (status == ScrollOnMainThread) { 1176 if (status == ScrollOnMainThread) {
1175 m_numMainThreadScrolls++; 1177 m_numMainThreadScrolls++;
1178 UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", true);
1176 return ScrollOnMainThread; 1179 return ScrollOnMainThread;
1177 } 1180 }
1178 1181
1182 UMA_HISTOGRAM_BOOLEAN("TryScroll.SlowScroll", false);
aelias_OOO_until_Jul13 2013/01/29 22:00:08 Please put this one right before ScrollStarted sin
clholgat 2013/01/31 18:55:50 Done.
1179 if (status == ScrollStarted && !potentiallyScrollingLayerImpl) 1183 if (status == ScrollStarted && !potentiallyScrollingLayerImpl)
1180 potentiallyScrollingLayerImpl = scrollLayerImpl; 1184 potentiallyScrollingLayerImpl = scrollLayerImpl;
1181 } 1185 }
1182 1186
1183 if (potentiallyScrollingLayerImpl) { 1187 if (potentiallyScrollingLayerImpl) {
1184 m_activeTree->set_currently_scrolling_layer(potentiallyScrollingLayerImp l); 1188 m_activeTree->set_currently_scrolling_layer(potentiallyScrollingLayerImp l);
1185 // Gesture events need to be transformed from viewport coordinates to lo cal layer coordinates 1189 // Gesture events need to be transformed from viewport coordinates to lo cal layer coordinates
1186 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel 1190 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel
1187 // events are already in local layer coordinates so we can just apply th em directly. 1191 // events are already in local layer coordinates so we can just apply th em directly.
1188 m_scrollDeltaIsInViewportSpace = (type == Gesture); 1192 m_scrollDeltaIsInViewportSpace = (type == Gesture);
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
1693 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); 1697 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer());
1694 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); 1698 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>();
1695 } 1699 }
1696 1700
1697 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) 1701 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime)
1698 { 1702 {
1699 m_paintTimeCounter->SavePaintTime(totalPaintTime); 1703 m_paintTimeCounter->SavePaintTime(totalPaintTime);
1700 } 1704 }
1701 1705
1702 } // namespace cc 1706 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698