| Index: cc/surfaces/compositor_frame_sink_support_unittest.cc
|
| diff --git a/cc/surfaces/compositor_frame_sink_support_unittest.cc b/cc/surfaces/compositor_frame_sink_support_unittest.cc
|
| index 44771bfffaaa919917cefdf9d9ddd0cc19da079f..319471a9296c4d5b16daf5527727ca74d117b386 100644
|
| --- a/cc/surfaces/compositor_frame_sink_support_unittest.cc
|
| +++ b/cc/surfaces/compositor_frame_sink_support_unittest.cc
|
| @@ -71,30 +71,41 @@ SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) {
|
| LocalSurfaceId(local_id, base::UnguessableToken::Deserialize(0, 1u)));
|
| }
|
|
|
| -CompositorFrame MakeCompositorFrame() {
|
| +CompositorFrame MakeCompositorFrame(std::vector<SurfaceId> embedded_surfaces,
|
| + std::vector<SurfaceId> referenced_surfaces,
|
| + TransferableResourceArray resource_list) {
|
| CompositorFrame compositor_frame;
|
| compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
|
| + compositor_frame.metadata.embedded_surfaces = std::move(embedded_surfaces);
|
| + compositor_frame.metadata.referenced_surfaces =
|
| + std::move(referenced_surfaces);
|
| + compositor_frame.resource_list = std::move(resource_list);
|
| return compositor_frame;
|
| }
|
|
|
| +CompositorFrame MakeCompositorFrame() {
|
| + return MakeCompositorFrame(empty_surface_ids(), empty_surface_ids(),
|
| + TransferableResourceArray());
|
| +}
|
| +
|
| +CompositorFrame MakeCompositorFrame(std::vector<SurfaceId> embedded_surfaces) {
|
| + return MakeCompositorFrame(embedded_surfaces, embedded_surfaces,
|
| + TransferableResourceArray());
|
| +}
|
| +
|
| CompositorFrame MakeCompositorFrame(
|
| + std::vector<SurfaceId> embedded_surfaces,
|
| std::vector<SurfaceId> referenced_surfaces) {
|
| - CompositorFrame compositor_frame;
|
| - compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
|
| - compositor_frame.metadata.referenced_surfaces =
|
| - std::move(referenced_surfaces);
|
| - return compositor_frame;
|
| + return MakeCompositorFrame(std::move(embedded_surfaces),
|
| + std::move(referenced_surfaces),
|
| + TransferableResourceArray());
|
| }
|
|
|
| CompositorFrame MakeCompositorFrameWithResources(
|
| - std::vector<SurfaceId> referenced_surfaces,
|
| + std::vector<SurfaceId> embedded_surfaces,
|
| TransferableResourceArray resource_list) {
|
| - CompositorFrame compositor_frame;
|
| - compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
|
| - compositor_frame.metadata.referenced_surfaces =
|
| - std::move(referenced_surfaces);
|
| - compositor_frame.resource_list = std::move(resource_list);
|
| - return compositor_frame;
|
| + return MakeCompositorFrame(embedded_surfaces, embedded_surfaces,
|
| + std::move(resource_list));
|
| }
|
|
|
| TransferableResource MakeResource(ResourceId id,
|
| @@ -1194,5 +1205,42 @@ TEST_F(CompositorFrameSinkSupportTest, GarbageCollectionOnDeadline) {
|
| EXPECT_FALSE(dependency_tracker().has_deadline());
|
| }
|
|
|
| +// This test verifies that a CompositorFrame will only blocked on embedded
|
| +// surfaces but not on other retained surface IDs in the CompositorFrame.
|
| +TEST_F(CompositorFrameSinkSupportTest, OnlyBlockOnEmbeddedSurfaces) {
|
| + const SurfaceId display_id = MakeSurfaceId(kDisplayFrameSink, 1);
|
| + const SurfaceId parent_id1 = MakeSurfaceId(kParentFrameSink, 1);
|
| + const SurfaceId parent_id2 = MakeSurfaceId(kParentFrameSink, 2);
|
| +
|
| + display_support().SubmitCompositorFrame(
|
| + display_id.local_surface_id(),
|
| + MakeCompositorFrame({parent_id1}, {parent_id1, parent_id2}));
|
| +
|
| + EXPECT_TRUE(display_surface()->HasPendingFrame());
|
| + EXPECT_FALSE(display_surface()->HasActiveFrame());
|
| + EXPECT_TRUE(dependency_tracker().has_deadline());
|
| +
|
| + // Verify that the display CompositorFrame will only block on |parent_id1| but
|
| + // not |parent_id2|.
|
| + EXPECT_THAT(display_surface()->blocking_surfaces(),
|
| + UnorderedElementsAre(parent_id1));
|
| + // Verify that the display CompositorFrame holds refernces to both
|
| + // |parent_id1| and |parent_id2|.
|
| + EXPECT_THAT(GetChildReferences(display_id),
|
| + UnorderedElementsAre(parent_id1, parent_id2));
|
| +
|
| + // Submitting a CompositorFrame with |parent_id1| should unblock the display
|
| + // CompositorFrame.
|
| + parent_support().SubmitCompositorFrame(parent_id1.local_surface_id(),
|
| + MakeCompositorFrame());
|
| +
|
| + EXPECT_FALSE(dependency_tracker().has_deadline());
|
| + EXPECT_FALSE(display_surface()->HasPendingFrame());
|
| + EXPECT_TRUE(display_surface()->HasActiveFrame());
|
| + EXPECT_THAT(display_surface()->blocking_surfaces(), IsEmpty());
|
| + EXPECT_THAT(GetChildReferences(display_id),
|
| + UnorderedElementsAre(parent_id1, parent_id2));
|
| +}
|
| +
|
| } // namespace test
|
| } // namespace cc
|
|
|