PassRefPtr<TypeBuilder::LayerTree::Layer> InspectorLayerTreeAgent::buildObjectForLayer(RenderLayer* renderLayer) { bool isComposited = renderLayer->isComposited(); // Basic set of properties. RefPtr<TypeBuilder::LayerTree::Layer> layerObject = TypeBuilder::LayerTree::Layer::create() .setLayerId(bind(renderLayer)) .setBounds(buildObjectForIntRect(enclosingIntRect(renderLayer->localBoundingBox()))) .setIsComposited(isComposited); // Optional properties for composited layers only. if (isComposited) { RenderLayerBacking* backing = renderLayer->backing(); layerObject->setMemory(backing->backingStoreMemoryEstimate()); layerObject->setCompositedBounds(buildObjectForIntRect(backing->compositedBounds())); layerObject->setPaintCount(backing->graphicsLayer()->repaintCount()); } // Process children layers. RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > childrenArray = TypeBuilder::Array<TypeBuilder::LayerTree::Layer>::create(); renderLayer->updateLayerListsIfNeeded(); // Check if we have a reflection layer. if (renderLayer->reflectionLayer()) childrenArray->addItem(buildObjectForLayer(renderLayer->reflectionLayer())); if (renderLayer->isStackingContext()) { if (Vector<RenderLayer*>* negZOrderList = renderLayer->negZOrderList()) { size_t listSize = negZOrderList->size(); for (size_t i = 0; i < listSize; ++i) childrenArray->addItem(buildObjectForLayer(negZOrderList->at(i))); } } if (Vector<RenderLayer*>* normalFlowList = renderLayer->normalFlowList()) { size_t listSize = normalFlowList->size(); for (size_t i = 0; i < listSize; ++i) childrenArray->addItem(buildObjectForLayer(normalFlowList->at(i))); } if (renderLayer->isStackingContext()) { if (Vector<RenderLayer*>* posZOrderList = renderLayer->posZOrderList()) { size_t listSize = posZOrderList->size(); for (size_t i = 0; i < listSize; ++i) childrenArray->addItem(buildObjectForLayer(posZOrderList->at(i))); } } layerObject->setChildLayers(childrenArray); return layerObject; }
void InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy(ErrorString* errorString, RenderLayer* renderLayer, RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> >& layers) { if (renderLayer->isComposited()) layers->addItem(buildObjectForLayer(errorString, renderLayer)); for (renderLayer = renderLayer->firstChild(); renderLayer; renderLayer = renderLayer->nextSibling()) gatherLayersUsingRenderLayerHierarchy(errorString, renderLayer, layers); }
void gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeIdMap, RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> >& layers) { int layerId = root->platformLayer()->id(); layers->addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId))); if (GraphicsLayer* replica = root->replicaLayer()) gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers); for (size_t i = 0, size = root->children().size(); i < size; ++i) gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers); }
void InspectorLayerTreeAgent::gatherGraphicsLayers(GraphicsLayer* root, HashMap<int, int>& layerIdToNodeIdMap, RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> >& layers) { int layerId = root->platformLayer()->id(); if (m_pageOverlayLayerIds.find(layerId) != WTF::kNotFound) return; layers->addItem(buildObjectForLayer(root, layerIdToNodeIdMap.get(layerId))); if (GraphicsLayer* replica = root->replicaLayer()) gatherGraphicsLayers(replica, layerIdToNodeIdMap, layers); for (size_t i = 0, size = root->children().size(); i < size; ++i) gatherGraphicsLayers(root->children()[i], layerIdToNodeIdMap, layers); }
PassRefPtr<TypeBuilder::LayerTree::Layer> InspectorLayerTreeAgent::buildObjectForRootLayer() { return buildObjectForLayer(m_inspectedPage->mainFrame()->contentRenderer()->compositor()->rootRenderLayer()); }