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

Side by Side 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 unified diff | Download patch
« no previous file with comments | « cc/output/compositor_frame_metadata.h ('k') | cc/surfaces/surface.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/surfaces/compositor_frame_sink_support.h" 5 #include "cc/surfaces/compositor_frame_sink_support.h"
6 6
7 #include "base/debug/stack_trace.h" 7 #include "base/debug/stack_trace.h"
8 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "cc/output/compositor_frame.h" 9 #include "cc/output/compositor_frame.h"
10 #include "cc/surfaces/compositor_frame_sink_support_client.h" 10 #include "cc/surfaces/compositor_frame_sink_support_client.h"
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 std::vector<SurfaceId> empty_surface_ids() { 64 std::vector<SurfaceId> empty_surface_ids() {
65 return std::vector<SurfaceId>(); 65 return std::vector<SurfaceId>();
66 } 66 }
67 67
68 SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) { 68 SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) {
69 return SurfaceId( 69 return SurfaceId(
70 frame_sink_id, 70 frame_sink_id,
71 LocalSurfaceId(local_id, base::UnguessableToken::Deserialize(0, 1u))); 71 LocalSurfaceId(local_id, base::UnguessableToken::Deserialize(0, 1u)));
72 } 72 }
73 73
74 CompositorFrame MakeCompositorFrame() { 74 CompositorFrame MakeCompositorFrame(std::vector<SurfaceId> embedded_surfaces,
75 std::vector<SurfaceId> referenced_surfaces,
76 TransferableResourceArray resource_list) {
75 CompositorFrame compositor_frame; 77 CompositorFrame compositor_frame;
76 compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true); 78 compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
77 return compositor_frame; 79 compositor_frame.metadata.embedded_surfaces = std::move(embedded_surfaces);
78 }
79
80 CompositorFrame MakeCompositorFrame(
81 std::vector<SurfaceId> referenced_surfaces) {
82 CompositorFrame compositor_frame;
83 compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
84 compositor_frame.metadata.referenced_surfaces =
85 std::move(referenced_surfaces);
86 return compositor_frame;
87 }
88
89 CompositorFrame MakeCompositorFrameWithResources(
90 std::vector<SurfaceId> referenced_surfaces,
91 TransferableResourceArray resource_list) {
92 CompositorFrame compositor_frame;
93 compositor_frame.metadata.begin_frame_ack = BeginFrameAck(0, 1, 1, true);
94 compositor_frame.metadata.referenced_surfaces = 80 compositor_frame.metadata.referenced_surfaces =
95 std::move(referenced_surfaces); 81 std::move(referenced_surfaces);
96 compositor_frame.resource_list = std::move(resource_list); 82 compositor_frame.resource_list = std::move(resource_list);
97 return compositor_frame; 83 return compositor_frame;
98 } 84 }
99 85
86 CompositorFrame MakeCompositorFrame() {
87 return MakeCompositorFrame(empty_surface_ids(), empty_surface_ids(),
88 TransferableResourceArray());
89 }
90
91 CompositorFrame MakeCompositorFrame(std::vector<SurfaceId> embedded_surfaces) {
92 return MakeCompositorFrame(embedded_surfaces, embedded_surfaces,
93 TransferableResourceArray());
94 }
95
96 CompositorFrame MakeCompositorFrame(
97 std::vector<SurfaceId> embedded_surfaces,
98 std::vector<SurfaceId> referenced_surfaces) {
99 return MakeCompositorFrame(std::move(embedded_surfaces),
100 std::move(referenced_surfaces),
101 TransferableResourceArray());
102 }
103
104 CompositorFrame MakeCompositorFrameWithResources(
105 std::vector<SurfaceId> embedded_surfaces,
106 TransferableResourceArray resource_list) {
107 return MakeCompositorFrame(embedded_surfaces, embedded_surfaces,
108 std::move(resource_list));
109 }
110
100 TransferableResource MakeResource(ResourceId id, 111 TransferableResource MakeResource(ResourceId id,
101 ResourceFormat format, 112 ResourceFormat format,
102 uint32_t filter, 113 uint32_t filter,
103 const gfx::Size& size) { 114 const gfx::Size& size) {
104 TransferableResource resource; 115 TransferableResource resource;
105 resource.id = id; 116 resource.id = id;
106 resource.format = format; 117 resource.format = format;
107 resource.filter = filter; 118 resource.filter = filter;
108 resource.size = size; 119 resource.size = size;
109 return resource; 120 return resource;
(...skipping 1077 matching lines...) Expand 10 before | Expand all | Expand 10 after
1187 // SurfaceDependencyTracker is in the process of activating surfaces. This 1198 // SurfaceDependencyTracker is in the process of activating surfaces. This
1188 // should not cause a crash or use-after-free. 1199 // should not cause a crash or use-after-free.
1189 for (int i = 0; i < 3; ++i) { 1200 for (int i = 0; i < 3; ++i) {
1190 begin_frame_source()->TestOnBeginFrame(args); 1201 begin_frame_source()->TestOnBeginFrame(args);
1191 EXPECT_TRUE(dependency_tracker().has_deadline()); 1202 EXPECT_TRUE(dependency_tracker().has_deadline());
1192 } 1203 }
1193 begin_frame_source()->TestOnBeginFrame(args); 1204 begin_frame_source()->TestOnBeginFrame(args);
1194 EXPECT_FALSE(dependency_tracker().has_deadline()); 1205 EXPECT_FALSE(dependency_tracker().has_deadline());
1195 } 1206 }
1196 1207
1208 // This test verifies that a CompositorFrame will only blocked on embedded
1209 // surfaces but not on other retained surface IDs in the CompositorFrame.
1210 TEST_F(CompositorFrameSinkSupportTest, OnlyBlockOnEmbeddedSurfaces) {
1211 const SurfaceId display_id = MakeSurfaceId(kDisplayFrameSink, 1);
1212 const SurfaceId parent_id1 = MakeSurfaceId(kParentFrameSink, 1);
1213 const SurfaceId parent_id2 = MakeSurfaceId(kParentFrameSink, 2);
1214
1215 display_support().SubmitCompositorFrame(
1216 display_id.local_surface_id(),
1217 MakeCompositorFrame({parent_id1}, {parent_id1, parent_id2}));
1218
1219 EXPECT_TRUE(display_surface()->HasPendingFrame());
1220 EXPECT_FALSE(display_surface()->HasActiveFrame());
1221 EXPECT_TRUE(dependency_tracker().has_deadline());
1222
1223 // Verify that the display CompositorFrame will only block on |parent_id1| but
1224 // not |parent_id2|.
1225 EXPECT_THAT(display_surface()->blocking_surfaces(),
1226 UnorderedElementsAre(parent_id1));
1227 // Verify that the display CompositorFrame holds refernces to both
1228 // |parent_id1| and |parent_id2|.
1229 EXPECT_THAT(GetChildReferences(display_id),
1230 UnorderedElementsAre(parent_id1, parent_id2));
1231
1232 // Submitting a CompositorFrame with |parent_id1| should unblock the display
1233 // CompositorFrame.
1234 parent_support().SubmitCompositorFrame(parent_id1.local_surface_id(),
1235 MakeCompositorFrame());
1236
1237 EXPECT_FALSE(dependency_tracker().has_deadline());
1238 EXPECT_FALSE(display_surface()->HasPendingFrame());
1239 EXPECT_TRUE(display_surface()->HasActiveFrame());
1240 EXPECT_THAT(display_surface()->blocking_surfaces(), IsEmpty());
1241 EXPECT_THAT(GetChildReferences(display_id),
1242 UnorderedElementsAre(parent_id1, parent_id2));
1243 }
1244
1197 } // namespace test 1245 } // namespace test
1198 } // namespace cc 1246 } // namespace cc
OLDNEW
« 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