OLD | NEW |
---|---|
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 Loading... | |
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 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 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.
| |
131 TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects) | |
132 { | |
133 blink::WebLayer* webLayer = graphicsLayer->platformLayer(); | |
134 addRegionObjects(webLayer->nonFastScrollableRegion(), scrollRects, TypeBuild er::LayerTree::ScrollRect::Type::RepaintsOnScroll, idForLayer(graphicsLayer)); | |
135 addRegionObjects(webLayer->touchEventHandlerRegion(), scrollRects, TypeBuild er::LayerTree::ScrollRect::Type::TouchEventHandler, idForLayer(graphicsLayer)); | |
136 if (webLayer->haveWheelEventHandlers()) { | |
137 RefPtr<TypeBuilder::LayerTree::ScrollRect> regionObject = TypeBuilder::L ayerTree::ScrollRect::create() | |
138 .setLayerId(idForLayer(graphicsLayer)) | |
139 .setX(webLayer->position().x) | |
140 .setY(webLayer->position().y) | |
141 .setHeight(webLayer->bounds().height) | |
142 .setWidth(webLayer->bounds().width) | |
143 .setType(TypeBuilder::LayerTree::ScrollRect::Type::WheelEventHandler ); | |
144 scrollRects.addItem(regionObject); | |
145 } | |
146 } | |
147 | |
113 InspectorLayerTreeAgent::InspectorLayerTreeAgent(InspectorDOMAgent* domAgent, Pa ge* page) | 148 InspectorLayerTreeAgent::InspectorLayerTreeAgent(InspectorDOMAgent* domAgent, Pa ge* page) |
114 : InspectorBaseAgent<InspectorLayerTreeAgent>("LayerTree") | 149 : InspectorBaseAgent<InspectorLayerTreeAgent>("LayerTree") |
115 , m_frontend(0) | 150 , m_frontend(0) |
116 , m_page(page) | 151 , m_page(page) |
117 , m_domAgent(domAgent) | 152 , m_domAgent(domAgent) |
118 { | 153 { |
119 } | 154 } |
120 | 155 |
121 InspectorLayerTreeAgent::~InspectorLayerTreeAgent() | 156 InspectorLayerTreeAgent::~InspectorLayerTreeAgent() |
122 { | 157 { |
(...skipping 24 matching lines...) Expand all Loading... | |
147 } | 182 } |
148 | 183 |
149 void InspectorLayerTreeAgent::disable(ErrorString*) | 184 void InspectorLayerTreeAgent::disable(ErrorString*) |
150 { | 185 { |
151 m_instrumentingAgents->setInspectorLayerTreeAgent(0); | 186 m_instrumentingAgents->setInspectorLayerTreeAgent(0); |
152 m_snapshotById.clear(); | 187 m_snapshotById.clear(); |
153 } | 188 } |
154 | 189 |
155 void InspectorLayerTreeAgent::layerTreeDidChange() | 190 void InspectorLayerTreeAgent::layerTreeDidChange() |
156 { | 191 { |
157 m_frontend->layerTreeDidChange(buildLayerTree()); | 192 RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuil der::Array<TypeBuilder::LayerTree::Layer>::create(); |
193 RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect> > scrollRects = TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>::create(); | |
194 if (buildLayerTree(*layers, *scrollRects)) | |
195 m_frontend->layerTreeDidChange(layers, scrollRects); | |
196 else | |
197 m_frontend->layerTreeDidChange(nullptr, nullptr); | |
158 } | 198 } |
159 | 199 |
160 void InspectorLayerTreeAgent::didPaint(RenderObject*, const GraphicsLayer* graph icsLayer, GraphicsContext*, const LayoutRect& rect) | 200 void InspectorLayerTreeAgent::didPaint(RenderObject*, const GraphicsLayer* graph icsLayer, GraphicsContext*, const LayoutRect& rect) |
161 { | 201 { |
162 // Should only happen for FrameView paints when compositing is off. Consider different instrumentation method for that. | 202 // Should only happen for FrameView paints when compositing is off. Consider different instrumentation method for that. |
163 if (!graphicsLayer) | 203 if (!graphicsLayer) |
164 return; | 204 return; |
165 | 205 |
166 RefPtr<TypeBuilder::DOM::Rect> domRect = TypeBuilder::DOM::Rect::create() | 206 RefPtr<TypeBuilder::DOM::Rect> domRect = TypeBuilder::DOM::Rect::create() |
167 .setX(rect.x()) | 207 .setX(rect.x()) |
168 .setY(rect.y()) | 208 .setY(rect.y()) |
169 .setWidth(rect.width()) | 209 .setWidth(rect.width()) |
170 .setHeight(rect.height()); | 210 .setHeight(rect.height()); |
171 m_frontend->layerPainted(idForLayer(graphicsLayer), domRect.release()); | 211 m_frontend->layerPainted(idForLayer(graphicsLayer), domRect.release()); |
172 } | 212 } |
173 | 213 |
174 PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > InspectorLayerTre eAgent::buildLayerTree() | 214 bool InspectorLayerTreeAgent::buildLayerTree(TypeBuilder::Array<TypeBuilder::Lay erTree::Layer>& layers, |
215 TypeBuilder::Array<TypeBuilder::LayerTree::ScrollRect>& scrollRects) | |
175 { | 216 { |
176 RenderLayerCompositor* compositor = renderLayerCompositor(); | 217 RenderLayerCompositor* compositor = renderLayerCompositor(); |
177 if (!compositor || !compositor->inCompositingMode()) | 218 if (!compositor || !compositor->inCompositingMode()) |
178 return nullptr; | 219 return false; |
179 LayerIdToNodeIdMap layerIdToNodeIdMap; | 220 LayerIdToNodeIdMap layerIdToNodeIdMap; |
180 RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuil der::Array<TypeBuilder::LayerTree::Layer>::create(); | |
181 buildLayerIdToNodeIdMap(compositor->rootRenderLayer(), layerIdToNodeIdMap); | 221 buildLayerIdToNodeIdMap(compositor->rootRenderLayer(), layerIdToNodeIdMap); |
182 gatherGraphicsLayers(compositor->rootGraphicsLayer(), layerIdToNodeIdMap, la yers); | 222 gatherGraphicsLayers(compositor->rootGraphicsLayer(), layerIdToNodeIdMap, la yers, scrollRects); |
183 return layers.release(); | 223 return true; |
184 } | 224 } |
185 | 225 |
186 void InspectorLayerTreeAgent::buildLayerIdToNodeIdMap(RenderLayer* root, LayerId ToNodeIdMap& layerIdToNodeIdMap) | 226 void InspectorLayerTreeAgent::buildLayerIdToNodeIdMap(RenderLayer* root, LayerId ToNodeIdMap& layerIdToNodeIdMap) |
187 { | 227 { |
188 if (root->hasCompositedLayerMapping()) { | 228 if (root->hasCompositedLayerMapping()) { |
189 if (Node* node = root->renderer()->generatingNode()) { | 229 if (Node* node = root->renderer()->generatingNode()) { |
190 GraphicsLayer* graphicsLayer = root->compositedLayerMapping()->child ForSuperlayers(); | 230 GraphicsLayer* graphicsLayer = root->compositedLayerMapping()->child ForSuperlayers(); |
191 layerIdToNodeIdMap.set(graphicsLayer->platformLayer()->id(), idForNo de(node)); | 231 layerIdToNodeIdMap.set(graphicsLayer->platformLayer()->id(), idForNo de(node)); |
192 } | 232 } |
193 } | 233 } |
194 for (RenderLayer* child = root->firstChild(); child; child = child->nextSibl ing()) | 234 for (RenderLayer* child = root->firstChild(); child; child = child->nextSibl ing()) |
195 buildLayerIdToNodeIdMap(child, layerIdToNodeIdMap); | 235 buildLayerIdToNodeIdMap(child, layerIdToNodeIdMap); |
196 if (!root->renderer()->isRenderIFrame()) | 236 if (!root->renderer()->isRenderIFrame()) |
197 return; | 237 return; |
198 FrameView* childFrameView = toFrameView(toRenderWidget(root->renderer())->wi dget()); | 238 FrameView* childFrameView = toFrameView(toRenderWidget(root->renderer())->wi dget()); |
199 if (RenderView* childRenderView = childFrameView->renderView()) { | 239 if (RenderView* childRenderView = childFrameView->renderView()) { |
200 if (RenderLayerCompositor* childCompositor = childRenderView->compositor ()) | 240 if (RenderLayerCompositor* childCompositor = childRenderView->compositor ()) |
201 buildLayerIdToNodeIdMap(childCompositor->rootRenderLayer(), layerIdT oNodeIdMap); | 241 buildLayerIdToNodeIdMap(childCompositor->rootRenderLayer(), layerIdT oNodeIdMap); |
202 } | 242 } |
203 } | 243 } |
204 | 244 |
205 void InspectorLayerTreeAgent::gatherGraphicsLayers(GraphicsLayer* root, HashMap< int, int>& layerIdToNodeIdMap, RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree: :Layer> >& layers) | 245 void InspectorLayerTreeAgent::gatherGraphicsLayers(GraphicsLayer* root, HashMap< int, int>& layerIdToNodeIdMap, |
246 TypeBuilder::Array<TypeBuilder::LayerTree::Layer>& layers, TypeBuilder::Arra y<TypeBuilder::LayerTree::ScrollRect>& scrollRects) | |
206 { | 247 { |
207 int layerId = root->platformLayer()->id(); | 248 int layerId = root->platformLayer()->id(); |
208 if (m_pageOverlayLayerIds.find(layerId) != WTF::kNotFound) | 249 if (m_pageOverlayLayerIds.find(layerId) != WTF::kNotFound) |
209 return; | 250 return; |
210 layers->addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId))); | 251 layers.addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId))); |
252 addScrollRectsForLayer(root, scrollRects); | |
211 if (GraphicsLayer* replica = root->replicaLayer()) | 253 if (GraphicsLayer* replica = root->replicaLayer()) |
212 gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers); | 254 gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers, scrollRects); |
213 for (size_t i = 0, size = root->children().size(); i < size; ++i) | 255 for (size_t i = 0, size = root->children().size(); i < size; ++i) |
214 gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers); | 256 gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers, sc rollRects); |
215 } | 257 } |
216 | 258 |
217 int InspectorLayerTreeAgent::idForNode(Node* node) | 259 int InspectorLayerTreeAgent::idForNode(Node* node) |
218 { | 260 { |
219 int nodeId = m_domAgent->boundNodeId(node); | 261 int nodeId = m_domAgent->boundNodeId(node); |
220 if (!nodeId) { | 262 if (!nodeId) { |
221 ErrorString ignoredError; | 263 ErrorString ignoredError; |
222 nodeId = m_domAgent->pushNodeToFrontend(&ignoredError, m_domAgent->bound NodeId(&node->document()), node); | 264 nodeId = m_domAgent->pushNodeToFrontend(&ignoredError, m_domAgent->bound NodeId(&node->document()), node); |
223 } | 265 } |
224 return nodeId; | 266 return nodeId; |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
353 void InspectorLayerTreeAgent::didRemovePageOverlay(const GraphicsLayer* layer) | 395 void InspectorLayerTreeAgent::didRemovePageOverlay(const GraphicsLayer* layer) |
354 { | 396 { |
355 size_t index = m_pageOverlayLayerIds.find(layer->platformLayer()->id()); | 397 size_t index = m_pageOverlayLayerIds.find(layer->platformLayer()->id()); |
356 if (index == WTF::kNotFound) | 398 if (index == WTF::kNotFound) |
357 return; | 399 return; |
358 m_pageOverlayLayerIds.remove(index); | 400 m_pageOverlayLayerIds.remove(index); |
359 } | 401 } |
360 | 402 |
361 | 403 |
362 } // namespace WebCore | 404 } // namespace WebCore |
OLD | NEW |