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

Side by Side Diff: Source/core/inspector/InspectorLayerTreeAgent.cpp

Issue 166273018: Added showing slow scroll rectangles in Layers panel. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Added test. Created 6 years, 10 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
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Apple Inc. All rights reserved. 2 * Copyright (C) 2012 Apple Inc. All rights reserved.
3 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * Copyright (C) 2013 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 transformArray->addItem(flattenedMatrix[i]); 103 transformArray->addItem(flattenedMatrix[i]);
104 layerObject->setTransform(transformArray); 104 layerObject->setTransform(transformArray);
105 const FloatPoint3D& anchor = graphicsLayer->anchorPoint(); 105 const FloatPoint3D& anchor = graphicsLayer->anchorPoint();
106 layerObject->setAnchorX(anchor.x()); 106 layerObject->setAnchorX(anchor.x());
107 layerObject->setAnchorY(anchor.y()); 107 layerObject->setAnchorY(anchor.y());
108 layerObject->setAnchorZ(anchor.z()); 108 layerObject->setAnchorZ(anchor.z());
109 } 109 }
110 return layerObject; 110 return layerObject;
111 } 111 }
112 112
113 void gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeI dMap, RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> >& layers) 113 static void addRegionObjects(const blink::WebVector<blink::WebRect>& regions,
114 TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects,
115 const TypeBuilder::LayerTree::ScrollRect::Type::Enum& type,
116 const TypeBuilder::LayerTree::LayerId& layerId)
117 {
118 for (size_t i = 0; i < regions.size(); ++i) {
119 RefPtr<TypeBuilder::LayerTree::ScrollRect> regionObject = TypeBuilder::L ayerTree::ScrollRect::create()
120 .setLayerId(layerId)
121 .setX(regions[i].x)
122 .setY(regions[i].y)
123 .setHeight(regions[i].height)
124 .setWidth(regions[i].width)
125 .setType(type);
126 scrollRects.addItem(regionObject);
127 }
128 }
129
130
131 static void addScrollRectsForLayer(GraphicsLayer* graphicsLayer,
132 TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects)
133 {
134 blink::WebLayer* webLayer = graphicsLayer->platformLayer();
135 addRegionObjects(webLayer->nonFastScrollableRegion(),
136 scrollRects,
137 TypeBuilder::LayerTree::ScrollRect::Type::RepaintsOnScroll,
138 idForLayer(graphicsLayer));
139 addRegionObjects(webLayer->touchEventHandlerRegion(),
140 scrollRects,
141 TypeBuilder::LayerTree::ScrollRect::Type::TouchEventHandler,
142 idForLayer(graphicsLayer));
143 if (webLayer->haveWheelEventHandlers()) {
144 RefPtr<TypeBuilder::LayerTree::ScrollRect> regionObject = TypeBuilder::L ayerTree::ScrollRect::create()
145 .setLayerId(idForLayer(graphicsLayer))
146 .setX(webLayer->position().x)
147 .setY(webLayer->position().y)
148 .setHeight(webLayer->bounds().height)
149 .setWidth(webLayer->bounds().width)
150 .setType(TypeBuilder::LayerTree::ScrollRect::Type::WheelEventHandler );
151 scrollRects.addItem(regionObject);
152 }
153 }
154
155 void gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeI dMap,
156 TypeBuilder::Array<TypeBuilder::LayerTree::Layer>& layers, TypeBuilder::Arra y<TypeBuilder::LayerTree::ScrollRect>& scrollRects)
114 { 157 {
115 int layerId = root->platformLayer()->id(); 158 int layerId = root->platformLayer()->id();
116 layers->addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId))); 159 layers.addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId)));
160 addScrollRectsForLayer(root, scrollRects);
117 if (GraphicsLayer* replica = root->replicaLayer()) 161 if (GraphicsLayer* replica = root->replicaLayer())
118 gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers); 162 gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers, scrollRects);
119 for (size_t i = 0, size = root->children().size(); i < size; ++i) 163 for (size_t i = 0, size = root->children().size(); i < size; ++i)
120 gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers); 164 gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers, sc rollRects);
121 } 165 }
122 166
123 InspectorLayerTreeAgent::InspectorLayerTreeAgent(InspectorDOMAgent* domAgent, Pa ge* page) 167 InspectorLayerTreeAgent::InspectorLayerTreeAgent(InspectorDOMAgent* domAgent, Pa ge* page)
124 : InspectorBaseAgent<InspectorLayerTreeAgent>("LayerTree") 168 : InspectorBaseAgent<InspectorLayerTreeAgent>("LayerTree")
125 , m_frontend(0) 169 , m_frontend(0)
126 , m_page(page) 170 , m_page(page)
127 , m_domAgent(domAgent) 171 , m_domAgent(domAgent)
128 { 172 {
129 } 173 }
130 174
(...skipping 26 matching lines...) Expand all
157 } 201 }
158 202
159 void InspectorLayerTreeAgent::disable(ErrorString*) 203 void InspectorLayerTreeAgent::disable(ErrorString*)
160 { 204 {
161 m_instrumentingAgents->setInspectorLayerTreeAgent(0); 205 m_instrumentingAgents->setInspectorLayerTreeAgent(0);
162 m_snapshotById.clear(); 206 m_snapshotById.clear();
163 } 207 }
164 208
165 void InspectorLayerTreeAgent::layerTreeDidChange() 209 void InspectorLayerTreeAgent::layerTreeDidChange()
166 { 210 {
167 m_frontend->layerTreeDidChange(buildLayerTree()); 211 RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuil der::Array<TypeBuilder::LayerTree::Layer>::create();
212 RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect> > scrollRects = TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>::create();
213 if (buildLayerTree(*layers, *scrollRects))
214 m_frontend->layerTreeDidChange(layers, scrollRects);
215 else
216 m_frontend->layerTreeDidChange(nullptr, nullptr);
168 } 217 }
169 218
170 void InspectorLayerTreeAgent::didPaint(RenderObject*, const GraphicsLayer* graph icsLayer, GraphicsContext*, const LayoutRect& rect) 219 void InspectorLayerTreeAgent::didPaint(RenderObject*, const GraphicsLayer* graph icsLayer, GraphicsContext*, const LayoutRect& rect)
171 { 220 {
172 // Should only happen for FrameView paints when compositing is off. Consider different instrumentation method for that. 221 // Should only happen for FrameView paints when compositing is off. Consider different instrumentation method for that.
173 if (!graphicsLayer) 222 if (!graphicsLayer)
174 return; 223 return;
175 224
176 RefPtr<TypeBuilder::DOM::Rect> domRect = TypeBuilder::DOM::Rect::create() 225 RefPtr<TypeBuilder::DOM::Rect> domRect = TypeBuilder::DOM::Rect::create()
177 .setX(rect.x()) 226 .setX(rect.x())
178 .setY(rect.y()) 227 .setY(rect.y())
179 .setWidth(rect.width()) 228 .setWidth(rect.width())
180 .setHeight(rect.height()); 229 .setHeight(rect.height());
181 m_frontend->layerPainted(idForLayer(graphicsLayer), domRect.release()); 230 m_frontend->layerPainted(idForLayer(graphicsLayer), domRect.release());
182 } 231 }
183 232
184 PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > InspectorLayerTre eAgent::buildLayerTree() 233 bool InspectorLayerTreeAgent::buildLayerTree(TypeBuilder::Array<TypeBuilder::Lay erTree::Layer>& layers,
234 TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects)
185 { 235 {
186 RenderLayerCompositor* compositor = renderLayerCompositor(); 236 RenderLayerCompositor* compositor = renderLayerCompositor();
187 if (!compositor || !compositor->inCompositingMode()) 237 if (!compositor || !compositor->inCompositingMode())
188 return nullptr; 238 return false;
189 LayerIdToNodeIdMap layerIdToNodeIdMap; 239 LayerIdToNodeIdMap layerIdToNodeIdMap;
190 RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuil der::Array<TypeBuilder::LayerTree::Layer>::create();
191 buildLayerIdToNodeIdMap(compositor->rootRenderLayer(), layerIdToNodeIdMap); 240 buildLayerIdToNodeIdMap(compositor->rootRenderLayer(), layerIdToNodeIdMap);
192 gatherGraphicsLayers(compositor->rootGraphicsLayer(), layerIdToNodeIdMap, la yers); 241 gatherGraphicsLayers(compositor->rootGraphicsLayer(), layerIdToNodeIdMap, la yers, scrollRects);
193 return layers.release(); 242 return true;
194 } 243 }
195 244
196 void InspectorLayerTreeAgent::buildLayerIdToNodeIdMap(RenderLayer* root, LayerId ToNodeIdMap& layerIdToNodeIdMap) 245 void InspectorLayerTreeAgent::buildLayerIdToNodeIdMap(RenderLayer* root, LayerId ToNodeIdMap& layerIdToNodeIdMap)
197 { 246 {
198 if (root->hasCompositedLayerMapping()) { 247 if (root->hasCompositedLayerMapping()) {
199 if (Node* node = root->renderer()->generatingNode()) { 248 if (Node* node = root->renderer()->generatingNode()) {
200 GraphicsLayer* graphicsLayer = root->compositedLayerMapping()->child ForSuperlayers(); 249 GraphicsLayer* graphicsLayer = root->compositedLayerMapping()->child ForSuperlayers();
201 layerIdToNodeIdMap.set(graphicsLayer->platformLayer()->id(), idForNo de(node)); 250 layerIdToNodeIdMap.set(graphicsLayer->platformLayer()->id(), idForNo de(node));
202 } 251 }
203 } 252 }
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 for (size_t i = 0; i < timings->size(); ++i) { 427 for (size_t i = 0; i < timings->size(); ++i) {
379 const Vector<double>& row = (*timings)[i]; 428 const Vector<double>& row = (*timings)[i];
380 RefPtr<TypeBuilder::Array<double> > outRow = TypeBuilder::Array<double>: :create(); 429 RefPtr<TypeBuilder::Array<double> > outRow = TypeBuilder::Array<double>: :create();
381 for (size_t j = 1; j < row.size(); ++j) 430 for (size_t j = 1; j < row.size(); ++j)
382 outRow->addItem(row[j] - row[j - 1]); 431 outRow->addItem(row[j] - row[j - 1]);
383 outTimings->addItem(outRow.release()); 432 outTimings->addItem(outRow.release());
384 } 433 }
385 } 434 }
386 435
387 } // namespace WebCore 436 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698