Commit 30a805f4 authored by kylechar's avatar kylechar Committed by Commit Bot

Add CompositorFrameBuilder for tests.

Add a class that helps build valid CompostiorFrames for tests. Also
convert some tests to use the builder and update existing helper
functions.

Bug: 758707
Cq-Include-Trybots: master.tryserver.chromium.android:android_optional_gpu_tests_rel
Change-Id: I293ef25799d2db398e905f34e5eb0650a3525677
Reviewed-on: https://chromium-review.googlesource.com/796931Reviewed-by: default avatarTimothy Dresser <tdresser@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Reviewed-by: default avatarFady Samuel <fsamuel@chromium.org>
Commit-Queue: kylechar <kylechar@chromium.org>
Cr-Commit-Position: refs/heads/master@{#521774}
parent 6fd1cd67
...@@ -118,13 +118,9 @@ content::SynchronousCompositor* RenderingTest::ActiveCompositor() const { ...@@ -118,13 +118,9 @@ content::SynchronousCompositor* RenderingTest::ActiveCompositor() const {
} }
std::unique_ptr<viz::CompositorFrame> RenderingTest::ConstructEmptyFrame() { std::unique_ptr<viz::CompositorFrame> RenderingTest::ConstructEmptyFrame() {
auto compositor_frame = std::make_unique<viz::CompositorFrame>(
viz::test::MakeEmptyCompositorFrame());
std::unique_ptr<viz::RenderPass> root_pass(viz::RenderPass::Create());
gfx::Rect viewport(browser_view_renderer_->size()); gfx::Rect viewport(browser_view_renderer_->size());
root_pass->SetNew(1, viewport, viewport, gfx::Transform()); return std::make_unique<viz::CompositorFrame>(
compositor_frame->render_pass_list.push_back(std::move(root_pass)); viz::CompositorFrameBuilder().AddRenderPass(viewport, viewport).Build());
return compositor_frame;
} }
std::unique_ptr<viz::CompositorFrame> RenderingTest::ConstructFrame( std::unique_ptr<viz::CompositorFrame> RenderingTest::ConstructFrame(
......
...@@ -257,10 +257,11 @@ TEST_F(HostFrameSinkManagerLocalTest, CommunicateFrameToken) { ...@@ -257,10 +257,11 @@ TEST_F(HostFrameSinkManagerLocalTest, CommunicateFrameToken) {
auto support = auto support =
CreateCompositorFrameSinkSupport(kParentFrameSink, true /* is_root */); CreateCompositorFrameSinkSupport(kParentFrameSink, true /* is_root */);
CompositorFrame compositor_frame( CompositorFrame compositor_frame = CompositorFrameBuilder()
test::MakeCompositorFrame({child_id1}, std::vector<SurfaceId>(), .AddDefaultRenderPass()
std::vector<TransferableResource>())); .SetFrameToken(frame_token1)
compositor_frame.metadata.frame_token = frame_token1; .SetActivationDependencies({child_id1})
.Build();
support->SubmitCompositorFrame(parent_id1.local_surface_id(), support->SubmitCompositorFrame(parent_id1.local_surface_id(),
std::move(compositor_frame)); std::move(compositor_frame));
......
...@@ -62,14 +62,14 @@ class SurfaceAggregatorPerfTest : public testing::Test { ...@@ -62,14 +62,14 @@ class SurfaceAggregatorPerfTest : public testing::Test {
auto pass = RenderPass::Create(); auto pass = RenderPass::Create();
pass->output_rect = gfx::Rect(0, 0, 1, 2); pass->output_rect = gfx::Rect(0, 0, 1, 2);
CompositorFrame frame = test::MakeEmptyCompositorFrame(); CompositorFrameBuilder frame_builder;
auto* sqs = pass->CreateAndAppendSharedQuadState(); auto* sqs = pass->CreateAndAppendSharedQuadState();
for (int j = 0; j < num_textures; j++) { for (int j = 0; j < num_textures; j++) {
TransferableResource resource; TransferableResource resource;
resource.id = j; resource.id = j;
resource.is_software = true; resource.is_software = true;
frame.resource_list.push_back(resource); frame_builder.AddTransferableResource(resource);
auto* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>(); auto* quad = pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
const gfx::Rect rect(0, 0, 1, 2); const gfx::Rect rect(0, 0, 1, 2);
...@@ -99,9 +99,9 @@ class SurfaceAggregatorPerfTest : public testing::Test { ...@@ -99,9 +99,9 @@ class SurfaceAggregatorPerfTest : public testing::Test {
base::nullopt, SK_ColorWHITE, false); base::nullopt, SK_ColorWHITE, false);
} }
frame.render_pass_list.push_back(std::move(pass)); frame_builder.AddRenderPass(std::move(pass));
child_supports[i]->SubmitCompositorFrame(local_surface_id, child_supports[i]->SubmitCompositorFrame(local_surface_id,
std::move(frame)); frame_builder.Build());
} }
auto root_support = CompositorFrameSinkSupport::Create( auto root_support = CompositorFrameSinkSupport::Create(
...@@ -110,7 +110,6 @@ class SurfaceAggregatorPerfTest : public testing::Test { ...@@ -110,7 +110,6 @@ class SurfaceAggregatorPerfTest : public testing::Test {
timer_.Reset(); timer_.Reset();
do { do {
auto pass = RenderPass::Create(); auto pass = RenderPass::Create();
CompositorFrame frame = test::MakeEmptyCompositorFrame();
auto* sqs = pass->CreateAndAppendSharedQuadState(); auto* sqs = pass->CreateAndAppendSharedQuadState();
auto* surface_quad = pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>(); auto* surface_quad = pass->CreateAndAppendDrawQuad<SurfaceDrawQuad>();
...@@ -127,7 +126,8 @@ class SurfaceAggregatorPerfTest : public testing::Test { ...@@ -127,7 +126,8 @@ class SurfaceAggregatorPerfTest : public testing::Test {
else else
pass->damage_rect = gfx::Rect(0, 0, 1, 1); pass->damage_rect = gfx::Rect(0, 0, 1, 1);
frame.render_pass_list.push_back(std::move(pass)); CompositorFrame frame =
CompositorFrameBuilder().AddRenderPass(std::move(pass)).Build();
root_support->SubmitCompositorFrame( root_support->SubmitCompositorFrame(
LocalSurfaceId(num_surfaces + 1, kArbitraryToken), std::move(frame)); LocalSurfaceId(num_surfaces + 1, kArbitraryToken), std::move(frame));
......
...@@ -79,8 +79,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawSimpleFrame) { ...@@ -79,8 +79,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawSimpleFrame) {
color_quad->SetNew(pass->shared_quad_state_list.back(), rect, rect, color_quad->SetNew(pass->shared_quad_state_list.back(), rect, rect,
SK_ColorGREEN, force_anti_aliasing_off); SK_ColorGREEN, force_anti_aliasing_off);
auto root_frame = test::MakeCompositorFrame(); auto root_frame =
root_frame.render_pass_list.push_back(std::move(pass)); CompositorFrameBuilder().AddRenderPass(std::move(pass)).Build();
LocalSurfaceId root_local_surface_id = allocator_.GenerateId(); LocalSurfaceId root_local_surface_id = allocator_.GenerateId();
SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id); SurfaceId root_surface_id(support_->frame_sink_id(), root_local_surface_id);
...@@ -131,8 +131,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawSimpleAggregatedFrame) { ...@@ -131,8 +131,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawSimpleAggregatedFrame) {
color_quad->SetNew(pass->shared_quad_state_list.back(), rect, rect, color_quad->SetNew(pass->shared_quad_state_list.back(), rect, rect,
SK_ColorYELLOW, force_anti_aliasing_off); SK_ColorYELLOW, force_anti_aliasing_off);
auto root_frame = test::MakeCompositorFrame(); auto root_frame =
root_frame.render_pass_list.push_back(std::move(pass)); CompositorFrameBuilder().AddRenderPass(std::move(pass)).Build();
support_->SubmitCompositorFrame(root_local_surface_id, support_->SubmitCompositorFrame(root_local_surface_id,
std::move(root_frame)); std::move(root_frame));
...@@ -152,8 +152,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawSimpleAggregatedFrame) { ...@@ -152,8 +152,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawSimpleAggregatedFrame) {
color_quad->SetNew(pass->shared_quad_state_list.back(), rect, rect, color_quad->SetNew(pass->shared_quad_state_list.back(), rect, rect,
SK_ColorBLUE, force_anti_aliasing_off); SK_ColorBLUE, force_anti_aliasing_off);
auto child_frame = test::MakeCompositorFrame(); auto child_frame =
child_frame.render_pass_list.push_back(std::move(pass)); CompositorFrameBuilder().AddRenderPass(std::move(pass)).Build();
child_support->SubmitCompositorFrame(child_local_surface_id, child_support->SubmitCompositorFrame(child_local_surface_id,
std::move(child_frame)); std::move(child_frame));
...@@ -226,8 +226,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawAggregatedFrameWithSurfaceTransforms) { ...@@ -226,8 +226,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawAggregatedFrameWithSurfaceTransforms) {
right_child_id, base::nullopt, SK_ColorWHITE, right_child_id, base::nullopt, SK_ColorWHITE,
false); false);
auto root_frame = test::MakeCompositorFrame(); auto root_frame =
root_frame.render_pass_list.push_back(std::move(pass)); CompositorFrameBuilder().AddRenderPass(std::move(pass)).Build();
support_->SubmitCompositorFrame(root_local_surface_id, support_->SubmitCompositorFrame(root_local_surface_id,
std::move(root_frame)); std::move(root_frame));
...@@ -254,8 +254,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawAggregatedFrameWithSurfaceTransforms) { ...@@ -254,8 +254,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawAggregatedFrameWithSurfaceTransforms) {
pass->shared_quad_state_list.back(), gfx::Rect(0, 100, 100, 100), pass->shared_quad_state_list.back(), gfx::Rect(0, 100, 100, 100),
gfx::Rect(0, 100, 100, 100), SK_ColorBLUE, force_anti_aliasing_off); gfx::Rect(0, 100, 100, 100), SK_ColorBLUE, force_anti_aliasing_off);
auto child_frame = test::MakeCompositorFrame(); auto child_frame =
child_frame.render_pass_list.push_back(std::move(pass)); CompositorFrameBuilder().AddRenderPass(std::move(pass)).Build();
left_support->SubmitCompositorFrame(left_child_local_id, left_support->SubmitCompositorFrame(left_child_local_id,
std::move(child_frame)); std::move(child_frame));
...@@ -282,8 +282,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawAggregatedFrameWithSurfaceTransforms) { ...@@ -282,8 +282,8 @@ TEST_F(SurfaceAggregatorPixelTest, DrawAggregatedFrameWithSurfaceTransforms) {
pass->shared_quad_state_list.back(), gfx::Rect(0, 100, 100, 100), pass->shared_quad_state_list.back(), gfx::Rect(0, 100, 100, 100),
gfx::Rect(0, 100, 100, 100), SK_ColorGREEN, force_anti_aliasing_off); gfx::Rect(0, 100, 100, 100), SK_ColorGREEN, force_anti_aliasing_off);
auto child_frame = test::MakeCompositorFrame(); auto child_frame =
child_frame.render_pass_list.push_back(std::move(pass)); CompositorFrameBuilder().AddRenderPass(std::move(pass)).Build();
right_support->SubmitCompositorFrame(right_child_local_id, right_support->SubmitCompositorFrame(right_child_local_id,
std::move(child_frame)); std::move(child_frame));
......
...@@ -125,7 +125,7 @@ class CompositorFrameSinkSupportTest : public testing::Test { ...@@ -125,7 +125,7 @@ class CompositorFrameSinkSupportTest : public testing::Test {
void SubmitCompositorFrameWithResources(ResourceId* resource_ids, void SubmitCompositorFrameWithResources(ResourceId* resource_ids,
size_t num_resource_ids) { size_t num_resource_ids) {
auto frame = test::MakeCompositorFrame(); auto frame = MakeDefaultCompositorFrame();
for (size_t i = 0u; i < num_resource_ids; ++i) { for (size_t i = 0u; i < num_resource_ids; ++i) {
TransferableResource resource; TransferableResource resource;
resource.id = resource_ids[i]; resource.id = resource_ids[i];
...@@ -505,14 +505,15 @@ TEST_F(CompositorFrameSinkSupportTest, AddDuringEviction) { ...@@ -505,14 +505,15 @@ TEST_F(CompositorFrameSinkSupportTest, AddDuringEviction) {
&mock_client, &manager_, kAnotherArbitraryFrameSinkId, kIsRoot, &mock_client, &manager_, kAnotherArbitraryFrameSinkId, kIsRoot,
kNeedsSyncPoints); kNeedsSyncPoints);
LocalSurfaceId local_surface_id(6, kArbitraryToken); LocalSurfaceId local_surface_id(6, kArbitraryToken);
support->SubmitCompositorFrame(local_surface_id, test::MakeCompositorFrame()); support->SubmitCompositorFrame(local_surface_id,
MakeDefaultCompositorFrame());
SurfaceManager* surface_manager = manager_.surface_manager(); SurfaceManager* surface_manager = manager_.surface_manager();
EXPECT_CALL(mock_client, DidReceiveCompositorFrameAck(_)) EXPECT_CALL(mock_client, DidReceiveCompositorFrameAck(_))
.WillOnce(testing::InvokeWithoutArgs([&]() { .WillOnce(testing::InvokeWithoutArgs([&]() {
LocalSurfaceId new_id(7, base::UnguessableToken::Create()); LocalSurfaceId new_id(7, base::UnguessableToken::Create());
support->SubmitCompositorFrame(new_id, test::MakeCompositorFrame()); support->SubmitCompositorFrame(new_id, MakeDefaultCompositorFrame());
surface_manager->GarbageCollectSurfaces(); surface_manager->GarbageCollectSurfaces();
})) }))
.WillRepeatedly(testing::Return()); .WillRepeatedly(testing::Return());
...@@ -535,8 +536,10 @@ TEST_F(CompositorFrameSinkSupportTest, EvictCurrentSurface) { ...@@ -535,8 +536,10 @@ TEST_F(CompositorFrameSinkSupportTest, EvictCurrentSurface) {
TransferableResource resource; TransferableResource resource;
resource.id = 1; resource.id = 1;
resource.mailbox_holder.texture_target = GL_TEXTURE_2D; resource.mailbox_holder.texture_target = GL_TEXTURE_2D;
auto frame = test::MakeCompositorFrame(); auto frame = CompositorFrameBuilder()
frame.resource_list.push_back(resource); .AddDefaultRenderPass()
.AddTransferableResource(resource)
.Build();
support->SubmitCompositorFrame(local_surface_id, std::move(frame)); support->SubmitCompositorFrame(local_surface_id, std::move(frame));
EXPECT_EQ(surface_observer_.last_created_surface_id().local_surface_id(), EXPECT_EQ(surface_observer_.last_created_surface_id().local_surface_id(),
local_surface_id); local_surface_id);
...@@ -569,7 +572,7 @@ TEST_F(CompositorFrameSinkSupportTest, EvictSurfaceWithTemporaryReference) { ...@@ -569,7 +572,7 @@ TEST_F(CompositorFrameSinkSupportTest, EvictSurfaceWithTemporaryReference) {
frame_sink_manager_client_.SetTemporaryReferenceToAssign( frame_sink_manager_client_.SetTemporaryReferenceToAssign(
surface_id, parent_frame_sink_id); surface_id, parent_frame_sink_id);
support_->SubmitCompositorFrame(local_surface_id, support_->SubmitCompositorFrame(local_surface_id,
test::MakeCompositorFrame()); MakeDefaultCompositorFrame());
// Verify the temporary reference has prevented the surface from getting // Verify the temporary reference has prevented the surface from getting
// destroyed. // destroyed.
...@@ -588,9 +591,11 @@ void CopyRequestTestCallback(bool* called, ...@@ -588,9 +591,11 @@ void CopyRequestTestCallback(bool* called,
TEST_F(CompositorFrameSinkSupportTest, DuplicateCopyRequest) { TEST_F(CompositorFrameSinkSupportTest, DuplicateCopyRequest) {
{ {
auto frame = test::MakeCompositorFrame(); const SurfaceId surface_id(support_->frame_sink_id(), local_surface_id_);
frame.metadata.referenced_surfaces.push_back( auto frame = CompositorFrameBuilder()
SurfaceId(support_->frame_sink_id(), local_surface_id_)); .AddDefaultRenderPass()
.SetReferencedSurfaces({surface_id})
.Build();
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
EXPECT_EQ(surface_observer_.last_created_surface_id().local_surface_id(), EXPECT_EQ(surface_observer_.last_created_surface_id().local_surface_id(),
local_surface_id_); local_surface_id_);
...@@ -639,17 +644,11 @@ TEST_F(CompositorFrameSinkSupportTest, DuplicateCopyRequest) { ...@@ -639,17 +644,11 @@ TEST_F(CompositorFrameSinkSupportTest, DuplicateCopyRequest) {
// Check whether the SurfaceInfo object is created and populated correctly // Check whether the SurfaceInfo object is created and populated correctly
// after the frame submission. // after the frame submission.
TEST_F(CompositorFrameSinkSupportTest, SurfaceInfo) { TEST_F(CompositorFrameSinkSupportTest, SurfaceInfo) {
auto frame = test::MakeCompositorFrame(); auto frame = CompositorFrameBuilder()
.AddRenderPass(gfx::Rect(5, 6), gfx::Rect())
auto render_pass = RenderPass::Create(); .AddRenderPass(gfx::Rect(7, 8), gfx::Rect())
render_pass->SetNew(1, gfx::Rect(5, 6), gfx::Rect(), gfx::Transform()); .SetDeviceScaleFactor(2.5f)
frame.render_pass_list.push_back(std::move(render_pass)); .Build();
render_pass = RenderPass::Create();
render_pass->SetNew(2, gfx::Rect(7, 8), gfx::Rect(), gfx::Transform());
frame.render_pass_list.push_back(std::move(render_pass));
frame.metadata.device_scale_factor = 2.5f;
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
SurfaceId expected_surface_id(support_->frame_sink_id(), local_surface_id_); SurfaceId expected_surface_id(support_->frame_sink_id(), local_surface_id_);
...@@ -663,8 +662,8 @@ TEST_F(CompositorFrameSinkSupportTest, SurfaceInfo) { ...@@ -663,8 +662,8 @@ TEST_F(CompositorFrameSinkSupportTest, SurfaceInfo) {
// a Surface for it. // a Surface for it.
TEST_F(CompositorFrameSinkSupportTest, ZeroFrameSize) { TEST_F(CompositorFrameSinkSupportTest, ZeroFrameSize) {
SurfaceId id(support_->frame_sink_id(), local_surface_id_); SurfaceId id(support_->frame_sink_id(), local_surface_id_);
auto frame = test::MakeEmptyCompositorFrame(); auto frame =
frame.render_pass_list.push_back(RenderPass::Create()); CompositorFrameBuilder().AddRenderPass(gfx::Rect(), gfx::Rect()).Build();
EXPECT_TRUE( EXPECT_TRUE(
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame))); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)));
EXPECT_FALSE(GetSurfaceForId(id)); EXPECT_FALSE(GetSurfaceForId(id));
...@@ -674,8 +673,10 @@ TEST_F(CompositorFrameSinkSupportTest, ZeroFrameSize) { ...@@ -674,8 +673,10 @@ TEST_F(CompositorFrameSinkSupportTest, ZeroFrameSize) {
// don't create a Surface for it. // don't create a Surface for it.
TEST_F(CompositorFrameSinkSupportTest, ZeroDeviceScaleFactor) { TEST_F(CompositorFrameSinkSupportTest, ZeroDeviceScaleFactor) {
SurfaceId id(support_->frame_sink_id(), local_surface_id_); SurfaceId id(support_->frame_sink_id(), local_surface_id_);
auto frame = test::MakeCompositorFrame(); auto frame = CompositorFrameBuilder()
frame.metadata.device_scale_factor = 0.f; .AddDefaultRenderPass()
.SetDeviceScaleFactor(0.f)
.Build();
EXPECT_TRUE( EXPECT_TRUE(
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame))); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)));
EXPECT_FALSE(GetSurfaceForId(id)); EXPECT_FALSE(GetSurfaceForId(id));
...@@ -687,20 +688,18 @@ TEST_F(CompositorFrameSinkSupportTest, FrameSizeMismatch) { ...@@ -687,20 +688,18 @@ TEST_F(CompositorFrameSinkSupportTest, FrameSizeMismatch) {
SurfaceId id(support_->frame_sink_id(), local_surface_id_); SurfaceId id(support_->frame_sink_id(), local_surface_id_);
// Submit a frame with size (5,5). // Submit a frame with size (5,5).
auto frame = test::MakeEmptyCompositorFrame(); auto frame = CompositorFrameBuilder()
auto pass = RenderPass::Create(); .AddRenderPass(gfx::Rect(5, 5), gfx::Rect())
pass->SetNew(1, gfx::Rect(5, 5), gfx::Rect(), gfx::Transform()); .Build();
frame.render_pass_list.push_back(std::move(pass));
EXPECT_TRUE( EXPECT_TRUE(
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame))); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)));
EXPECT_TRUE(GetSurfaceForId(id)); EXPECT_TRUE(GetSurfaceForId(id));
// Submit a frame with size (5,4). This frame should be rejected and the // Submit a frame with size (5,4). This frame should be rejected and the
// surface should be destroyed. // surface should be destroyed.
frame = test::MakeEmptyCompositorFrame(); frame = CompositorFrameBuilder()
pass = RenderPass::Create(); .AddRenderPass(gfx::Rect(5, 4), gfx::Rect())
pass->SetNew(1, gfx::Rect(5, 4), gfx::Rect(), gfx::Transform()); .Build();
frame.render_pass_list.push_back(std::move(pass));
EXPECT_FALSE( EXPECT_FALSE(
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame))); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)));
manager_.surface_manager()->GarbageCollectSurfaces(); manager_.surface_manager()->GarbageCollectSurfaces();
...@@ -714,16 +713,20 @@ TEST_F(CompositorFrameSinkSupportTest, DeviceScaleFactorMismatch) { ...@@ -714,16 +713,20 @@ TEST_F(CompositorFrameSinkSupportTest, DeviceScaleFactorMismatch) {
SurfaceId id(support_->frame_sink_id(), local_surface_id_); SurfaceId id(support_->frame_sink_id(), local_surface_id_);
// Submit a frame with device scale factor of 0.5. // Submit a frame with device scale factor of 0.5.
auto frame = test::MakeCompositorFrame(); auto frame = CompositorFrameBuilder()
frame.metadata.device_scale_factor = 0.5f; .AddDefaultRenderPass()
.SetDeviceScaleFactor(0.5f)
.Build();
EXPECT_TRUE( EXPECT_TRUE(
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame))); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)));
EXPECT_TRUE(GetSurfaceForId(id)); EXPECT_TRUE(GetSurfaceForId(id));
// Submit a frame with device scale factor of 0.4. This frame should be // Submit a frame with device scale factor of 0.4. This frame should be
// rejected and the surface should be destroyed. // rejected and the surface should be destroyed.
frame = test::MakeCompositorFrame(); frame = CompositorFrameBuilder()
frame.metadata.device_scale_factor = 0.4f; .AddDefaultRenderPass()
.SetDeviceScaleFactor(0.4f)
.Build();
EXPECT_FALSE( EXPECT_FALSE(
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame))); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)));
manager_.surface_manager()->GarbageCollectSurfaces(); manager_.surface_manager()->GarbageCollectSurfaces();
...@@ -742,8 +745,10 @@ TEST_F(CompositorFrameSinkSupportTest, PassesOnBeginFrameAcks) { ...@@ -742,8 +745,10 @@ TEST_F(CompositorFrameSinkSupportTest, PassesOnBeginFrameAcks) {
// Check that the support and SurfaceManager forward the BeginFrameAck // Check that the support and SurfaceManager forward the BeginFrameAck
// attached to a CompositorFrame to the SurfaceObserver. // attached to a CompositorFrame to the SurfaceObserver.
BeginFrameAck ack(0, 1, true); BeginFrameAck ack(0, 1, true);
auto frame = test::MakeCompositorFrame(); CompositorFrame frame = CompositorFrameBuilder()
frame.metadata.begin_frame_ack = ack; .AddDefaultRenderPass()
.SetBeginFrameAck(ack)
.Build();
support_->SubmitCompositorFrame(local_surface_id_, std::move(frame)); support_->SubmitCompositorFrame(local_surface_id_, std::move(frame));
EXPECT_EQ(ack, surface_observer_.last_ack()); EXPECT_EQ(ack, surface_observer_.last_ack());
...@@ -768,14 +773,14 @@ TEST_F(CompositorFrameSinkSupportTest, FrameIndexCarriedOverToNewSurface) { ...@@ -768,14 +773,14 @@ TEST_F(CompositorFrameSinkSupportTest, FrameIndexCarriedOverToNewSurface) {
// Submit a frame to |id1| and record the frame index. // Submit a frame to |id1| and record the frame index.
support_->SubmitCompositorFrame(local_surface_id1, support_->SubmitCompositorFrame(local_surface_id1,
test::MakeCompositorFrame()); MakeDefaultCompositorFrame());
Surface* surface1 = GetSurfaceForId(id1); Surface* surface1 = GetSurfaceForId(id1);
uint64_t frame_index = surface1->GetActiveFrameIndex(); uint64_t frame_index = surface1->GetActiveFrameIndex();
// Submit a frame to |id2| and verify that the new frame index is one more // Submit a frame to |id2| and verify that the new frame index is one more
// than what we had before. // than what we had before.
support_->SubmitCompositorFrame(local_surface_id2, support_->SubmitCompositorFrame(local_surface_id2,
test::MakeCompositorFrame()); MakeDefaultCompositorFrame());
Surface* surface2 = GetSurfaceForId(id2); Surface* surface2 = GetSurfaceForId(id2);
EXPECT_EQ(frame_index + 1, surface2->GetActiveFrameIndex()); EXPECT_EQ(frame_index + 1, surface2->GetActiveFrameIndex());
} }
......
...@@ -101,13 +101,9 @@ class DirectLayerTreeFrameSinkTest : public testing::Test { ...@@ -101,13 +101,9 @@ class DirectLayerTreeFrameSinkTest : public testing::Test {
} }
void SwapBuffersWithDamage(const gfx::Rect& damage_rect) { void SwapBuffersWithDamage(const gfx::Rect& damage_rect) {
auto render_pass = RenderPass::Create(); auto frame = CompositorFrameBuilder()
render_pass->SetNew(1, display_rect_, damage_rect, gfx::Transform()); .AddRenderPass(display_rect_, damage_rect)
.Build();
CompositorFrame frame = test::MakeEmptyCompositorFrame();
frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, true);
frame.render_pass_list.push_back(std::move(render_pass));
layer_tree_frame_sink_->SubmitCompositorFrame(std::move(frame)); layer_tree_frame_sink_->SubmitCompositorFrame(std::move(frame));
} }
......
...@@ -51,7 +51,7 @@ class SurfaceReferencesTest : public testing::Test { ...@@ -51,7 +51,7 @@ class SurfaceReferencesTest : public testing::Test {
LocalSurfaceId local_surface_id(parent_id, LocalSurfaceId local_surface_id(parent_id,
base::UnguessableToken::Deserialize(0, 1u)); base::UnguessableToken::Deserialize(0, 1u));
GetCompositorFrameSinkSupport(frame_sink_id) GetCompositorFrameSinkSupport(frame_sink_id)
.SubmitCompositorFrame(local_surface_id, MakeCompositorFrame()); .SubmitCompositorFrame(local_surface_id, MakeDefaultCompositorFrame());
return SurfaceId(frame_sink_id, local_surface_id); return SurfaceId(frame_sink_id, local_surface_id);
} }
......
...@@ -92,7 +92,7 @@ class VideoDetectorTest : public testing::Test { ...@@ -92,7 +92,7 @@ class VideoDetectorTest : public testing::Test {
root_frame_sink_ = CreateFrameSink(); root_frame_sink_ = CreateFrameSink();
root_frame_sink_->SubmitCompositorFrame( root_frame_sink_->SubmitCompositorFrame(
local_surface_id_allocator_.GenerateId(), test::MakeCompositorFrame()); local_surface_id_allocator_.GenerateId(), MakeDefaultCompositorFrame());
} }
protected: protected:
...@@ -120,7 +120,7 @@ class VideoDetectorTest : public testing::Test { ...@@ -120,7 +120,7 @@ class VideoDetectorTest : public testing::Test {
} }
void SubmitRootFrame() { void SubmitRootFrame() {
CompositorFrame frame = test::MakeCompositorFrame(); CompositorFrame frame = MakeDefaultCompositorFrame();
RenderPass* render_pass = frame.render_pass_list.back().get(); RenderPass* render_pass = frame.render_pass_list.back().get();
SharedQuadState* shared_quad_state = SharedQuadState* shared_quad_state =
render_pass->CreateAndAppendSharedQuadState(); render_pass->CreateAndAppendSharedQuadState();
...@@ -182,10 +182,10 @@ class VideoDetectorTest : public testing::Test { ...@@ -182,10 +182,10 @@ class VideoDetectorTest : public testing::Test {
private: private:
CompositorFrame MakeDamagedCompositorFrame(const gfx::Rect& damage) { CompositorFrame MakeDamagedCompositorFrame(const gfx::Rect& damage) {
constexpr gfx::Size kFrameSinkSize = gfx::Size(10000, 10000); constexpr gfx::Rect kFrameSinkRect(10000, 10000);
CompositorFrame frame = test::MakeCompositorFrame(kFrameSinkSize); return CompositorFrameBuilder()
frame.render_pass_list.back()->damage_rect = damage; .AddRenderPass(kFrameSinkRect, damage)
return frame; .Build();
} }
FrameSinkManagerImpl frame_sink_manager_; FrameSinkManagerImpl frame_sink_manager_;
......
...@@ -316,7 +316,7 @@ TEST_F(SurfaceHittestTest, Hittest_InvalidRenderPassDrawQuad) { ...@@ -316,7 +316,7 @@ TEST_F(SurfaceHittestTest, Hittest_InvalidRenderPassDrawQuad) {
TEST_F(SurfaceHittestTest, Hittest_RenderPassDrawQuad) { TEST_F(SurfaceHittestTest, Hittest_RenderPassDrawQuad) {
// Create a CompositorFrame with two RenderPasses. // Create a CompositorFrame with two RenderPasses.
gfx::Rect root_rect(300, 300); gfx::Rect root_rect(300, 300);
CompositorFrame root_frame = test::MakeCompositorFrame(); CompositorFrame root_frame = MakeDefaultCompositorFrame();
RenderPassList& render_pass_list = root_frame.render_pass_list; RenderPassList& render_pass_list = root_frame.render_pass_list;
// Create a child RenderPass. // Create a child RenderPass.
......
...@@ -25,7 +25,8 @@ constexpr bool kIsRoot = true; ...@@ -25,7 +25,8 @@ constexpr bool kIsRoot = true;
constexpr bool kNeedsSyncPoints = true; constexpr bool kNeedsSyncPoints = true;
TEST(SurfaceTest, PresentationCallback) { TEST(SurfaceTest, PresentationCallback) {
const gfx::Size kSurfaceSize(300, 300); constexpr gfx::Size kSurfaceSize(300, 300);
constexpr gfx::Rect kDamageRect(0, 0);
const LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); const LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create());
FrameSinkManagerImpl frame_sink_manager; FrameSinkManagerImpl frame_sink_manager;
...@@ -34,8 +35,11 @@ TEST(SurfaceTest, PresentationCallback) { ...@@ -34,8 +35,11 @@ TEST(SurfaceTest, PresentationCallback) {
&client, &frame_sink_manager, kArbitraryFrameSinkId, kIsRoot, &client, &frame_sink_manager, kArbitraryFrameSinkId, kIsRoot,
kNeedsSyncPoints); kNeedsSyncPoints);
{ {
CompositorFrame frame = test::MakeCompositorFrame(kSurfaceSize); CompositorFrame frame =
frame.metadata.presentation_token = 1; CompositorFrameBuilder()
.AddRenderPass(gfx::Rect(kSurfaceSize), kDamageRect)
.SetPresentationToken(1)
.Build();
EXPECT_CALL(client, DidReceiveCompositorFrameAck(testing::_)).Times(1); EXPECT_CALL(client, DidReceiveCompositorFrameAck(testing::_)).Times(1);
support->SubmitCompositorFrame(local_surface_id, std::move(frame)); support->SubmitCompositorFrame(local_surface_id, std::move(frame));
} }
...@@ -43,8 +47,11 @@ TEST(SurfaceTest, PresentationCallback) { ...@@ -43,8 +47,11 @@ TEST(SurfaceTest, PresentationCallback) {
{ {
// Replaces previous frame. The previous frame with token 1 will be // Replaces previous frame. The previous frame with token 1 will be
// discarded. // discarded.
CompositorFrame frame = test::MakeCompositorFrame(kSurfaceSize); CompositorFrame frame =
frame.metadata.presentation_token = 2; CompositorFrameBuilder()
.AddRenderPass(gfx::Rect(kSurfaceSize), kDamageRect)
.SetPresentationToken(2)
.Build();
EXPECT_CALL(client, DidDiscardCompositorFrame(1)).Times(1); EXPECT_CALL(client, DidDiscardCompositorFrame(1)).Times(1);
EXPECT_CALL(client, DidReceiveCompositorFrameAck(testing::_)).Times(1); EXPECT_CALL(client, DidReceiveCompositorFrameAck(testing::_)).Times(1);
support->SubmitCompositorFrame(local_surface_id, std::move(frame)); support->SubmitCompositorFrame(local_surface_id, std::move(frame));
...@@ -53,8 +60,10 @@ TEST(SurfaceTest, PresentationCallback) { ...@@ -53,8 +60,10 @@ TEST(SurfaceTest, PresentationCallback) {
{ {
// Submits a frame with token 3 and different size. This frame with token 3 // Submits a frame with token 3 and different size. This frame with token 3
// will be discarded immediately. // will be discarded immediately.
CompositorFrame frame = test::MakeCompositorFrame(gfx::Size(400, 400)); CompositorFrame frame = CompositorFrameBuilder()
frame.metadata.presentation_token = 3; .AddRenderPass(gfx::Rect(400, 400), kDamageRect)
.SetPresentationToken(3)
.Build();
EXPECT_CALL(client, DidDiscardCompositorFrame(3)).Times(1); EXPECT_CALL(client, DidDiscardCompositorFrame(3)).Times(1);
support->SubmitCompositorFrame(local_surface_id, std::move(frame)); support->SubmitCompositorFrame(local_surface_id, std::move(frame));
} }
...@@ -62,9 +71,12 @@ TEST(SurfaceTest, PresentationCallback) { ...@@ -62,9 +71,12 @@ TEST(SurfaceTest, PresentationCallback) {
{ {
// Submits a frame with token 4 and different scale factor, this frame with // Submits a frame with token 4 and different scale factor, this frame with
// token 4 will be discarded immediately. // token 4 will be discarded immediately.
CompositorFrame frame = test::MakeCompositorFrame(kSurfaceSize); CompositorFrame frame =
frame.metadata.device_scale_factor = 2; CompositorFrameBuilder()
frame.metadata.presentation_token = 4; .AddRenderPass(gfx::Rect(kSurfaceSize), kDamageRect)
.SetDeviceScaleFactor(2.f)
.SetPresentationToken(4)
.Build();
EXPECT_CALL(client, DidDiscardCompositorFrame(4)).Times(1); EXPECT_CALL(client, DidDiscardCompositorFrame(4)).Times(1);
support->SubmitCompositorFrame(local_surface_id, std::move(frame)); support->SubmitCompositorFrame(local_surface_id, std::move(frame));
} }
...@@ -85,7 +97,8 @@ TEST(SurfaceTest, SurfaceLifetime) { ...@@ -85,7 +97,8 @@ TEST(SurfaceTest, SurfaceLifetime) {
LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create());
SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id); SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id);
support->SubmitCompositorFrame(local_surface_id, test::MakeCompositorFrame()); support->SubmitCompositorFrame(local_surface_id,
MakeDefaultCompositorFrame());
EXPECT_TRUE(surface_manager->GetSurfaceForId(surface_id)); EXPECT_TRUE(surface_manager->GetSurfaceForId(surface_id));
support->EvictCurrentSurface(); support->EvictCurrentSurface();
frame_sink_manager.surface_manager()->GarbageCollectSurfaces(); frame_sink_manager.surface_manager()->GarbageCollectSurfaces();
...@@ -118,7 +131,7 @@ TEST(SurfaceTest, CopyRequestLifetime) { ...@@ -118,7 +131,7 @@ TEST(SurfaceTest, CopyRequestLifetime) {
LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create()); LocalSurfaceId local_surface_id(6, base::UnguessableToken::Create());
SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id); SurfaceId surface_id(kArbitraryFrameSinkId, local_surface_id);
CompositorFrame frame = test::MakeCompositorFrame(); CompositorFrame frame = MakeDefaultCompositorFrame();
support->SubmitCompositorFrame(local_surface_id, std::move(frame)); support->SubmitCompositorFrame(local_surface_id, std::move(frame));
Surface* surface = surface_manager->GetSurfaceForId(surface_id); Surface* surface = surface_manager->GetSurfaceForId(surface_id);
ASSERT_TRUE(!!surface); ASSERT_TRUE(!!surface);
...@@ -132,7 +145,7 @@ TEST(SurfaceTest, CopyRequestLifetime) { ...@@ -132,7 +145,7 @@ TEST(SurfaceTest, CopyRequestLifetime) {
int max_frame = 3, start_id = 200; int max_frame = 3, start_id = 200;
for (int i = 0; i < max_frame; ++i) { for (int i = 0; i < max_frame; ++i) {
CompositorFrame frame = test::MakeEmptyCompositorFrame(); CompositorFrame frame = CompositorFrameBuilder().Build();
frame.render_pass_list.push_back(RenderPass::Create()); frame.render_pass_list.push_back(RenderPass::Create());
frame.render_pass_list.back()->id = i * 3 + start_id; frame.render_pass_list.back()->id = i * 3 + start_id;
frame.render_pass_list.push_back(RenderPass::Create()); frame.render_pass_list.push_back(RenderPass::Create());
......
...@@ -4,6 +4,7 @@ include_rules = [ ...@@ -4,6 +4,7 @@ include_rules = [
"+mojo/public/cpp/bindings", "+mojo/public/cpp/bindings",
"+services/viz/privileged/interfaces", "+services/viz/privileged/interfaces",
"+services/viz/public/interfaces", "+services/viz/public/interfaces",
"+ui/latency",
] ]
specific_include_rules = { specific_include_rules = {
......
...@@ -4,42 +4,126 @@ ...@@ -4,42 +4,126 @@
#include "components/viz/test/compositor_frame_helpers.h" #include "components/viz/test/compositor_frame_helpers.h"
#include "components/viz/common/quads/compositor_frame.h"
namespace viz { namespace viz {
namespace test { namespace {
constexpr gfx::Rect kDefaultOutputRect(20, 20);
constexpr gfx::Rect kDefaultDamageRect(0, 0);
} // namespace
CompositorFrameBuilder::CompositorFrameBuilder() : frame_(base::in_place) {
frame_->metadata.begin_frame_ack =
BeginFrameAck(BeginFrameArgs::kManualSourceId,
BeginFrameArgs::kStartingFrameNumber, true);
frame_->metadata.device_scale_factor = 1.f;
}
CompositorFrameBuilder::~CompositorFrameBuilder() = default;
CompositorFrame CompositorFrameBuilder::Build() {
CompositorFrame temp_frame(std::move(frame_.value()));
frame_.reset();
return temp_frame;
}
CompositorFrameBuilder& CompositorFrameBuilder::AddDefaultRenderPass() {
return AddRenderPass(kDefaultOutputRect, kDefaultDamageRect);
}
CompositorFrame MakeCompositorFrame(const gfx::Size& size) { CompositorFrameBuilder& CompositorFrameBuilder::AddRenderPass(
CompositorFrame frame = MakeEmptyCompositorFrame(); const gfx::Rect& output_rect,
const gfx::Rect& damage_rect) {
std::unique_ptr<RenderPass> pass = RenderPass::Create(); std::unique_ptr<RenderPass> pass = RenderPass::Create();
pass->SetNew(1, gfx::Rect(size), gfx::Rect(), gfx::Transform()); pass->SetNew(next_render_pass_id_++, output_rect, damage_rect,
frame.render_pass_list.push_back(std::move(pass)); gfx::Transform());
return frame; frame_->render_pass_list.push_back(std::move(pass));
return *this;
} }
CompositorFrame MakeEmptyCompositorFrame() { CompositorFrameBuilder& CompositorFrameBuilder::AddRenderPass(
CompositorFrame frame; std::unique_ptr<RenderPass> render_pass) {
frame.metadata.begin_frame_ack.source_id = BeginFrameArgs::kManualSourceId; // Give the render pass a unique id if one hasn't been assigned.
frame.metadata.begin_frame_ack.sequence_number = if (render_pass->id == 0)
BeginFrameArgs::kStartingFrameNumber; render_pass->id = next_render_pass_id_++;
frame.metadata.begin_frame_ack.has_damage = true; frame_->render_pass_list.push_back(std::move(render_pass));
frame.metadata.device_scale_factor = 1; return *this;
return frame; }
}
CompositorFrameBuilder& CompositorFrameBuilder::SetRenderPassList(
CompositorFrame MakeCompositorFrame( RenderPassList render_pass_list) {
std::vector<SurfaceId> activation_dependencies, DCHECK(frame_->render_pass_list.empty());
std::vector<SurfaceId> referenced_surfaces, frame_->render_pass_list = std::move(render_pass_list);
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::AddTransferableResource(
TransferableResource resource) {
frame_->resource_list.push_back(std::move(resource));
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::SetTransferableResources(
std::vector<TransferableResource> resource_list) { std::vector<TransferableResource> resource_list) {
CompositorFrame compositor_frame = test::MakeCompositorFrame(); DCHECK(frame_->resource_list.empty());
compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, true); frame_->resource_list = std::move(resource_list);
compositor_frame.metadata.activation_dependencies = return *this;
std::move(activation_dependencies); }
compositor_frame.metadata.referenced_surfaces =
std::move(referenced_surfaces); CompositorFrameBuilder& CompositorFrameBuilder::SetBeginFrameAck(
compositor_frame.resource_list = std::move(resource_list); const BeginFrameAck& ack) {
return compositor_frame; frame_->metadata.begin_frame_ack = ack;
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::SetDeviceScaleFactor(
float device_scale_factor) {
frame_->metadata.device_scale_factor = device_scale_factor;
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::AddLatencyInfo(
ui::LatencyInfo latency_info) {
frame_->metadata.latency_info.push_back(std::move(latency_info));
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::SetActivationDependencies(
std::vector<SurfaceId> activation_dependencies) {
frame_->metadata.activation_dependencies = std::move(activation_dependencies);
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::SetReferencedSurfaces(
std::vector<SurfaceId> referenced_surfaces) {
frame_->metadata.referenced_surfaces = std::move(referenced_surfaces);
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::SetFrameToken(
uint32_t frame_token) {
frame_->metadata.frame_token = frame_token;
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::SetContentSourceId(
uint32_t content_source_id) {
frame_->metadata.content_source_id = content_source_id;
return *this;
}
CompositorFrameBuilder& CompositorFrameBuilder::SetPresentationToken(
uint32_t presentation_token) {
frame_->metadata.presentation_token = presentation_token;
return *this;
}
CompositorFrame MakeDefaultCompositorFrame() {
return CompositorFrameBuilder().AddDefaultRenderPass().Build();
}
CompositorFrame MakeEmptyCompositorFrame() {
return CompositorFrameBuilder().Build();
} }
} // namespace test
} // namespace viz } // namespace viz
...@@ -7,27 +7,72 @@ ...@@ -7,27 +7,72 @@
#include <vector> #include <vector>
#include "base/optional.h"
#include "components/viz/common/quads/compositor_frame.h"
#include "components/viz/common/quads/render_pass.h"
#include "components/viz/common/resources/transferable_resource.h" #include "components/viz/common/resources/transferable_resource.h"
#include "components/viz/common/surfaces/surface_id.h" #include "components/viz/common/surfaces/surface_id.h"
#include "ui/latency/latency_info.h"
namespace viz { namespace viz {
class CompositorFrame;
namespace test { // A builder class for constructing CompositorFrames in tests. The initial
// CompositorFrame will have a valid BeginFrameAck and device_scale_factor of 1.
// At least one RenderPass must be added for the CompositorFrame to be valid.
class CompositorFrameBuilder {
public:
CompositorFrameBuilder();
~CompositorFrameBuilder();
// Creates a valid CompositorFrame. // Builds the CompositorFrame and leaves |this| in an invalid state. This can
CompositorFrame MakeCompositorFrame(const gfx::Size& size = gfx::Size(20, 20)); // only be called once.
CompositorFrame Build();
// Adds a render pass with 20x20 output_rect and empty damage_rect.
CompositorFrameBuilder& AddDefaultRenderPass();
// Adds a render pass with specified |output_rect| and |damage_rect|.
CompositorFrameBuilder& AddRenderPass(const gfx::Rect& output_rect,
const gfx::Rect& damage_rect);
CompositorFrameBuilder& AddRenderPass(
std::unique_ptr<RenderPass> render_pass);
// Sets list of render passes. The list of render passes must be empty when
// this is called.
CompositorFrameBuilder& SetRenderPassList(RenderPassList render_pass_list);
CompositorFrameBuilder& AddTransferableResource(
TransferableResource resource);
// Sets list of transferable resources. The list of transferable resources
// must be empty when this is called.
CompositorFrameBuilder& SetTransferableResources(
std::vector<TransferableResource> resource_list);
// Sets the BeginFrameAck. This replaces the default BeginFrameAck.
CompositorFrameBuilder& SetBeginFrameAck(const BeginFrameAck& ack);
CompositorFrameBuilder& SetDeviceScaleFactor(float device_scale_factor);
CompositorFrameBuilder& AddLatencyInfo(ui::LatencyInfo latency_info);
CompositorFrameBuilder& SetReferencedSurfaces(
std::vector<SurfaceId> referenced_surfaces);
CompositorFrameBuilder& SetActivationDependencies(
std::vector<SurfaceId> activation_dependencies);
CompositorFrameBuilder& SetFrameToken(uint32_t frame_token);
CompositorFrameBuilder& SetContentSourceId(uint32_t content_source_id);
CompositorFrameBuilder& SetPresentationToken(uint32_t presentation_token);
private:
base::Optional<CompositorFrame> frame_;
uint64_t next_render_pass_id_ = 1;
DISALLOW_COPY_AND_ASSIGN(CompositorFrameBuilder);
};
// Creates a CompositorFrame that has a render pass with 20x20 output_rect and
// empty damage_rect. This CompositorFrame is valid and can be sent over IPC.
CompositorFrame MakeDefaultCompositorFrame();
// Creates a CompositorFrame that will be valid once its render_pass_list is // Creates a CompositorFrame that will be valid once its render_pass_list is
// initialized. // initialized.
CompositorFrame MakeEmptyCompositorFrame(); CompositorFrame MakeEmptyCompositorFrame();
CompositorFrame MakeCompositorFrame(
std::vector<SurfaceId> activation_dependencies,
std::vector<SurfaceId> referenced_surfaces,
std::vector<TransferableResource> resource_list);
} // namespace test
} // namespace viz } // namespace viz
#endif // COMPONENTS_VIZ_TEST_COMPOSITOR_FRAME_HELPERS_H_ #endif // COMPONENTS_VIZ_TEST_COMPOSITOR_FRAME_HELPERS_H_
...@@ -71,7 +71,7 @@ void CreateRenderPass(int render_pass_id, ...@@ -71,7 +71,7 @@ void CreateRenderPass(int render_pass_id,
CompositorFrame CreateCompositorFrame(const gfx::Rect& root_rect, CompositorFrame CreateCompositorFrame(const gfx::Rect& root_rect,
RenderPass** render_pass) { RenderPass** render_pass) {
CompositorFrame root_frame = MakeCompositorFrame(); CompositorFrame root_frame = MakeDefaultCompositorFrame();
int root_id = 1; int root_id = 1;
CreateRenderPass(root_id, root_rect, gfx::Transform(), CreateRenderPass(root_id, root_rect, gfx::Transform(),
&root_frame.render_pass_list); &root_frame.render_pass_list);
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include "components/viz/common/quads/compositor_frame.h" #include "components/viz/common/quads/compositor_frame.h"
#include "components/viz/host/host_frame_sink_manager.h" #include "components/viz/host/host_frame_sink_manager.h"
#include "components/viz/service/frame_sinks/frame_sink_manager_impl.h" #include "components/viz/service/frame_sinks/frame_sink_manager_impl.h"
#include "components/viz/test/compositor_frame_helpers.h"
#include "components/viz/test/fake_host_frame_sink_client.h" #include "components/viz/test/fake_host_frame_sink_client.h"
#include "components/viz/test/mock_compositor_frame_sink_client.h" #include "components/viz/test/mock_compositor_frame_sink_client.h"
#include "content/browser/compositor/surface_utils.h" #include "content/browser/compositor/surface_utils.h"
...@@ -68,23 +69,6 @@ class StubOffscreenCanvasSurfaceClient ...@@ -68,23 +69,6 @@ class StubOffscreenCanvasSurfaceClient
DISALLOW_COPY_AND_ASSIGN(StubOffscreenCanvasSurfaceClient); DISALLOW_COPY_AND_ASSIGN(StubOffscreenCanvasSurfaceClient);
}; };
// Create a CompositorFrame suitable to send over IPC.
viz::CompositorFrame MakeCompositorFrame() {
viz::CompositorFrame frame;
frame.metadata.begin_frame_ack.source_id =
viz::BeginFrameArgs::kManualSourceId;
frame.metadata.begin_frame_ack.sequence_number =
viz::BeginFrameArgs::kStartingFrameNumber;
frame.metadata.device_scale_factor = 1.0f;
auto render_pass = viz::RenderPass::Create();
render_pass->id = 1;
render_pass->output_rect = gfx::Rect(100, 100);
frame.render_pass_list.push_back(std::move(render_pass));
return frame;
}
// Creates a closure that sets |error_variable| true when run. // Creates a closure that sets |error_variable| true when run.
base::Closure ConnectionErrorClosure(bool* error_variable) { base::Closure ConnectionErrorClosure(bool* error_variable) {
return base::Bind([](bool* error_variable) { *error_variable = true; }, return base::Bind([](bool* error_variable) { *error_variable = true; },
...@@ -180,7 +164,7 @@ TEST_F(OffscreenCanvasProviderImplTest, ...@@ -180,7 +164,7 @@ TEST_F(OffscreenCanvasProviderImplTest,
// Renderer submits a CompositorFrame with |local_id|. // Renderer submits a CompositorFrame with |local_id|.
const viz::LocalSurfaceId local_id(1, base::UnguessableToken::Create()); const viz::LocalSurfaceId local_id(1, base::UnguessableToken::Create());
compositor_frame_sink->SubmitCompositorFrame( compositor_frame_sink->SubmitCompositorFrame(
local_id, MakeCompositorFrame(), nullptr, local_id, viz::MakeDefaultCompositorFrame(), nullptr,
base::TimeTicks::Now().since_origin().InMicroseconds()); base::TimeTicks::Now().since_origin().InMicroseconds());
RunUntilIdle(); RunUntilIdle();
......
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