[TreesInViz] Pass client BeginFrameArgs with LayerTreeUpdates.
Some cc_unittests expect to be able to draw without a valid BeginFrame, by using faked BeginFrameArgs for testing. We need to send these BeginFrameArgs to the LayerContextImpl too, otherwise there can be a race where LayerContextImpl tries to draw without ever having received valid BeginFrameArgs. This fixes running the *RunSingleThread_DelegatingRenderer tests. Bug: 389147356 Change-Id: I9901c654f1853524797c53fef4110e3cf341eec0 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6344045 Auto-Submit: Victor Miura <vmiura@chromium.org> Reviewed-by: Colin Blundell <blundell@chromium.org> Commit-Queue: Alex Gough <ajgo@chromium.org> Reviewed-by: Alex Gough <ajgo@chromium.org> Cr-Commit-Position: refs/heads/main@{#1431700}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
6c54337faa
commit
b89544996e
cc/mojo_embedder
components/viz/service/layers
services/viz/public/mojom/compositing
testing/buildbot/filters
@ -745,6 +745,7 @@ void VizLayerContext::UpdateDisplayTreeFrom(
|
||||
viz::RasterContextProvider& context_provider) {
|
||||
auto& property_trees = *tree.property_trees();
|
||||
auto update = viz::mojom::LayerTreeUpdate::New();
|
||||
update->begin_frame_args = tree.CurrentBeginFrameArgs();
|
||||
update->source_frame_number = tree.source_frame_number();
|
||||
update->trace_id = tree.trace_id().value();
|
||||
update->device_viewport = tree.GetDeviceViewport();
|
||||
|
@ -875,10 +875,8 @@ LayerContextImpl::~LayerContextImpl() {
|
||||
}
|
||||
|
||||
void LayerContextImpl::BeginFrame(const BeginFrameArgs& args) {
|
||||
// TODO(rockot): Manage these flags properly.
|
||||
last_begin_frame_args_ = args;
|
||||
|
||||
if (base::FeatureList::IsEnabled(features::kTreeAnimationsInViz)) {
|
||||
// TODO(vmiura): Manage these flags properly.
|
||||
const bool has_damage = true;
|
||||
compositor_sink_->SetLayerContextWantsBeginFrames(false);
|
||||
if (!host_impl_->CanDraw()) {
|
||||
@ -1226,16 +1224,17 @@ base::expected<void, std::string> LayerContextImpl::DoUpdateDisplayTree(
|
||||
compositor_sink_->SetLayerContextWantsBeginFrames(true);
|
||||
} else {
|
||||
if (host_impl_->CanDraw()) {
|
||||
host_impl_->WillBeginImplFrame(last_begin_frame_args_);
|
||||
host_impl_->WillBeginImplFrame(update->begin_frame_args);
|
||||
|
||||
cc::LayerTreeHostImpl::FrameData frame;
|
||||
const bool has_damage = true;
|
||||
frame.begin_frame_ack = BeginFrameAck(last_begin_frame_args_, has_damage);
|
||||
frame.origin_begin_main_frame_args = last_begin_frame_args_;
|
||||
frame.begin_frame_ack =
|
||||
BeginFrameAck(update->begin_frame_args, has_damage);
|
||||
frame.origin_begin_main_frame_args = update->begin_frame_args;
|
||||
host_impl_->PrepareToDraw(&frame);
|
||||
host_impl_->DrawLayers(&frame);
|
||||
host_impl_->DidDrawAllLayers(frame);
|
||||
host_impl_->DidFinishImplFrame(last_begin_frame_args_);
|
||||
host_impl_->DidFinishImplFrame(update->begin_frame_args);
|
||||
}
|
||||
}
|
||||
return base::ok();
|
||||
|
@ -134,8 +134,6 @@ class LayerContextImpl : public cc::LayerTreeHostImplClient,
|
||||
const std::unique_ptr<cc::RenderingStatsInstrumentation> rendering_stats_;
|
||||
const std::unique_ptr<cc::LayerTreeHostImpl> host_impl_;
|
||||
|
||||
BeginFrameArgs last_begin_frame_args_;
|
||||
|
||||
std::vector<TransferableResource> next_frame_resources_;
|
||||
|
||||
raw_ptr<cc::LayerTreeFrameSinkClient> frame_sink_client_ = nullptr;
|
||||
|
@ -29,6 +29,8 @@ import "ui/gfx/geometry/mojom/geometry.mojom";
|
||||
// TODO(https://crbug.com/40902503): Split less frequently updated fields out
|
||||
// into an optional substructure to reduce serialization load.
|
||||
struct LayerTreeUpdate {
|
||||
BeginFrameArgs begin_frame_args;
|
||||
|
||||
// The main frame commit whose tree is driving this update. Incremented over
|
||||
// time with each client-side commit.
|
||||
int32 source_frame_number;
|
||||
|
@ -15,6 +15,7 @@
|
||||
-LayerTreeHostImplViewportCoveredTest.ViewportCoveredScaled
|
||||
-LayerTreeHostImplTestDrawAndTestDamage.FrameIncludesDamageRect/CommitToActiveTree
|
||||
-LayerTreeHostImplTestDrawAndTestDamage.FrameIncludesDamageRect/CommitToPendingTree
|
||||
-LayerTreeHostPictureTestForceRecalculateScales.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeTestMaskLayerForSurfaceWithContentRectNotAtOriginWithLayerList.RunSingleThread_DelegatingRenderer
|
||||
|
||||
# These tests rely LayerTreeHostImpl to set certain flags in CompositorFrames
|
||||
@ -61,15 +62,3 @@
|
||||
# TODO(crbug.com/401568010) Investigate LayerTreeHostImplTest.LayersFreeTextures
|
||||
-LayerTreeHostImplTest.LayersFreeTextures/CommitToActiveTree
|
||||
-LayerTreeHostImplTest.LayersFreeTextures/CommitToPendingTree
|
||||
|
||||
# TODO(crbug.com/389147356): Implement single-threaded mode, which all of these
|
||||
# tests operate in.
|
||||
-LayerTreeHostPictureTestForceRecalculateScales.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeHostScrollTestImplScrollUnderMainThreadScrollingParent.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeHostScrollTestPropertyTreeUpdate.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeHostScrollTestScrollNonDrawnLayer.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeHostScrollTestScrollZeroMaxScrollOffset.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeHostTestHudLayerWithLayerLists.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeHostTestLayerListSurfaceDamage.RunSingleThread_DelegatingRenderer
|
||||
-LayerTreeTestPageScaleFlags.RunSingleThread_DelegatingRenderer
|
||||
-NonScrollingMainThreadScrollHitTestRegion.RunSingleThread_DelegatingRenderer
|
||||
|
Reference in New Issue
Block a user