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

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

Issue 1821863002: Hook up ui::Compositor to Display's BeginFrameSource (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix unittests Created 4 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/display.h" 5 #include "cc/surfaces/display.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/test/null_task_runner.h" 9 #include "base/test/null_task_runner.h"
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
86 factory_.SubmitCompositorFrame(surface_id, std::move(frame), 86 factory_.SubmitCompositorFrame(surface_id, std::move(frame),
87 SurfaceFactory::DrawCallback()); 87 SurfaceFactory::DrawCallback());
88 } 88 }
89 89
90 SurfaceManager manager_; 90 SurfaceManager manager_;
91 FakeSurfaceFactoryClient surface_factory_client_; 91 FakeSurfaceFactoryClient surface_factory_client_;
92 SurfaceFactory factory_; 92 SurfaceFactory factory_;
93 TestSoftwareOutputDevice* software_output_device_; 93 TestSoftwareOutputDevice* software_output_device_;
94 scoped_ptr<FakeOutputSurface> output_surface_; 94 scoped_ptr<FakeOutputSurface> output_surface_;
95 FakeOutputSurface* output_surface_ptr_; 95 FakeOutputSurface* output_surface_ptr_;
96 FakeBeginFrameSource fake_begin_frame_source_;
97 scoped_refptr<base::NullTaskRunner> task_runner_; 96 scoped_refptr<base::NullTaskRunner> task_runner_;
98 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 97 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
99 }; 98 };
100 99
101 class TestDisplayClient : public DisplayClient { 100 class TestDisplayClient : public DisplayClient {
102 public: 101 public:
103 TestDisplayClient() {} 102 TestDisplayClient() {}
104 ~TestDisplayClient() override {} 103 ~TestDisplayClient() override {}
105 104
106 void CommitVSyncParameters(base::TimeTicks timebase,
107 base::TimeDelta interval) override {}
108 void OutputSurfaceLost() override {} 105 void OutputSurfaceLost() override {}
109 void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override {} 106 void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override {}
110 }; 107 };
111 108
112 class TestDisplayScheduler : public DisplayScheduler { 109 class TestDisplayScheduler : public DisplayScheduler {
113 public: 110 public:
114 TestDisplayScheduler(DisplaySchedulerClient* client, 111 TestDisplayScheduler(DisplaySchedulerClient* client,
115 BeginFrameSource* begin_frame_source, 112 BeginFrameSource* begin_frame_source,
116 base::NullTaskRunner* task_runner) 113 base::SingleThreadTaskRunner* task_runner)
117 : DisplayScheduler(client, begin_frame_source, task_runner, 1), 114 : DisplayScheduler(client, begin_frame_source, task_runner, 1, settings_),
118 damaged(false), 115 damaged(false),
119 display_resized_(false), 116 display_resized_(false),
120 has_new_root_surface(false), 117 has_new_root_surface(false),
121 swapped(false) { 118 swapped(false) {}
122 begin_frame_source_for_children_.reset(new FakeBeginFrameSource);
123 }
124 119
125 ~TestDisplayScheduler() override {} 120 ~TestDisplayScheduler() override {}
126 121
127 void DisplayResized() override { display_resized_ = true; } 122 void DisplayResized() override { display_resized_ = true; }
128 123
129 void SetNewRootSurface(SurfaceId root_surface_id) override { 124 void SetNewRootSurface(SurfaceId root_surface_id) override {
130 has_new_root_surface = true; 125 has_new_root_surface = true;
131 } 126 }
132 127
133 void SurfaceDamaged(SurfaceId surface_id) override { 128 void SurfaceDamaged(SurfaceId surface_id) override {
134 damaged = true; 129 damaged = true;
135 needs_draw_ = true; 130 needs_draw_ = true;
136 } 131 }
137 132
138 void DidSwapBuffers() override { swapped = true; } 133 void DidSwapBuffers() override { swapped = true; }
139 134
140 void ResetDamageForTest() { 135 void ResetDamageForTest() {
141 damaged = false; 136 damaged = false;
142 display_resized_ = false; 137 display_resized_ = false;
143 has_new_root_surface = false; 138 has_new_root_surface = false;
144 } 139 }
145 140
146 bool damaged; 141 bool damaged;
147 bool display_resized_; 142 bool display_resized_;
148 bool has_new_root_surface; 143 bool has_new_root_surface;
149 bool swapped; 144 bool swapped;
145
146 private:
147 RendererSettings settings_;
148 };
149
150 class TestDisplay : public Display {
151 public:
152 TestDisplay(DisplayClient* client,
153 SurfaceManager* manager,
154 SharedBitmapManager* bitmap_manager,
155 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
156 const RendererSettings& settings,
157 uint32_t compositor_surface_namespace)
158 : Display(client,
159 manager,
160 bitmap_manager,
161 gpu_memory_buffer_manager,
162 settings,
163 compositor_surface_namespace) {}
164
165 TestDisplayScheduler& scheduler() {
166 return *static_cast<TestDisplayScheduler*>(scheduler_.get());
167 }
168
169 protected:
170 void CreateScheduler(base::SingleThreadTaskRunner* task_runner) override {
171 scheduler_.reset(
172 new TestDisplayScheduler(this, vsync_begin_frame_source_, task_runner));
173 }
150 }; 174 };
151 175
152 void CopyCallback(bool* called, scoped_ptr<CopyOutputResult> result) { 176 void CopyCallback(bool* called, scoped_ptr<CopyOutputResult> result) {
153 *called = true; 177 *called = true;
154 } 178 }
155 179
156 // Check that frame is damaged and swapped only under correct conditions. 180 // Check that frame is damaged and swapped only under correct conditions.
157 TEST_F(DisplayTest, DisplayDamaged) { 181 TEST_F(DisplayTest, DisplayDamaged) {
158 SetUpContext(nullptr); 182 SetUpContext(nullptr);
159 TestDisplayClient client; 183 TestDisplayClient client;
160 RendererSettings settings; 184 RendererSettings settings;
161 settings.partial_swap_enabled = true; 185 settings.partial_swap_enabled = true;
162 settings.finish_rendering_on_resize = true; 186 settings.finish_rendering_on_resize = true;
163 Display display(&client, &manager_, shared_bitmap_manager_.get(), nullptr, 187 SurfaceIdAllocator allocator(3);
sunnyps 2016/03/28 23:09:48 nit: Why 3? Can we abstract this into a method on
enne (OOO) 2016/03/29 20:39:52 It's an arbitrary number. Put it in a constant to
164 settings); 188 allocator.RegisterSurfaceIdNamespace(&manager_);
189 TestDisplay display(&client, &manager_, shared_bitmap_manager_.get(), nullptr,
190 settings, allocator.id_namespace());
191 display.Initialize(std::move(output_surface_), task_runner_.get());
192 TestDisplayScheduler& scheduler = display.scheduler();
165 193
166 TestDisplayScheduler scheduler(&display, &fake_begin_frame_source_, 194 SurfaceId surface_id(allocator.GenerateId());
167 task_runner_.get());
168 display.Initialize(std::move(output_surface_), &scheduler);
169
170 SurfaceId surface_id(7u);
171 EXPECT_FALSE(scheduler.damaged); 195 EXPECT_FALSE(scheduler.damaged);
172 EXPECT_FALSE(scheduler.has_new_root_surface); 196 EXPECT_FALSE(scheduler.has_new_root_surface);
173 display.SetSurfaceId(surface_id, 1.f); 197 display.SetSurfaceId(surface_id, 1.f);
174 EXPECT_FALSE(scheduler.damaged); 198 EXPECT_FALSE(scheduler.damaged);
175 EXPECT_FALSE(scheduler.display_resized_); 199 EXPECT_FALSE(scheduler.display_resized_);
176 EXPECT_TRUE(scheduler.has_new_root_surface); 200 EXPECT_TRUE(scheduler.has_new_root_surface);
177 201
178 scheduler.ResetDamageForTest(); 202 scheduler.ResetDamageForTest();
179 display.Resize(gfx::Size(100, 100)); 203 display.Resize(gfx::Size(100, 100));
180 EXPECT_FALSE(scheduler.damaged); 204 EXPECT_FALSE(scheduler.damaged);
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
415 public: 439 public:
416 MOCK_METHOD0(shallowFinishCHROMIUM, void()); 440 MOCK_METHOD0(shallowFinishCHROMIUM, void());
417 }; 441 };
418 442
419 TEST_F(DisplayTest, Finish) { 443 TEST_F(DisplayTest, Finish) {
420 scoped_ptr<MockedContext> context(new MockedContext()); 444 scoped_ptr<MockedContext> context(new MockedContext());
421 MockedContext* context_ptr = context.get(); 445 MockedContext* context_ptr = context.get();
422 SetUpContext(std::move(context)); 446 SetUpContext(std::move(context));
423 447
424 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0); 448 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()).Times(0);
449
450 SurfaceIdAllocator allocator(3);
451 allocator.RegisterSurfaceIdNamespace(&manager_);
452 SurfaceId surface_id(allocator.GenerateId());
453
425 TestDisplayClient client; 454 TestDisplayClient client;
426 RendererSettings settings; 455 RendererSettings settings;
427 settings.partial_swap_enabled = true; 456 settings.partial_swap_enabled = true;
428 settings.finish_rendering_on_resize = true; 457 settings.finish_rendering_on_resize = true;
429 Display display(&client, &manager_, shared_bitmap_manager_.get(), nullptr, 458 TestDisplay display(&client, &manager_, shared_bitmap_manager_.get(), nullptr,
430 settings); 459 settings, surface_id.id_namespace());
460 display.Initialize(std::move(output_surface_), task_runner_.get());
431 461
432 TestDisplayScheduler scheduler(&display, &fake_begin_frame_source_,
433 task_runner_.get());
434 display.Initialize(std::move(output_surface_), &scheduler);
435
436 SurfaceId surface_id(7u);
437 display.SetSurfaceId(surface_id, 1.f); 462 display.SetSurfaceId(surface_id, 1.f);
438 463
439 display.Resize(gfx::Size(100, 100)); 464 display.Resize(gfx::Size(100, 100));
440 factory_.Create(surface_id); 465 factory_.Create(surface_id);
441 466
442 { 467 {
443 RenderPassList pass_list; 468 RenderPassList pass_list;
444 scoped_ptr<RenderPass> pass = RenderPass::Create(); 469 scoped_ptr<RenderPass> pass = RenderPass::Create();
445 pass->output_rect = gfx::Rect(0, 0, 100, 100); 470 pass->output_rect = gfx::Rect(0, 0, 100, 100);
446 pass->damage_rect = gfx::Rect(10, 10, 1, 1); 471 pass->damage_rect = gfx::Rect(10, 10, 1, 1);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 507
483 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()); 508 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM());
484 display.Resize(gfx::Size(250, 250)); 509 display.Resize(gfx::Size(250, 250));
485 testing::Mock::VerifyAndClearExpectations(context_ptr); 510 testing::Mock::VerifyAndClearExpectations(context_ptr);
486 511
487 factory_.Destroy(surface_id); 512 factory_.Destroy(surface_id);
488 } 513 }
489 514
490 } // namespace 515 } // namespace
491 } // namespace cc 516 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698