| Index: third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| diff --git a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| index 8d806185ea613b1080d1b2ed67c115f353f71468..a6ab798f344de8be6f12f48c5959530b344d7126 100644
|
| --- a/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| +++ b/third_party/WebKit/Source/platform/graphics/compositing/PaintArtifactCompositor.cpp
|
| @@ -77,6 +77,11 @@ class PaintArtifactCompositor::ContentLayerClientImpl
|
| }
|
| void SetPaintableRegion(gfx::Rect region) { m_paintableRegion = region; }
|
|
|
| + void addPaintChunkDebugData(std::unique_ptr<JSONArray> json) {
|
| + m_paintChunkDebugData.append(std::move(json));
|
| + }
|
| + void clearPaintChunkDebugData() { m_paintChunkDebugData.clear(); }
|
| +
|
| // cc::ContentLayerClient
|
| gfx::Rect PaintableRegion() override { return m_paintableRegion; }
|
| scoped_refptr<cc::DisplayItemList> PaintContentsToDisplayList(
|
| @@ -130,7 +135,7 @@ class PaintArtifactCompositor::ContentLayerClientImpl
|
| }
|
| }
|
|
|
| - std::unique_ptr<JSONObject> layerAsJSON() {
|
| + std::unique_ptr<JSONObject> layerAsJSON(LayerTreeFlags flags) {
|
| std::unique_ptr<JSONObject> json = JSONObject::create();
|
| json->setString("name", m_debugName);
|
| IntSize bounds(m_ccPictureLayer->bounds().width(),
|
| @@ -140,6 +145,14 @@ class PaintArtifactCompositor::ContentLayerClientImpl
|
| json->setBoolean("contentsOpaque", m_ccPictureLayer->contents_opaque());
|
| json->setBoolean("drawsContent", m_ccPictureLayer->DrawsContent());
|
|
|
| + if (flags & LayerTreeIncludesDebugInfo) {
|
| + std::unique_ptr<JSONArray> paintChunkContentsArray = JSONArray::create();
|
| + for (const auto& debugData : m_paintChunkDebugData) {
|
| + paintChunkContentsArray->pushValue(debugData->clone());
|
| + }
|
| + json->setArray("paintChunkContents", std::move(paintChunkContentsArray));
|
| + }
|
| +
|
| ccLayersRasterInvalidationTrackingMap().asJSON(m_ccPictureLayer.get(),
|
| json.get());
|
| return json;
|
| @@ -157,6 +170,7 @@ class PaintArtifactCompositor::ContentLayerClientImpl
|
| scoped_refptr<cc::PictureLayer> m_ccPictureLayer;
|
| scoped_refptr<cc::DisplayItemList> m_ccDisplayItemList;
|
| gfx::Rect m_paintableRegion;
|
| + Vector<std::unique_ptr<JSONArray>> m_paintChunkDebugData;
|
| };
|
|
|
| PaintArtifactCompositor::PaintArtifactCompositor() {
|
| @@ -193,7 +207,7 @@ std::unique_ptr<JSONObject> PaintArtifactCompositor::layersAsJSON(
|
| LayerTreeFlags flags) const {
|
| std::unique_ptr<JSONArray> layersJSON = JSONArray::create();
|
| for (const auto& client : m_contentLayerClients) {
|
| - layersJSON->pushObject(client->layerAsJSON());
|
| + layersJSON->pushObject(client->layerAsJSON(flags));
|
| }
|
| std::unique_ptr<JSONObject> json = JSONObject::create();
|
| json->setArray("layers", std::move(layersJSON));
|
| @@ -301,7 +315,8 @@ scoped_refptr<cc::Layer> PaintArtifactCompositor::layerForPaintChunk(
|
| const PaintChunk& paintChunk,
|
| gfx::Vector2dF& layerOffset,
|
| Vector<std::unique_ptr<ContentLayerClientImpl>>& newContentLayerClients,
|
| - RasterInvalidationTracking* tracking) {
|
| + RasterInvalidationTracking* tracking,
|
| + bool storeDebugInfo) {
|
| DCHECK(paintChunk.size());
|
|
|
| // If the paint chunk is a foreign layer, just return that layer.
|
| @@ -329,6 +344,16 @@ scoped_refptr<cc::Layer> PaintArtifactCompositor::layerForPaintChunk(
|
| DCHECK(!tracking ||
|
| tracking->trackedRasterInvalidations.size() ==
|
| paintChunk.rasterInvalidationRects.size());
|
| +
|
| + contentLayerClient->clearPaintChunkDebugData();
|
| + if (storeDebugInfo) {
|
| + contentLayerClient->addPaintChunkDebugData(
|
| + paintArtifact.getDisplayItemList().subsequenceAsJSON(
|
| + paintChunk.beginIndex, paintChunk.endIndex,
|
| + DisplayItemList::SkipNonDrawings |
|
| + DisplayItemList::ShownOnlyDisplayItemTypes));
|
| + }
|
| +
|
| for (unsigned index = 0; index < paintChunk.rasterInvalidationRects.size();
|
| ++index) {
|
| IntRect rect(enclosingIntRect(paintChunk.rasterInvalidationRects[index]));
|
| @@ -768,7 +793,8 @@ void PropertyTreeManager::buildEffectNodesRecursively(
|
|
|
| void PaintArtifactCompositor::update(
|
| const PaintArtifact& paintArtifact,
|
| - RasterInvalidationTrackingMap<const PaintChunk>* rasterChunkInvalidations) {
|
| + RasterInvalidationTrackingMap<const PaintChunk>* rasterChunkInvalidations,
|
| + bool storeDebugInfo) {
|
| DCHECK(m_rootLayer);
|
|
|
| cc::LayerTree* layerTree = m_rootLayer->GetLayerTree();
|
| @@ -794,7 +820,8 @@ void PaintArtifactCompositor::update(
|
| scoped_refptr<cc::Layer> layer = layerForPaintChunk(
|
| paintArtifact, paintChunk, layerOffset, newContentLayerClients,
|
| rasterChunkInvalidations ? rasterChunkInvalidations->find(&paintChunk)
|
| - : nullptr);
|
| + : nullptr,
|
| + storeDebugInfo);
|
|
|
| int transformId = propertyTreeManager.compositorIdForTransformNode(
|
| paintChunk.properties.propertyTreeState.transform());
|
|
|