| 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 |