diff options
Diffstat (limited to 'Source/WebCore/inspector/InspectorLayerTreeAgent.cpp')
-rw-r--r-- | Source/WebCore/inspector/InspectorLayerTreeAgent.cpp | 113 |
1 files changed, 56 insertions, 57 deletions
diff --git a/Source/WebCore/inspector/InspectorLayerTreeAgent.cpp b/Source/WebCore/inspector/InspectorLayerTreeAgent.cpp index 086e3c80c..d96e04ea3 100644 --- a/Source/WebCore/inspector/InspectorLayerTreeAgent.cpp +++ b/Source/WebCore/inspector/InspectorLayerTreeAgent.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012 Apple Inc. All rights reserved. + * Copyright (C) 2012, 2015 Apple Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are @@ -29,29 +29,27 @@ */ #include "config.h" - -#if USE(ACCELERATED_COMPOSITING) -#if ENABLE(INSPECTOR) - #include "InspectorLayerTreeAgent.h" -#include "IdentifiersFactory.h" #include "InspectorDOMAgent.h" -#include "InspectorWebFrontendDispatchers.h" #include "InstrumentingAgents.h" #include "IntRect.h" #include "PseudoElement.h" +#include "RenderChildIterator.h" #include "RenderLayer.h" #include "RenderLayerBacking.h" #include "RenderLayerCompositor.h" #include "RenderView.h" +#include <inspector/IdentifiersFactory.h> using namespace Inspector; namespace WebCore { -InspectorLayerTreeAgent::InspectorLayerTreeAgent(InstrumentingAgents* instrumentingAgents) - : InspectorAgentBase(ASCIILiteral("LayerTree"), instrumentingAgents) +InspectorLayerTreeAgent::InspectorLayerTreeAgent(WebAgentContext& context) + : InspectorAgentBase(ASCIILiteral("LayerTree"), context) + , m_frontendDispatcher(std::make_unique<Inspector::LayerTreeFrontendDispatcher>(context.frontendRouter)) + , m_backendDispatcher(Inspector::LayerTreeBackendDispatcher::create(context.backendDispatcher, this)) { } @@ -60,18 +58,14 @@ InspectorLayerTreeAgent::~InspectorLayerTreeAgent() reset(); } -void InspectorLayerTreeAgent::didCreateFrontendAndBackend(Inspector::InspectorFrontendChannel* frontendChannel, InspectorBackendDispatcher* backendDispatcher) +void InspectorLayerTreeAgent::didCreateFrontendAndBackend(Inspector::FrontendRouter*, Inspector::BackendDispatcher*) { - m_frontendDispatcher = std::make_unique<InspectorLayerTreeFrontendDispatcher>(frontendChannel); - m_backendDispatcher = InspectorLayerTreeBackendDispatcher::create(backendDispatcher, this); } -void InspectorLayerTreeAgent::willDestroyFrontendAndBackend(InspectorDisconnectReason) +void InspectorLayerTreeAgent::willDestroyFrontendAndBackend(Inspector::DisconnectReason) { - m_frontendDispatcher = nullptr; - m_backendDispatcher.clear(); - - disable(nullptr); + ErrorString unused; + disable(unused); } void InspectorLayerTreeAgent::reset() @@ -82,14 +76,14 @@ void InspectorLayerTreeAgent::reset() m_idToPseudoElement.clear(); } -void InspectorLayerTreeAgent::enable(ErrorString*) +void InspectorLayerTreeAgent::enable(ErrorString&) { - m_instrumentingAgents->setInspectorLayerTreeAgent(this); + m_instrumentingAgents.setInspectorLayerTreeAgent(this); } -void InspectorLayerTreeAgent::disable(ErrorString*) +void InspectorLayerTreeAgent::disable(ErrorString&) { - m_instrumentingAgents->setInspectorLayerTreeAgent(nullptr); + m_instrumentingAgents.setInspectorLayerTreeAgent(nullptr); } void InspectorLayerTreeAgent::layerTreeDidChange() @@ -97,47 +91,48 @@ void InspectorLayerTreeAgent::layerTreeDidChange() m_frontendDispatcher->layerTreeDidChange(); } -void InspectorLayerTreeAgent::renderLayerDestroyed(const RenderLayer* renderLayer) +void InspectorLayerTreeAgent::renderLayerDestroyed(const RenderLayer& renderLayer) { - unbind(renderLayer); + unbind(&renderLayer); } -void InspectorLayerTreeAgent::pseudoElementDestroyed(PseudoElement* pseudoElement) +void InspectorLayerTreeAgent::pseudoElementDestroyed(PseudoElement& pseudoElement) { - unbindPseudoElement(pseudoElement); + unbindPseudoElement(&pseudoElement); } -void InspectorLayerTreeAgent::layersForNode(ErrorString* errorString, int nodeId, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::LayerTree::Layer>>& layers) +void InspectorLayerTreeAgent::layersForNode(ErrorString& errorString, int nodeId, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::LayerTree::Layer>>& layers) { - layers = Inspector::TypeBuilder::Array<Inspector::TypeBuilder::LayerTree::Layer>::create(); + layers = Inspector::Protocol::Array<Inspector::Protocol::LayerTree::Layer>::create(); - Node* node = m_instrumentingAgents->inspectorDOMAgent()->nodeForId(nodeId); + auto* node = m_instrumentingAgents.inspectorDOMAgent()->nodeForId(nodeId); if (!node) { - *errorString = "Provided node id doesn't match any known node"; + errorString = ASCIILiteral("Provided node id doesn't match any known node"); return; } - RenderObject* renderer = node->renderer(); + auto* renderer = node->renderer(); if (!renderer) { - *errorString = "Node for provided node id doesn't have a renderer"; + errorString = ASCIILiteral("Node for provided node id doesn't have a renderer"); return; } - gatherLayersUsingRenderObjectHierarchy(errorString, renderer, layers); + if (is<RenderElement>(*renderer)) + gatherLayersUsingRenderObjectHierarchy(errorString, downcast<RenderElement>(*renderer), layers); } -void InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy(ErrorString* errorString, RenderObject* renderer, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::LayerTree::Layer>>& layers) +void InspectorLayerTreeAgent::gatherLayersUsingRenderObjectHierarchy(ErrorString& errorString, RenderElement& renderer, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::LayerTree::Layer>>& layers) { - if (renderer->hasLayer()) { - gatherLayersUsingRenderLayerHierarchy(errorString, toRenderLayerModelObject(renderer)->layer(), layers); + if (renderer.hasLayer()) { + gatherLayersUsingRenderLayerHierarchy(errorString, downcast<RenderLayerModelObject>(renderer).layer(), layers); return; } - for (renderer = renderer->firstChildSlow(); renderer; renderer = renderer->nextSibling()) - gatherLayersUsingRenderObjectHierarchy(errorString, renderer, layers); + for (auto& child : childrenOfType<RenderElement>(renderer)) + gatherLayersUsingRenderObjectHierarchy(errorString, child, layers); } -void InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy(ErrorString* errorString, RenderLayer* renderLayer, RefPtr<Inspector::TypeBuilder::Array<Inspector::TypeBuilder::LayerTree::Layer>>& layers) +void InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy(ErrorString& errorString, RenderLayer* renderLayer, RefPtr<Inspector::Protocol::Array<Inspector::Protocol::LayerTree::Layer>>& layers) { if (renderLayer->isComposited()) layers->addItem(buildObjectForLayer(errorString, renderLayer)); @@ -146,7 +141,7 @@ void InspectorLayerTreeAgent::gatherLayersUsingRenderLayerHierarchy(ErrorString* gatherLayersUsingRenderLayerHierarchy(errorString, renderLayer, layers); } -PassRefPtr<Inspector::TypeBuilder::LayerTree::Layer> InspectorLayerTreeAgent::buildObjectForLayer(ErrorString* errorString, RenderLayer* renderLayer) +Ref<Inspector::Protocol::LayerTree::Layer> InspectorLayerTreeAgent::buildObjectForLayer(ErrorString& errorString, RenderLayer* renderLayer) { RenderObject* renderer = &renderLayer->renderer(); RenderLayerBacking* backing = renderLayer->backing(); @@ -166,13 +161,14 @@ PassRefPtr<Inspector::TypeBuilder::LayerTree::Layer> InspectorLayerTreeAgent::bu node = renderer->parent()->element(); // Basic set of properties. - RefPtr<Inspector::TypeBuilder::LayerTree::Layer> layerObject = Inspector::TypeBuilder::LayerTree::Layer::create() + auto layerObject = Inspector::Protocol::LayerTree::Layer::create() .setLayerId(bind(renderLayer)) .setNodeId(idForNode(errorString, node)) .setBounds(buildObjectForIntRect(renderer->absoluteBoundingBoxRect())) .setMemory(backing->backingStoreMemoryEstimate()) .setCompositedBounds(buildObjectForIntRect(enclosingIntRect(backing->compositedBounds()))) - .setPaintCount(backing->graphicsLayer()->repaintCount()); + .setPaintCount(backing->graphicsLayer()->repaintCount()) + .release(); if (node && node->shadowHost()) layerObject->setIsInShadowTree(true); @@ -184,7 +180,7 @@ PassRefPtr<Inspector::TypeBuilder::LayerTree::Layer> InspectorLayerTreeAgent::bu if (isReflection) renderer = renderer->parent(); layerObject->setIsGeneratedContent(true); - layerObject->setPseudoElementId(bindPseudoElement(toPseudoElement(renderer->node()))); + layerObject->setPseudoElementId(bindPseudoElement(downcast<PseudoElement>(renderer->node()))); if (renderer->isBeforeContent()) layerObject->setPseudoElement("before"); else if (renderer->isAfterContent()) @@ -204,12 +200,12 @@ PassRefPtr<Inspector::TypeBuilder::LayerTree::Layer> InspectorLayerTreeAgent::bu return layerObject; } -int InspectorLayerTreeAgent::idForNode(ErrorString* errorString, Node* node) +int InspectorLayerTreeAgent::idForNode(ErrorString& errorString, Node* node) { if (!node) return 0; - InspectorDOMAgent* domAgent = m_instrumentingAgents->inspectorDOMAgent(); + InspectorDOMAgent* domAgent = m_instrumentingAgents.inspectorDOMAgent(); int nodeId = domAgent->boundNodeId(node); if (!nodeId) @@ -218,26 +214,27 @@ int InspectorLayerTreeAgent::idForNode(ErrorString* errorString, Node* node) return nodeId; } -PassRefPtr<Inspector::TypeBuilder::LayerTree::IntRect> InspectorLayerTreeAgent::buildObjectForIntRect(const IntRect& rect) +Ref<Inspector::Protocol::LayerTree::IntRect> InspectorLayerTreeAgent::buildObjectForIntRect(const IntRect& rect) { - return Inspector::TypeBuilder::LayerTree::IntRect::create() + return Inspector::Protocol::LayerTree::IntRect::create() .setX(rect.x()) .setY(rect.y()) .setWidth(rect.width()) - .setHeight(rect.height()).release(); + .setHeight(rect.height()) + .release(); } -void InspectorLayerTreeAgent::reasonsForCompositingLayer(ErrorString* errorString, const String& layerId, RefPtr<Inspector::TypeBuilder::LayerTree::CompositingReasons>& compositingReasons) +void InspectorLayerTreeAgent::reasonsForCompositingLayer(ErrorString& errorString, const String& layerId, RefPtr<Inspector::Protocol::LayerTree::CompositingReasons>& compositingReasonsResult) { const RenderLayer* renderLayer = m_idToLayer.get(layerId); if (!renderLayer) { - *errorString = "Could not find a bound layer for the provided id"; + errorString = ASCIILiteral("Could not find a bound layer for the provided id"); return; } CompositingReasons reasonsBitmask = renderLayer->compositor().reasonsForCompositing(*renderLayer); - compositingReasons = Inspector::TypeBuilder::LayerTree::CompositingReasons::create(); + auto compositingReasons = Inspector::Protocol::LayerTree::CompositingReasons::create().release(); if (reasonsBitmask & CompositingReason3DTransform) compositingReasons->setTransform3D(true); @@ -295,21 +292,26 @@ void InspectorLayerTreeAgent::reasonsForCompositingLayer(ErrorString* errorStrin if (reasonsBitmask & CompositingReasonFilterWithCompositedDescendants) compositingReasons->setFilterWithCompositedDescendants(true); - + if (reasonsBitmask & CompositingReasonBlendingWithCompositedDescendants) compositingReasons->setBlendingWithCompositedDescendants(true); + if (reasonsBitmask & CompositingReasonIsolatesCompositedBlendingDescendants) + compositingReasons->setIsolatesCompositedBlendingDescendants(true); + if (reasonsBitmask & CompositingReasonPerspective) compositingReasons->setPerspective(true); if (reasonsBitmask & CompositingReasonPreserve3D) compositingReasons->setPreserve3D(true); + if (reasonsBitmask & CompositingReasonWillChange) + compositingReasons->setWillChange(true); + if (reasonsBitmask & CompositingReasonRoot) compositingReasons->setRoot(true); - - if (reasonsBitmask & CompositingReasonBlending) - compositingReasons->setBlending(true); + + compositingReasonsResult = WTFMove(compositingReasons); } String InspectorLayerTreeAgent::bind(const RenderLayer* layer) @@ -357,6 +359,3 @@ void InspectorLayerTreeAgent::unbindPseudoElement(PseudoElement* pseudoElement) } } // namespace WebCore - -#endif // ENABLE(INSPECTOR) -#endif // USE(ACCELERATED_COMPOSITING) |