Chromium Code Reviews| Index: Source/core/inspector/InspectorLayerTreeAgent.cpp |
| diff --git a/Source/core/inspector/InspectorLayerTreeAgent.cpp b/Source/core/inspector/InspectorLayerTreeAgent.cpp |
| index 55762f82a85252a9ec973787903f0917f7d238f0..638866a6afbe2a4f05db1f9ec384aea1df280b1a 100644 |
| --- a/Source/core/inspector/InspectorLayerTreeAgent.cpp |
| +++ b/Source/core/inspector/InspectorLayerTreeAgent.cpp |
| @@ -110,6 +110,41 @@ static PassRefPtr<TypeBuilder::LayerTree::Layer> buildObjectForLayer(GraphicsLay |
| return layerObject; |
| } |
| +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, |
|
pfeldman
2014/02/26 11:49:40
We typically call these buildObjectFor
malch
2014/02/27 13:30:53
Done.
|
| + 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); |
| + } |
| +} |
| + |
| InspectorLayerTreeAgent::InspectorLayerTreeAgent(InspectorDOMAgent* domAgent, Page* page) |
| : InspectorBaseAgent<InspectorLayerTreeAgent>("LayerTree") |
| , m_frontend(0) |
| @@ -154,7 +189,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) |
| @@ -171,16 +211,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) |
| @@ -202,16 +242,18 @@ void InspectorLayerTreeAgent::buildLayerIdToNodeIdMap(RenderLayer* root, LayerId |
| } |
| } |
| -void InspectorLayerTreeAgent::gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeIdMap, RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> >& layers) |
| +void InspectorLayerTreeAgent::gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeIdMap, |
| + TypeBuilder::Array<TypeBuilder::LayerTree::Layer>& layers, TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects) |
| { |
| int layerId = root->platformLayer()->id(); |
| if (m_pageOverlayLayerIds.find(layerId) != WTF::kNotFound) |
| return; |
| - 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); |
| } |
| int InspectorLayerTreeAgent::idForNode(Node* node) |