From 0e2728e82dbc212c4502fde8bfda331afb5fc0b7 Mon Sep 17 00:00:00 2001
From: Victor Miura <vmiura@chromium.org>
Date: Fri, 28 Mar 2025 18:44:30 -0700
Subject: [PATCH] [TreesInViz] Implement EffectNode.subtree_capture_id support

Bug: 406272948
Change-Id: Ifcc39e7fb3c04dd41471453d690393e372522660
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6409377
Reviewed-by: Nasko Oskov <nasko@chromium.org>
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Commit-Queue: Victor Miura <vmiura@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1439825}
---
 cc/mojo_embedder/viz_layer_context.cc                     | 4 ++++
 components/viz/service/layers/layer_context_impl.cc       | 3 +++
 services/viz/public/mojom/compositing/layer.mojom         | 4 ++++
 testing/buildbot/filters/trees_in_viz.cc_unittests.filter | 4 ----
 4 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/cc/mojo_embedder/viz_layer_context.cc b/cc/mojo_embedder/viz_layer_context.cc
index d6a445e124928..1747255e753be 100644
--- a/cc/mojo_embedder/viz_layer_context.cc
+++ b/cc/mojo_embedder/viz_layer_context.cc
@@ -152,6 +152,8 @@ void ComputePropertyTreeNodeUpdate(
       old_node->opacity == new_node.opacity &&
       old_node->render_surface_reason == new_node.render_surface_reason &&
       old_node->surface_contents_scale == new_node.surface_contents_scale &&
+      old_node->subtree_capture_id == new_node.subtree_capture_id &&
+      old_node->subtree_size == new_node.subtree_size &&
       old_node->blend_mode == new_node.blend_mode &&
       old_node->target_id == new_node.target_id &&
       old_node->has_copy_request == new_node.has_copy_request &&
@@ -174,6 +176,8 @@ void ComputePropertyTreeNodeUpdate(
   wire->has_render_surface =
       new_node.render_surface_reason != RenderSurfaceReason::kNone;
   wire->surface_contents_scale = new_node.surface_contents_scale;
+  wire->subtree_capture_id = new_node.subtree_capture_id;
+  wire->subtree_size = new_node.subtree_size;
   wire->blend_mode = base::checked_cast<uint32_t>(new_node.blend_mode);
   wire->target_id = new_node.target_id;
   wire->copy_output_requests = std::move(copy_requests);
diff --git a/components/viz/service/layers/layer_context_impl.cc b/components/viz/service/layers/layer_context_impl.cc
index 8722bccba50e7..a0a9d312cde75 100644
--- a/components/viz/service/layers/layer_context_impl.cc
+++ b/components/viz/service/layers/layer_context_impl.cc
@@ -200,6 +200,9 @@ base::expected<void, std::string> UpdatePropertyTreeNode(
   }
 
   node.surface_contents_scale = wire.surface_contents_scale;
+  node.subtree_capture_id = wire.subtree_capture_id;
+  node.subtree_size = wire.subtree_size;
+
   if (wire.blend_mode > static_cast<uint32_t>(SkBlendMode::kLastMode)) {
     return base::unexpected("Invalid blend_mode for effect node");
   }
diff --git a/services/viz/public/mojom/compositing/layer.mojom b/services/viz/public/mojom/compositing/layer.mojom
index 089130ab4a4a0..af8fa55dc57d3 100644
--- a/services/viz/public/mojom/compositing/layer.mojom
+++ b/services/viz/public/mojom/compositing/layer.mojom
@@ -13,6 +13,7 @@ import "ui/gfx/mojom/rrect_f.mojom";
 import "services/viz/public/mojom/compositing/filter_operations.mojom";
 import "services/viz/public/mojom/compositing/copy_output_request.mojom";
 import "services/viz/public/mojom/compositing/resource_id.mojom";
+import "services/viz/public/mojom/compositing/subtree_capture_id.mojom";
 import "ui/gfx/mojom/transform.mojom";
 
 // Extra fields in a cc::MirrorLayerImpl that has been added to a tree or
@@ -286,6 +287,9 @@ struct EffectNode {
   // doesn't induce a render surface.
   gfx.mojom.Vector2dF surface_contents_scale;
 
+  SubtreeCaptureId subtree_capture_id;
+  gfx.mojom.Size subtree_size;
+
   // This is an SkBlendMode, which has no mojom definition yet. Must be manually
   // validated to be no greater than SkBlendMode::kLastMode.
   uint32 blend_mode;
diff --git a/testing/buildbot/filters/trees_in_viz.cc_unittests.filter b/testing/buildbot/filters/trees_in_viz.cc_unittests.filter
index 73237a5cfc244..55704ae2ca50c 100644
--- a/testing/buildbot/filters/trees_in_viz.cc_unittests.filter
+++ b/testing/buildbot/filters/trees_in_viz.cc_unittests.filter
@@ -157,10 +157,6 @@
 -All/LayerTreeHostTilesTestPartialInvalidationMultiThread.PartialRaster/SkiaGraphiteDawn_GPU
 -All/LayerTreeHostTilesTestPartialInvalidationMultiThread.PartialRaster/SkiaVulkan_GPU
 
-# TODO(crbug.com/406272948) Implement EffectNode.subtree_capture_id support
--LayerTreeHostCaptureTestLayerWithCaptureIdElevatesToSurface.RunMultiThread_DelegatingRenderer
--LayerTreeHostCaptureTestLayerWithCaptureIdElevatesToSurface.RunSingleThread_DelegatingRenderer
-
 # TODO(crbug.com/406273638) Implement single_thread_proxy_scheduler support
 -All/LayerTreeHostSynchronousPixelTest.OneContentLayerGpuRasterization/SkiaGL
 -All/LayerTreeHostSynchronousPixelTest.OneContentLayerGpuRasterization/SkiaGraphiteDawn