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

Side by Side Diff: cc/surfaces/surfaces_pixeltest.cc

Issue 2506883002: Revert of Remove SurfaceFactory::Create and SurfaceFactory::Destroy (Closed)
Patch Set: Created 4 years, 1 month 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/surfaces/surface_unittest.cc ('k') | cc/test/test_compositor_frame_sink.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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/output/compositor_frame.h" 5 #include "cc/output/compositor_frame.h"
6 #include "cc/quads/render_pass.h" 6 #include "cc/quads/render_pass.h"
7 #include "cc/quads/solid_color_draw_quad.h" 7 #include "cc/quads/solid_color_draw_quad.h"
8 #include "cc/quads/surface_draw_quad.h" 8 #include "cc/quads/surface_draw_quad.h"
9 #include "cc/surfaces/surface.h" 9 #include "cc/surfaces/surface.h"
10 #include "cc/surfaces/surface_aggregator.h" 10 #include "cc/surfaces/surface_aggregator.h"
11 #include "cc/surfaces/surface_factory.h" 11 #include "cc/surfaces/surface_factory.h"
12 #include "cc/surfaces/surface_factory_client.h" 12 #include "cc/surfaces/surface_factory_client.h"
13 #include "cc/surfaces/surface_id_allocator.h" 13 #include "cc/surfaces/surface_id_allocator.h"
14 #include "cc/surfaces/surface_manager.h" 14 #include "cc/surfaces/surface_manager.h"
15 #include "cc/test/pixel_comparator.h" 15 #include "cc/test/pixel_comparator.h"
16 #include "cc/test/pixel_test.h" 16 #include "cc/test/pixel_test.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 18
19 #if !defined(OS_ANDROID) 19 #if !defined(OS_ANDROID)
20 20
21 namespace cc { 21 namespace cc {
22 namespace { 22 namespace {
23 23
24 static constexpr FrameSinkId kArbitraryRootFrameSinkId(1, 1); 24 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1);
25 static constexpr FrameSinkId kArbitraryChildFrameSinkId(2, 2);
26 static constexpr FrameSinkId kArbitraryLeftFrameSinkId(3, 3);
27 static constexpr FrameSinkId kArbitraryRightFrameSinkId(4, 4);
28 25
29 class EmptySurfaceFactoryClient : public SurfaceFactoryClient { 26 class EmptySurfaceFactoryClient : public SurfaceFactoryClient {
30 public: 27 public:
31 void ReturnResources(const ReturnedResourceArray& resources) override {} 28 void ReturnResources(const ReturnedResourceArray& resources) override {}
32 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {} 29 void SetBeginFrameSource(BeginFrameSource* begin_frame_source) override {}
33 }; 30 };
34 31
35 class SurfacesPixelTest : public RendererPixelTest<GLRenderer> { 32 class SurfacesPixelTest : public RendererPixelTest<GLRenderer> {
36 public: 33 public:
37 SurfacesPixelTest() 34 SurfacesPixelTest() : factory_(kArbitraryFrameSinkId, &manager_, &client_) {}
38 : factory_(kArbitraryRootFrameSinkId, &manager_, &client_) {}
39 ~SurfacesPixelTest() override { factory_.EvictSurface(); }
40 35
41 protected: 36 protected:
42 SurfaceManager manager_; 37 SurfaceManager manager_;
43 SurfaceIdAllocator allocator_; 38 SurfaceIdAllocator allocator_;
44 EmptySurfaceFactoryClient client_; 39 EmptySurfaceFactoryClient client_;
45 SurfaceFactory factory_; 40 SurfaceFactory factory_;
46 }; 41 };
47 42
48 SharedQuadState* CreateAndAppendTestSharedQuadState( 43 SharedQuadState* CreateAndAppendTestSharedQuadState(
49 RenderPass* render_pass, 44 RenderPass* render_pass,
(...skipping 29 matching lines...) Expand all
79 rect, 74 rect,
80 SK_ColorGREEN, 75 SK_ColorGREEN,
81 force_anti_aliasing_off); 76 force_anti_aliasing_off);
82 77
83 78
84 CompositorFrame root_frame; 79 CompositorFrame root_frame;
85 root_frame.render_pass_list.push_back(std::move(pass)); 80 root_frame.render_pass_list.push_back(std::move(pass));
86 81
87 LocalFrameId root_local_frame_id = allocator_.GenerateId(); 82 LocalFrameId root_local_frame_id = allocator_.GenerateId();
88 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id); 83 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id);
84 factory_.Create(root_local_frame_id);
89 factory_.SubmitCompositorFrame(root_local_frame_id, std::move(root_frame), 85 factory_.SubmitCompositorFrame(root_local_frame_id, std::move(root_frame),
90 SurfaceFactory::DrawCallback()); 86 SurfaceFactory::DrawCallback());
91 87
92 SurfaceAggregator aggregator(&manager_, resource_provider_.get(), true); 88 SurfaceAggregator aggregator(&manager_, resource_provider_.get(), true);
93 CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id); 89 CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
90 factory_.Destroy(root_local_frame_id);
94 91
95 bool discard_alpha = false; 92 bool discard_alpha = false;
96 ExactPixelComparator pixel_comparator(discard_alpha); 93 ExactPixelComparator pixel_comparator(discard_alpha);
97 RenderPassList* pass_list = &aggregated_frame.render_pass_list; 94 RenderPassList* pass_list = &aggregated_frame.render_pass_list;
98 EXPECT_TRUE(RunPixelTest(pass_list, 95 EXPECT_TRUE(RunPixelTest(pass_list,
99 base::FilePath(FILE_PATH_LITERAL("green.png")), 96 base::FilePath(FILE_PATH_LITERAL("green.png")),
100 pixel_comparator)); 97 pixel_comparator));
101 } 98 }
102 99
103 // Draws a frame with simple surface embedding. 100 // Draws a frame with simple surface embedding.
104 TEST_F(SurfacesPixelTest, DrawSimpleAggregatedFrame) { 101 TEST_F(SurfacesPixelTest, DrawSimpleAggregatedFrame) {
105 gfx::Size child_size(200, 100); 102 gfx::Size child_size(200, 100);
106 SurfaceFactory child_factory(kArbitraryChildFrameSinkId, &manager_, &client_);
107 LocalFrameId child_local_frame_id = allocator_.GenerateId(); 103 LocalFrameId child_local_frame_id = allocator_.GenerateId();
108 SurfaceId child_surface_id(child_factory.frame_sink_id(), 104 SurfaceId child_surface_id(factory_.frame_sink_id(), child_local_frame_id);
109 child_local_frame_id);
110 LocalFrameId root_local_frame_id = allocator_.GenerateId(); 105 LocalFrameId root_local_frame_id = allocator_.GenerateId();
111 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id); 106 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id);
112 107
108 factory_.Create(child_local_frame_id);
109 factory_.Create(root_local_frame_id);
113 { 110 {
114 gfx::Rect rect(device_viewport_size_); 111 gfx::Rect rect(device_viewport_size_);
115 RenderPassId id(1, 1); 112 RenderPassId id(1, 1);
116 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 113 std::unique_ptr<RenderPass> pass = RenderPass::Create();
117 pass->SetNew(id, rect, rect, gfx::Transform()); 114 pass->SetNew(id, rect, rect, gfx::Transform());
118 115
119 CreateAndAppendTestSharedQuadState( 116 CreateAndAppendTestSharedQuadState(
120 pass.get(), gfx::Transform(), device_viewport_size_); 117 pass.get(), gfx::Transform(), device_viewport_size_);
121 118
122 SurfaceDrawQuad* surface_quad = 119 SurfaceDrawQuad* surface_quad =
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
156 bool force_anti_aliasing_off = false; 153 bool force_anti_aliasing_off = false;
157 color_quad->SetNew(pass->shared_quad_state_list.back(), 154 color_quad->SetNew(pass->shared_quad_state_list.back(),
158 rect, 155 rect,
159 rect, 156 rect,
160 SK_ColorBLUE, 157 SK_ColorBLUE,
161 force_anti_aliasing_off); 158 force_anti_aliasing_off);
162 159
163 CompositorFrame child_frame; 160 CompositorFrame child_frame;
164 child_frame.render_pass_list.push_back(std::move(pass)); 161 child_frame.render_pass_list.push_back(std::move(pass));
165 162
166 child_factory.SubmitCompositorFrame(child_local_frame_id, 163 factory_.SubmitCompositorFrame(child_local_frame_id, std::move(child_frame),
167 std::move(child_frame), 164 SurfaceFactory::DrawCallback());
168 SurfaceFactory::DrawCallback());
169 } 165 }
170 166
171 SurfaceAggregator aggregator(&manager_, resource_provider_.get(), true); 167 SurfaceAggregator aggregator(&manager_, resource_provider_.get(), true);
172 CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id); 168 CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
173 169
174 bool discard_alpha = false; 170 bool discard_alpha = false;
175 ExactPixelComparator pixel_comparator(discard_alpha); 171 ExactPixelComparator pixel_comparator(discard_alpha);
176 RenderPassList* pass_list = &aggregated_frame.render_pass_list; 172 RenderPassList* pass_list = &aggregated_frame.render_pass_list;
177 EXPECT_TRUE(RunPixelTest(pass_list, 173 EXPECT_TRUE(RunPixelTest(pass_list,
178 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")), 174 base::FilePath(FILE_PATH_LITERAL("blue_yellow.png")),
179 pixel_comparator)); 175 pixel_comparator));
180 176 factory_.Destroy(root_local_frame_id);
181 child_factory.EvictSurface(); 177 factory_.Destroy(child_local_frame_id);
182 } 178 }
183 179
184 // Tests a surface quad that has a non-identity transform into its pass. 180 // Tests a surface quad that has a non-identity transform into its pass.
185 TEST_F(SurfacesPixelTest, DrawAggregatedFrameWithSurfaceTransforms) { 181 TEST_F(SurfacesPixelTest, DrawAggregatedFrameWithSurfaceTransforms) {
186 gfx::Size child_size(100, 200); 182 gfx::Size child_size(100, 200);
187 gfx::Size quad_size(100, 100); 183 gfx::Size quad_size(100, 100);
188 // Structure: 184 // Structure:
189 // root (200x200) -> left_child (100x200 @ 0x0, 185 // root (200x200) -> left_child (100x200 @ 0x0,
190 // right_child (100x200 @ 0x100) 186 // right_child (100x200 @ 0x100)
191 // left_child -> top_green_quad (100x100 @ 0x0), 187 // left_child -> top_green_quad (100x100 @ 0x0),
192 // bottom_blue_quad (100x100 @ 0x100) 188 // bottom_blue_quad (100x100 @ 0x100)
193 // right_child -> top_blue_quad (100x100 @ 0x0), 189 // right_child -> top_blue_quad (100x100 @ 0x0),
194 // bottom_green_quad (100x100 @ 0x100) 190 // bottom_green_quad (100x100 @ 0x100)
195 SurfaceFactory left_factory(kArbitraryLeftFrameSinkId, &manager_, &client_);
196 SurfaceFactory right_factory(kArbitraryRightFrameSinkId, &manager_, &client_);
197 LocalFrameId left_child_local_id = allocator_.GenerateId(); 191 LocalFrameId left_child_local_id = allocator_.GenerateId();
198 SurfaceId left_child_id(left_factory.frame_sink_id(), left_child_local_id); 192 SurfaceId left_child_id(factory_.frame_sink_id(), left_child_local_id);
199 LocalFrameId right_child_local_id = allocator_.GenerateId(); 193 LocalFrameId right_child_local_id = allocator_.GenerateId();
200 SurfaceId right_child_id(right_factory.frame_sink_id(), right_child_local_id); 194 SurfaceId right_child_id(factory_.frame_sink_id(), right_child_local_id);
201 LocalFrameId root_local_frame_id = allocator_.GenerateId(); 195 LocalFrameId root_local_frame_id = allocator_.GenerateId();
202 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id); 196 SurfaceId root_surface_id(factory_.frame_sink_id(), root_local_frame_id);
197 factory_.Create(left_child_local_id);
198 factory_.Create(right_child_local_id);
199 factory_.Create(root_local_frame_id);
203 200
204 { 201 {
205 gfx::Rect rect(device_viewport_size_); 202 gfx::Rect rect(device_viewport_size_);
206 RenderPassId id(1, 1); 203 RenderPassId id(1, 1);
207 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 204 std::unique_ptr<RenderPass> pass = RenderPass::Create();
208 pass->SetNew(id, rect, rect, gfx::Transform()); 205 pass->SetNew(id, rect, rect, gfx::Transform());
209 206
210 gfx::Transform surface_transform; 207 gfx::Transform surface_transform;
211 CreateAndAppendTestSharedQuadState( 208 CreateAndAppendTestSharedQuadState(
212 pass.get(), surface_transform, device_viewport_size_); 209 pass.get(), surface_transform, device_viewport_size_);
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 255 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
259 bottom_color_quad->SetNew(pass->shared_quad_state_list.back(), 256 bottom_color_quad->SetNew(pass->shared_quad_state_list.back(),
260 gfx::Rect(0, 100, 100, 100), 257 gfx::Rect(0, 100, 100, 100),
261 gfx::Rect(0, 100, 100, 100), 258 gfx::Rect(0, 100, 100, 100),
262 SK_ColorBLUE, 259 SK_ColorBLUE,
263 force_anti_aliasing_off); 260 force_anti_aliasing_off);
264 261
265 CompositorFrame child_frame; 262 CompositorFrame child_frame;
266 child_frame.render_pass_list.push_back(std::move(pass)); 263 child_frame.render_pass_list.push_back(std::move(pass));
267 264
268 left_factory.SubmitCompositorFrame(left_child_local_id, 265 factory_.SubmitCompositorFrame(left_child_local_id, std::move(child_frame),
269 std::move(child_frame), 266 SurfaceFactory::DrawCallback());
270 SurfaceFactory::DrawCallback());
271 } 267 }
272 268
273 { 269 {
274 gfx::Rect rect(child_size); 270 gfx::Rect rect(child_size);
275 RenderPassId id(1, 1); 271 RenderPassId id(1, 1);
276 std::unique_ptr<RenderPass> pass = RenderPass::Create(); 272 std::unique_ptr<RenderPass> pass = RenderPass::Create();
277 pass->SetNew(id, rect, rect, gfx::Transform()); 273 pass->SetNew(id, rect, rect, gfx::Transform());
278 274
279 CreateAndAppendTestSharedQuadState( 275 CreateAndAppendTestSharedQuadState(
280 pass.get(), gfx::Transform(), child_size); 276 pass.get(), gfx::Transform(), child_size);
(...skipping 11 matching lines...) Expand all
292 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>(); 288 pass->CreateAndAppendDrawQuad<SolidColorDrawQuad>();
293 bottom_color_quad->SetNew(pass->shared_quad_state_list.back(), 289 bottom_color_quad->SetNew(pass->shared_quad_state_list.back(),
294 gfx::Rect(0, 100, 100, 100), 290 gfx::Rect(0, 100, 100, 100),
295 gfx::Rect(0, 100, 100, 100), 291 gfx::Rect(0, 100, 100, 100),
296 SK_ColorGREEN, 292 SK_ColorGREEN,
297 force_anti_aliasing_off); 293 force_anti_aliasing_off);
298 294
299 CompositorFrame child_frame; 295 CompositorFrame child_frame;
300 child_frame.render_pass_list.push_back(std::move(pass)); 296 child_frame.render_pass_list.push_back(std::move(pass));
301 297
302 right_factory.SubmitCompositorFrame(right_child_local_id, 298 factory_.SubmitCompositorFrame(right_child_local_id, std::move(child_frame),
303 std::move(child_frame), 299 SurfaceFactory::DrawCallback());
304 SurfaceFactory::DrawCallback());
305 } 300 }
306 301
307 SurfaceAggregator aggregator(&manager_, resource_provider_.get(), true); 302 SurfaceAggregator aggregator(&manager_, resource_provider_.get(), true);
308 CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id); 303 CompositorFrame aggregated_frame = aggregator.Aggregate(root_surface_id);
309 304
310 bool discard_alpha = false; 305 bool discard_alpha = false;
311 ExactPixelComparator pixel_comparator(discard_alpha); 306 ExactPixelComparator pixel_comparator(discard_alpha);
312 RenderPassList* pass_list = &aggregated_frame.render_pass_list; 307 RenderPassList* pass_list = &aggregated_frame.render_pass_list;
313 EXPECT_TRUE(RunPixelTest( 308 EXPECT_TRUE(RunPixelTest(
314 pass_list, 309 pass_list,
315 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")), 310 base::FilePath(FILE_PATH_LITERAL("four_blue_green_checkers.png")),
316 pixel_comparator)); 311 pixel_comparator));
317 312
318 left_factory.EvictSurface(); 313 factory_.Destroy(root_local_frame_id);
319 right_factory.EvictSurface(); 314 factory_.Destroy(left_child_local_id);
315 factory_.Destroy(right_child_local_id);
320 } 316 }
321 317
322 } // namespace 318 } // namespace
323 } // namespace cc 319 } // namespace cc
324 320
325 #endif // !defined(OS_ANDROID) 321 #endif // !defined(OS_ANDROID)
OLDNEW
« no previous file with comments | « cc/surfaces/surface_unittest.cc ('k') | cc/test/test_compositor_frame_sink.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698