summaryrefslogtreecommitdiff
path: root/Source/WebCore/inspector/InspectorLayerTreeAgent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebCore/inspector/InspectorLayerTreeAgent.cpp')
-rw-r--r--Source/WebCore/inspector/InspectorLayerTreeAgent.cpp113
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)