void PaintLayerCompositor::attachRootLayer(RootLayerAttachment attachment) { if (!m_rootContentLayer) return; // In Slimming Paint v2, PaintArtifactCompositor is responsible for the root // layer. if (RuntimeEnabledFeatures::slimmingPaintV2Enabled()) return; switch (attachment) { case RootLayerUnattached: ASSERT_NOT_REACHED(); break; case RootLayerAttachedViaChromeClient: { LocalFrame& frame = m_layoutView.frameView()->frame(); Page* page = frame.page(); if (!page) return; page->chromeClient().attachRootGraphicsLayer(rootGraphicsLayer(), &frame); break; } case RootLayerAttachedViaEnclosingFrame: { HTMLFrameOwnerElement* ownerElement = m_layoutView.document().ownerElement(); ASSERT(ownerElement); // The layer will get hooked up via CompositedLayerMapping::updateGraphicsLayerConfiguration() // for the frame's layoutObject in the parent document. ownerElement->setNeedsCompositingUpdate(); break; } } m_rootLayerAttachment = attachment; }
PassRefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > InspectorLayerTreeAgent::buildLayerTree() { PaintLayerCompositor* compositor = paintLayerCompositor(); if (!compositor || !compositor->inCompositingMode()) return nullptr; LayerIdToNodeIdMap layerIdToNodeIdMap; RefPtr<TypeBuilder::Array<TypeBuilder::LayerTree::Layer> > layers = TypeBuilder::Array<TypeBuilder::LayerTree::Layer>::create(); buildLayerIdToNodeIdMap(compositor->rootLayer(), layerIdToNodeIdMap); gatherGraphicsLayers(rootGraphicsLayer(), layerIdToNodeIdMap, layers); return layers.release(); }
String PaintLayerCompositor::layerTreeAsText(LayerTreeFlags flags) { ASSERT(lifecycle().state() >= DocumentLifecycle::PaintInvalidationClean || m_layoutView.frameView()->shouldThrottleRendering()); if (!m_rootContentLayer) return String(); // We skip dumping the scroll and clip layers to keep layerTreeAsText output // similar between platforms (unless we explicitly request dumping from the // root. GraphicsLayer* rootLayer = m_rootContentLayer.get(); if (flags & LayerTreeIncludesRootLayer) rootLayer = rootGraphicsLayer(); return rootLayer->layerTreeAsText(flags); }
GraphicsLayer* InspectorLayerTreeAgent::layerById(ErrorString* errorString, const String& layerId) { bool ok; int id = layerId.toInt(&ok); if (!ok) { *errorString = "Invalid layer id"; return nullptr; } PaintLayerCompositor* compositor = paintLayerCompositor(); if (!compositor) { *errorString = "Not in compositing mode"; return nullptr; } GraphicsLayer* result = findLayerById(rootGraphicsLayer(), id); if (!result) *errorString = "No layer matching given id found"; return result; }
void PaintLayerCompositor::resetTrackedPaintInvalidationRects() { if (GraphicsLayer* rootLayer = rootGraphicsLayer()) resetTrackedPaintInvalidationRectsRecursive(rootLayer); }