0

[TreesInViz] Send LayerTreeHostImpl::viewport_damage_rect_ to viz.

Without this, HasDamage() may return false and a frame may be
incorrectly skipped for drawing.

This fixed ~60 failing content_browsertests.

TEST=trees_in_viz bot

Bug: 404335731
Change-Id: Ic2d49ecc1c033cd02863f21a0f4700a16a9c5eb4
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6369927
Reviewed-by: Alex Gough <ajgo@chromium.org>
Auto-Submit: Zhenyao Mo <zmo@chromium.org>
Commit-Queue: Alex Gough <ajgo@chromium.org>
Reviewed-by: Victor Miura <vmiura@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1435567}
This commit is contained in:
Zhenyao Mo
2025-03-20 11:20:26 -07:00
committed by Chromium LUCI CQ
parent aa1218ba79
commit a1f99081a5
11 changed files with 38 additions and 83 deletions

@ -743,7 +743,8 @@ void VizLayerContext::SetVisible(bool visible) {
void VizLayerContext::UpdateDisplayTreeFrom(
LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider) {
viz::RasterContextProvider& context_provider,
const gfx::Rect& viewport_damage_rect) {
auto& property_trees = *tree.property_trees();
auto update = viz::mojom::LayerTreeUpdate::New();
update->begin_frame_args = tree.CurrentBeginFrameArgs();
@ -765,6 +766,8 @@ void VizLayerContext::UpdateDisplayTreeFrom(
update->outer_clip = property_ids.outer_clip;
update->outer_scroll = property_ids.outer_scroll;
update->viewport_damage_rect = viewport_damage_rect;
// This flag will be set if and only if a new layer list was pushed to the
// active tree during activation, implying that at least one layer addition or
// removal happened since our last update. In this case only, we push the full

@ -40,10 +40,10 @@ class CC_MOJO_EMBEDDER_EXPORT VizLayerContext
// LayerContext:
void SetVisible(bool visible) override;
void UpdateDisplayTreeFrom(
LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider) override;
void UpdateDisplayTreeFrom(LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider,
const gfx::Rect& viewport_damage_rect) override;
void UpdateDisplayTile(PictureLayerImpl& layer,
const Tile& tile,
viz::ClientResourceProvider& resource_provider,

@ -11,7 +11,8 @@ void FakeLayerContext::SetVisible(bool visible) {}
void FakeLayerContext::UpdateDisplayTreeFrom(
LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider) {}
viz::RasterContextProvider& context_provider,
const gfx::Rect& viewport_damage_rect) {}
void FakeLayerContext::UpdateDisplayTile(
PictureLayerImpl& layer,

@ -16,10 +16,10 @@ class FakeLayerContext : public LayerContext {
void SetVisible(bool visible) override;
void UpdateDisplayTreeFrom(
LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider) override;
void UpdateDisplayTreeFrom(LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider,
const gfx::Rect& viewport_damage_rect) override;
void UpdateDisplayTile(PictureLayerImpl& layer,
const Tile& tile,

@ -11,7 +11,8 @@ void TestLayerContext::SetVisible(bool visible) {}
void TestLayerContext::UpdateDisplayTreeFrom(
LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider) {}
viz::RasterContextProvider& context_provider,
const gfx::Rect& viewport_damage_rect) {}
void TestLayerContext::UpdateDisplayTile(
PictureLayerImpl& layer,

@ -16,10 +16,10 @@ class TestLayerContext : public LayerContext {
void SetVisible(bool visible) override;
void UpdateDisplayTreeFrom(
LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider) override;
void UpdateDisplayTreeFrom(LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider,
const gfx::Rect& viewport_damage_rect) override;
void UpdateDisplayTile(PictureLayerImpl& layer,
const Tile& tile,

@ -9,6 +9,10 @@
#include "cc/trees/commit_state.h"
#include "components/viz/common/surfaces/local_surface_id.h"
namespace gfx {
class Rect;
} // namespace gfx
namespace viz {
class ClientResourceProvider;
class RasterContextProvider;
@ -33,7 +37,8 @@ class CC_EXPORT LayerContext {
virtual void UpdateDisplayTreeFrom(
LayerTreeImpl& tree,
viz::ClientResourceProvider& resource_provider,
viz::RasterContextProvider& context_provider) = 0;
viz::RasterContextProvider& context_provider,
const gfx::Rect& viewport_damage_rect) = 0;
// Pushes an update to a single tile in the context's display tree.
virtual void UpdateDisplayTile(

@ -3287,7 +3287,7 @@ void LayerTreeHostImpl::UpdateDisplayTree(FrameData& frame) {
layer_context_->UpdateDisplayTreeFrom(
*active_tree(), *resource_provider(),
*layer_tree_frame_sink_->context_provider());
*layer_tree_frame_sink_->context_provider(), viewport_damage_rect_);
}
int LayerTreeHostImpl::RequestedMSAASampleCount() const {

@ -1190,6 +1190,8 @@ base::expected<void, std::string> LayerContextImpl::DoUpdateDisplayTree(
RETURN_IF_ERROR(UpdateViewportPropertyIds(layers, property_trees, *update));
host_impl_->SetViewportDamage(update->viewport_damage_rect);
property_trees.UpdateChangeTracking();
property_trees.transform_tree_mutable().set_needs_update(
transform_size_changed || transform_properties_changed ||

@ -59,6 +59,9 @@ struct LayerTreeUpdate {
int32 outer_clip;
int32 outer_scroll;
// The tree's viewport damage rect.
gfx.mojom.Rect viewport_damage_rect;
// Properties of layers added or modified since the last update. Note that the
// ordering of this array is arbitrary and not relevant to the tree's layer
// list order. If any layers were added, removed, or otherwise reordered in

@ -1,56 +1,30 @@
-All/CompositedScrollingMetricTest.BlockingEventHandlers/Composited
-All/CompositedScrollingMetricTest.BlockingEventHandlers/Composited_RasterInducingScroll
-All/CompositedScrollingMetricTest.BlockingEventHandlers/NonComposited
-All/CompositedScrollingMetricTest.BlockingEventHandlers/NonComposited_RasterInducingScroll
-All/CompositedScrollingMetricTest.PassiveEventHandlers/Composited
-All/CompositedScrollingMetricTest.PassiveEventHandlers/Composited_RasterInducingScroll
-All/CompositedScrollingMetricTest.PassiveEventHandlers/NonComposited
-All/CompositedScrollingMetricTest.PassiveEventHandlers/NonComposited_RasterInducingScroll
-All/CompositedScrollingMetricTest.RecordCorrectScrollingThread/Composited
-All/CompositedScrollingMetricTest.RecordCorrectScrollingThread/Composited_RasterInducingScroll
-All/CompositedScrollingMetricTest.RecordCorrectScrollingThread/NonComposited
-All/CompositedScrollingMetricTest.RecordCorrectScrollingThread/NonComposited_RasterInducingScroll
-All/NavigationBrowserTestPaintHoldingSubframe.BasicInProcessIframe/0
-All/NavigationBrowserTestPaintHoldingSubframe.BasicInProcessIframe/1
-All/NavigationBrowserTestPaintHoldingSubframe.CrossOrigin/0
-All/NavigationBrowserTestPaintHoldingSubframe.CrossOrigin/1
-All/RenderWidgetHostItemSequenceNumberInRenderFrameMetadataTest.ItemSequenceNumberExpectedNoContentChange/SameDoc
-All/SandboxedNavigationControllerBrowserTest.TopLevelNavigationFromSandboxSource/RDAllFrames_BFCacheDisabled
-All/SandboxedNavigationControllerBrowserTest.TopLevelNavigationFromSandboxSource/RDAllFrames_BFCacheEnabled
-All/SandboxedNavigationControllerBrowserTest.TopLevelNavigationFromSandboxSource/RDCrashedFrame_BFCacheDisabled
-All/SandboxedNavigationControllerBrowserTest.TopLevelNavigationFromSandboxSource/RDCrashedFrame_BFCacheEnabled
-All/ScrollingIntegrationTest.ScrollAfterCrossOriginNavigation/0
-All/ScrollingIntegrationTest.ScrollAfterCrossOriginNavigation/1
-All/ServiceWorkerWarmUpByPointerBrowserTest.PointeroverOrPointerdownWillWarmUpServiceWorker/0
-All/ServiceWorkerWarmUpByPointerBrowserTest.PointeroverOrPointerdownWillWarmUpServiceWorker/1
-All/ServiceWorkerWarmUpByPointerBrowserTest.PointeroverOrPointerdownWillWarmUpServiceWorker/2
-All/SitePerProcessBrowserTest.ScrollByRAF/0
-All/SitePerProcessBrowserTest.ScrollByRAF/1
-All/SitePerProcessBrowserTest.ScrollOopifInPinchZoomedPage/0
-All/SitePerProcessBrowserTest.ScrollOopifInPinchZoomedPage/1
-AutoscrollBrowserTest.AutoscrollDirectionChangeAfterFullyScrolled
-AutoscrollBrowserTest.WheelScrollingDoesNotWorkInAutoscrollMode
-CaptureScreenshotTest.SetDefaultBackgroundColorOverride
-CaptureScreenshotTest.TransparentScreenshotsBeyondViewport
-CaptureScreenshotTest.TransparentScreenshotsFull
-CaptureScreenshotTest.TransparentScreenshotsViewport
-CompositedScrollingBrowserTest.Scroll3DTransformedScroller
-CompositorEventAckBrowserTest.PassiveTouchStartBlockingTouchEnd
-CompositorEventAckBrowserTest.TouchStart
-ForceLoadAtTopBrowserTest.FragmentAnchorDisabled
-ForceLoadAtTopBrowserTest.SameDocumentNavigation
-ForceLoadAtTopBrowserTest.ScrollRestorationDisabled
-ForceLoadAtTopBrowserTest.TextFragmentAnchorDisabled
-P/ViewTransitionBrowserTestTraverse.TransitionOnSessionRestoreTraversal/0
-P/ViewTransitionCaptureTest.ViewTransitionNoArtifactDuringCapture/0
-P/ViewTransitionCaptureTest.ViewTransitionNoArtifactDuringCapture/1
-PrerenderBrowserTest.InputRoutedToPrimaryFrameTree
-PrerenderBrowserDeathTest.PrerenderCannotHaveInnerContents
-RenderFrameHostImplBrowserTestWithBFCacheAndViewTransition.NewContentTimeoutIsSetWhenLeavingBFCacheWithViewTransition
-RenderFrameHostImplDeathTest.ReloadInPendingDeletionOrBFCache
-RenderWidgetHostDelegatedInkMetadataTest.DuplicateMetadata
-ScrollBehaviorBrowserTest.SmoothWheelScrollCompletesWithScriptedMirror
-ScrollLatencyBrowserTest.ScrollingEventLatencyTrace
-SecurityExploitBrowserTest.AllowBindingsForNonWebUIProcess
-SitePerProcessEmulatedTouchBrowserTest.EmulatedGestureScrollBubbles
-SitePerProcessEmulatedTouchBrowserTest.EmulatedTouchPinchGoesToMainFrame
-SitePerProcessEmulatedTouchBrowserTest.EmulatedTouchScrollBubbles
-SitePerProcessHighDPIHitTestBrowserTest.HitTestLayerSquashing
-SitePerProcessHighDPIHitTestBrowserTest.HitTestWatermark
-SitePerProcessHighDPIHitTestBrowserTest.OverlapSurfaceHitTestTest
@ -58,48 +32,14 @@
-SitePerProcessHitTestBrowserTest.HitTestNestedOccludedOOPIF
-SitePerProcessHitTestBrowserTest.HitTestWatermark
-SitePerProcessHitTestBrowserTest.OverlapSurfaceHitTestTest
-SitePerProcessHitTestBrowserTest.ScrollBubblingTargetWithUnrelatedGesture
-SitePerProcessHitTestBrowserTest.SubframeGestureEventRouting
-SitePerProcessHitTestBrowserTest.TouchpadPinchWhenMissingHitTestDataDoesNotCrash
-SitePerProcessHitTestDataGenerationBrowserTest.AncestorMaskedOOPIF
-SitePerProcessHitTestDataGenerationBrowserTest.MaskedOOPIF
-SitePerProcessHitTestDataGenerationBrowserTest.OccludedOOPIF
-SitePerProcessHitTestDataGenerationBrowserTest.OverlappedOOPIF
-SnapshotBrowserTest.SingleWindowTest
-SnapshotBrowserTest.SyncMultiWindowTest
-SyntheticInputTest.SmoothScrollWheel
-TextFragmentAnchorBrowserTest.DisabledOnScriptHistoryNavigation
-TextFragmentAnchorBrowserTest.EnabledByDocumentPolicy
-TextFragmentAnchorBrowserTest.EnabledOnBrowserNavigation
-TextFragmentAnchorBrowserTest.EnabledOnUserGestureScriptNavigation
-TextFragmentAnchorBrowserTest.EnabledOnUserNavigation
-TextFragmentAnchorBrowserTest.HistoryDoesntGenerateToken
-TextFragmentAnchorBrowserTest.LinkOpenSourceMetrics_GoogleClientRedirect
-TextFragmentAnchorBrowserTest.LinkOpenSourceMetrics_GoogleServerRedirect
-TextFragmentAnchorBrowserTest.SameDocumentBrowserNavigation
-TextFragmentAnchorBrowserTest.SameDocumentBrowserNavigationOnScriptNavigatedDocument
-TextFragmentAnchorBrowserTest.SameDocumentScriptNavigation
-TextFragmentAnchorBrowserTest.SameDocumentScriptNavigationCrossOrigin
-TextFragmentAnchorBrowserTest.SameDocumentScriptNavigationSameOrigin
-TextFragmentAnchorBrowserTest.UserGestureConsumed
-TextFragmentAnchorBrowserTest.UserGesturePassedThroughRedirect
-TouchActionBrowserTest.BlockDoubleTapDragZoom
-TouchActionBrowserTest.DefaultAuto
-TouchActionBrowserTest.PanXMainThreadJanky
-TouchActionBrowserTest.PanXYAtAutoXOverlapAreaMainThreadJanky
-TouchActionBrowserTest.PanXYAtAutoYOverlapAreaMainThreadJanky
-TouchActionBrowserTest.PanXYAtXAreaMainThreadJanky
-TouchActionBrowserTest.PanXYAtYAreaMainThreadJanky
-TouchActionBrowserTest.PanXYMainThreadJanky
-TouchActionBrowserTest.PanYMainThreadJanky
-TouchActionBrowserTest.TouchActionNone
-TouchActionBrowserTest.TwoFingerPanYDisallowed
-TouchActionBrowserTestEnableCursorControl.NoCursorControlForHorizontalScrollable
-TouchActionBrowserTestEnableCursorControl.NoCursorControlOnHorizontalScrollableInput
-TouchpadPinchBrowserTest.TouchpadPinchChangesPageScale
-TouchpadPinchBrowserTest.WheelListenerAllowingPinch
-TouchpadPinchBrowserTest.WheelListenerPreventingPinch
-ViewTransitionBrowserTest.NavigationCancelledAfterScreenshot
-ViewTransitionBrowserTest.NavigationCancelledBeforeScreenshot
-ViewTransitionBrowserTest.OwnershipTransferredToNewRenderer
-WebContentsImplBrowserTest.MouseUpInOOPIframeShouldCancelMainFrameAutoscrollSelection
-WebContentsViewAuraTest.DragDropOnOopif
-ViewTransitionBrowserTest.OwnershipTransferredToNewRenderer