Commit bf044902 authored by kouhei@chromium.org's avatar kouhei@chromium.org

[Invalidation Tracking] Add trace events for compositor based invalidations

This patch add a new trace event InspectorLayerInvalidationTrackingEvent for invalidation reason tracking. The event tracks when compositor invalidates the whole RenderLayer including its descendents, along with its reason.

BUG=410701

Review URL: https://codereview.chromium.org/565793003

git-svn-id: svn://svn.chromium.org/blink/trunk@181933 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 8e5c4743
......@@ -16,6 +16,7 @@
#include "core/inspector/ScriptCallStack.h"
#include "core/page/Page.h"
#include "core/rendering/RenderImage.h"
#include "core/rendering/RenderLayer.h"
#include "core/rendering/RenderObject.h"
#include "core/workers/WorkerThread.h"
#include "core/xml/XMLHttpRequest.h"
......@@ -274,6 +275,24 @@ static void localToPageQuad(const RenderObject& renderer, const LayoutRect& rect
quad->setP4(view->contentsToRootView(roundedIntPoint(absolute.p4())));
}
const char InspectorLayerInvalidationTrackingEvent::SquashingLayerGeometryWasUpdated[] = "Squashing layer geometry was updated.";
const char InspectorLayerInvalidationTrackingEvent::AddedToSquashingLayer[] = "The layer may have been added to an already-existing squashing layer.";
const char InspectorLayerInvalidationTrackingEvent::RemovedFromSquashingLayer[] = "Removed the layer from a squashing layer.";
const char InspectorLayerInvalidationTrackingEvent::ReflectionLayerChanged[] = "Reflection layer change.";
const char InspectorLayerInvalidationTrackingEvent::NewCompositedLayer[] = "Assigned a new composited layer.";
const char InspectorLayerInvalidationTrackingEvent::AncestorRequiresNewLayer[] = "A new composited layer is needed based on the RenderLayer's compositing ancestor's properties.";
PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorLayerInvalidationTrackingEvent::data(const RenderLayer* layer, const char* reason)
{
const RenderObject* paintInvalidationContainer = layer->renderer()->containerForPaintInvalidation();
RefPtr<TracedValue> value = TracedValue::create();
value->setString("frame", toHexString(paintInvalidationContainer->frame()));
setGeneratingNodeId(value.get(), "paintId", paintInvalidationContainer);
value->setString("reason", reason);
return value;
}
PassRefPtr<TraceEvent::ConvertableToTraceFormat> InspectorPaintEvent::data(RenderObject* renderer, const LayoutRect& clipRect, const GraphicsLayer* graphicsLayer)
{
RefPtr<TracedValue> value = TracedValue::create();
......
......@@ -20,8 +20,9 @@ class GraphicsLayer;
class KURL;
class LayoutRect;
class LocalFrame;
class RenderObject;
class RenderImage;
class RenderLayer;
class RenderObject;
class ResourceRequest;
class ResourceResponse;
class ScriptSourceCode;
......@@ -105,6 +106,24 @@ public:
static PassRefPtr<TraceEvent::ConvertableToTraceFormat> data(ExecutionContext*, XMLHttpRequest*);
};
class InspectorLayerInvalidationTrackingEvent {
public:
static const char SquashingLayerGeometryWasUpdated[];
static const char AddedToSquashingLayer[];
static const char RemovedFromSquashingLayer[];
static const char ReflectionLayerChanged[];
static const char NewCompositedLayer[];
static const char AncestorRequiresNewLayer[];
static PassRefPtr<TraceEvent::ConvertableToTraceFormat> data(const RenderLayer*, const char* reason);
};
#define TRACE_LAYER_INVALIDATION(LAYER, REASON) \
TRACE_EVENT_INSTANT1( \
TRACE_DISABLED_BY_DEFAULT("devtools.timeine.invalidationTracking"), \
"LayerInvalidationTracking", \
"data", \
InspectorLayerInvalidationTrackingEvent::data((LAYER), (REASON)))
class InspectorPaintEvent {
public:
static PassRefPtr<TraceEvent::ConvertableToTraceFormat> data(RenderObject*, const LayoutRect& clipRect, const GraphicsLayer*);
......
......@@ -607,6 +607,8 @@ void CompositedLayerMapping::updateSquashingLayerGeometry(const LayoutPoint& off
LayoutSize subpixelAccumulation = offsetFromSquashLayerOrigin + newOffsetFromRenderer;
if (layers[i].offsetFromRendererSet && layers[i].offsetFromRenderer != newOffsetFromRenderer) {
layers[i].renderLayer->paintInvalidator().paintInvalidationIncludingNonCompositingDescendants();
TRACE_LAYER_INVALIDATION(layers[i].renderLayer, InspectorLayerInvalidationTrackingEvent::SquashingLayerGeometryWasUpdated);
layersNeedingPaintInvalidation.append(layers[i].renderLayer);
}
layers[i].offsetFromRenderer = newOffsetFromRenderer;
......
......@@ -27,6 +27,7 @@
#include "config.h"
#include "core/rendering/compositing/CompositingLayerAssigner.h"
#include "core/inspector/InspectorTraceEvents.h"
#include "core/rendering/compositing/CompositedLayerMapping.h"
#include "platform/TraceEvent.h"
......@@ -195,6 +196,7 @@ void CompositingLayerAssigner::updateSquashingAssignment(RenderLayer* layer, Squ
layer->clipper().clearClipRectsIncludingDescendants();
// Issue a paint invalidation, since |layer| may have been added to an already-existing squashing layer.
TRACE_LAYER_INVALIDATION(layer, InspectorLayerInvalidationTrackingEvent::AddedToSquashingLayer);
layersNeedingPaintInvalidation.append(layer);
m_layersChanged = true;
} else if (compositedLayerUpdate == RemoveFromSquashingLayer) {
......@@ -206,6 +208,7 @@ void CompositingLayerAssigner::updateSquashingAssignment(RenderLayer* layer, Squ
}
// If we need to issue paint invalidations, do so now that we've removed it from a squashed layer.
TRACE_LAYER_INVALIDATION(layer, InspectorLayerInvalidationTrackingEvent::RemovedFromSquashingLayer);
layersNeedingPaintInvalidation.append(layer);
m_layersChanged = true;
......@@ -217,6 +220,7 @@ void CompositingLayerAssigner::assignLayersToBackingsForReflectionLayer(RenderLa
{
CompositingStateTransitionType compositedLayerUpdate = computeCompositedLayerUpdate(reflectionLayer);
if (compositedLayerUpdate != NoCompositingStateChange) {
TRACE_LAYER_INVALIDATION(reflectionLayer, InspectorLayerInvalidationTrackingEvent::ReflectionLayerChanged);
layersNeedingPaintInvalidation.append(reflectionLayer);
m_layersChanged = true;
m_compositor->allocateOrClearCompositedLayerMapping(reflectionLayer, compositedLayerUpdate);
......@@ -239,6 +243,7 @@ void CompositingLayerAssigner::assignLayersToBackingsInternal(RenderLayer* layer
CompositingStateTransitionType compositedLayerUpdate = computeCompositedLayerUpdate(layer);
if (m_compositor->allocateOrClearCompositedLayerMapping(layer, compositedLayerUpdate)) {
TRACE_LAYER_INVALIDATION(layer, InspectorLayerInvalidationTrackingEvent::NewCompositedLayer);
layersNeedingPaintInvalidation.append(layer);
m_layersChanged = true;
}
......
......@@ -28,6 +28,7 @@
#include "core/rendering/compositing/GraphicsLayerUpdater.h"
#include "core/html/HTMLMediaElement.h"
#include "core/inspector/InspectorTraceEvents.h"
#include "core/rendering/RenderLayer.h"
#include "core/rendering/RenderLayerReflectionInfo.h"
#include "core/rendering/RenderPart.h"
......@@ -98,6 +99,7 @@ void GraphicsLayerUpdater::updateRecursive(RenderLayer& layer, UpdateType update
ASSERT(compositingContainer == layer.enclosingLayerWithCompositedLayerMapping(ExcludeSelf));
if (mapping->updateRequiresOwnBackingStoreForAncestorReasons(compositingContainer)) {
TRACE_LAYER_INVALIDATION(&layer, InspectorLayerInvalidationTrackingEvent::AncestorRequiresNewLayer);
layersNeedingPaintInvalidation.append(&layer);
updateType = ForceUpdate;
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment