Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: cc/surfaces/compositor_frame_sink_support_unittest.cc

Issue 2803913004: cc: Introduce embedded_surfaces in metadata for surface Ids in draw quads (Closed)
Patch Set: Addressed Dana's comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/output/compositor_frame_metadata.h ('k') | cc/surfaces/surface.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « cc/output/compositor_frame_metadata.h ('k') | cc/surfaces/surface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698