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 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 Loading... |
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 Loading... |
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 |
OLD | NEW |