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

Unified 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 side-by-side diff with in-line comments
Download patch
Index: Source/core/inspector/InspectorLayerTreeAgent.cpp
diff --git a/Source/core/inspector/InspectorLayerTreeAgent.cpp b/Source/core/inspector/InspectorLayerTreeAgent.cpp
index 6112511c155c9c391cb45ff38b25dfc29146aa53..a644fe33d7a0b090a76043b721cd66859b43c19b 100644
--- a/Source/core/inspector/InspectorLayerTreeAgent.cpp
+++ b/Source/core/inspector/InspectorLayerTreeAgent.cpp
@@ -110,14 +110,58 @@ static PassRefPtr<TypeBuilder::LayerTree::Layer> buildObjectForLayer(GraphicsLay
return layerObject;
}
-void gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeIdMap, RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> >& layers)
+static void addRegionObjects(const blink::WebVector<blink::WebRect>& regions,
+ TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects,
+ const TypeBuilder::LayerTree::ScrollRect::Type::Enum& type,
+ const TypeBuilder::LayerTree::LayerId& layerId)
+{
+ for (size_t i = 0; i < regions.size(); ++i) {
+ RefPtr<TypeBuilder::LayerTree::ScrollRect> regionObject = TypeBuilder::LayerTree::ScrollRect::create()
+ .setLayerId(layerId)
+ .setX(regions[i].x)
+ .setY(regions[i].y)
+ .setHeight(regions[i].height)
+ .setWidth(regions[i].width)
+ .setType(type);
+ scrollRects.addItem(regionObject);
+ }
+}
+
+
+static void addScrollRectsForLayer(GraphicsLayer* graphicsLayer,
+ TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects)
+{
+ blink::WebLayer* webLayer = graphicsLayer->platformLayer();
+ addRegionObjects(webLayer->nonFastScrollableRegion(),
+ scrollRects,
+ TypeBuilder::LayerTree::ScrollRect::Type::RepaintsOnScroll,
+ idForLayer(graphicsLayer));
+ addRegionObjects(webLayer->touchEventHandlerRegion(),
+ scrollRects,
+ TypeBuilder::LayerTree::ScrollRect::Type::TouchEventHandler,
+ idForLayer(graphicsLayer));
+ if (webLayer->haveWheelEventHandlers()) {
+ RefPtr<TypeBuilder::LayerTree::ScrollRect> regionObject = TypeBuilder::LayerTree::ScrollRect::create()
+ .setLayerId(idForLayer(graphicsLayer))
+ .setX(webLayer->position().x)
+ .setY(webLayer->position().y)
+ .setHeight(webLayer->bounds().height)
+ .setWidth(webLayer->bounds().width)
+ .setType(TypeBuilder::LayerTree::ScrollRect::Type::WheelEventHandler);
+ scrollRects.addItem(regionObject);
+ }
+}
+
+void gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeIdMap,
+ TypeBuilder::Array<TypeBuilder::LayerTree::Layer>& layers, TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects)
{
int layerId = root->platformLayer()->id();
- layers->addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId)));
+ layers.addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId)));
+ addScrollRectsForLayer(root, scrollRects);
if (GraphicsLayer* replica = root->replicaLayer())
- gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers);
+ gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers, scrollRects);
for (size_t i = 0, size = root->children().size(); i < size; ++i)
- gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers);
+ gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers, scrollRects);
}
InspectorLayerTreeAgent::InspectorLayerTreeAgent(InspectorDOMAgent* domAgent, Page* page)
@@ -164,7 +208,12 @@ void InspectorLayerTreeAgent::disable(ErrorString*)
void InspectorLayerTreeAgent::layerTreeDidChange()
{
- m_frontend->layerTreeDidChange(buildLayerTree());
+ RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuilder::Array<TypeBuilder::LayerTree::Layer>::create();
+ RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect> > scrollRects = TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>::create();
+ if (buildLayerTree(*layers, *scrollRects))
+ m_frontend->layerTreeDidChange(layers, scrollRects);
+ else
+ m_frontend->layerTreeDidChange(nullptr, nullptr);
}
void InspectorLayerTreeAgent::didPaint(RenderObject*, const GraphicsLayer* graphicsLayer, GraphicsContext*, const LayoutRect& rect)
@@ -181,16 +230,16 @@ void InspectorLayerTreeAgent::didPaint(RenderObject*, const GraphicsLayer* graph
m_frontend->layerPainted(idForLayer(graphicsLayer), domRect.release());
}
-PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > InspectorLayerTreeAgent::buildLayerTree()
+bool InspectorLayerTreeAgent::buildLayerTree(TypeBuilder::Array<TypeBuilder::LayerTree::Layer>& layers,
+ TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects)
{
RenderLayerCompositor* compositor = renderLayerCompositor();
if (!compositor || !compositor->inCompositingMode())
- return nullptr;
+ return false;
LayerIdToNodeIdMap layerIdToNodeIdMap;
- RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuilder::Array<TypeBuilder::LayerTree::Layer>::create();
buildLayerIdToNodeIdMap(compositor->rootRenderLayer(), layerIdToNodeIdMap);
- gatherGraphicsLayers(compositor->rootGraphicsLayer(), layerIdToNodeIdMap, layers);
- return layers.release();
+ gatherGraphicsLayers(compositor->rootGraphicsLayer(), layerIdToNodeIdMap, layers, scrollRects);
+ return true;
}
void InspectorLayerTreeAgent::buildLayerIdToNodeIdMap(RenderLayer* root, LayerIdToNodeIdMap& layerIdToNodeIdMap)

Powered by Google App Engine
This is Rietveld 408576698