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

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

Issue 1304063014: cc: Plumbing for BeginFrameSource based on Surfaces (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix webview Created 5 years, 2 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/surfaces/display_scheduler.cc ('k') | cc/surfaces/onscreen_display_client.h » ('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 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 "base/test/null_task_runner.h" 5 #include "base/test/null_task_runner.h"
6 #include "cc/output/compositor_frame.h" 6 #include "cc/output/compositor_frame.h"
7 #include "cc/output/copy_output_result.h" 7 #include "cc/output/copy_output_result.h"
8 #include "cc/output/delegated_frame_data.h" 8 #include "cc/output/delegated_frame_data.h"
9 #include "cc/quads/render_pass.h" 9 #include "cc/quads/render_pass.h"
10 #include "cc/resources/shared_bitmap_manager.h" 10 #include "cc/resources/shared_bitmap_manager.h"
11 #include "cc/surfaces/display.h" 11 #include "cc/surfaces/display.h"
12 #include "cc/surfaces/display_client.h" 12 #include "cc/surfaces/display_client.h"
13 #include "cc/surfaces/surface.h" 13 #include "cc/surfaces/surface.h"
14 #include "cc/surfaces/surface_factory.h" 14 #include "cc/surfaces/surface_factory.h"
15 #include "cc/surfaces/surface_factory_client.h" 15 #include "cc/surfaces/surface_factory_client.h"
16 #include "cc/surfaces/surface_id_allocator.h" 16 #include "cc/surfaces/surface_id_allocator.h"
17 #include "cc/surfaces/surface_manager.h" 17 #include "cc/surfaces/surface_manager.h"
18 #include "cc/test/fake_output_surface.h" 18 #include "cc/test/fake_output_surface.h"
19 #include "cc/test/scheduler_test_common.h" 19 #include "cc/test/scheduler_test_common.h"
20 #include "cc/test/test_shared_bitmap_manager.h" 20 #include "cc/test/test_shared_bitmap_manager.h"
21 #include "testing/gmock/include/gmock/gmock.h" 21 #include "testing/gmock/include/gmock/gmock.h"
22 #include "testing/gtest/include/gtest/gtest.h" 22 #include "testing/gtest/include/gtest/gtest.h"
23 23
24 using testing::AnyNumber; 24 using testing::AnyNumber;
25 25
26 namespace cc { 26 namespace cc {
27 namespace { 27 namespace {
28 28
29 class EmptySurfaceFactoryClient : public SurfaceFactoryClient { 29 class FakeSurfaceFactoryClient : public SurfaceFactoryClient {
30 public: 30 public:
31 FakeSurfaceFactoryClient() : begin_frame_source_(nullptr) {}
32
31 void ReturnResources(const ReturnedResourceArray& resources) override {} 33 void ReturnResources(const ReturnedResourceArray& resources) override {}
34
35 void SetBeginFrameSource(SurfaceId surface_id,
36 BeginFrameSource* begin_frame_source) override {
37 begin_frame_source_ = begin_frame_source;
38 }
39
40 BeginFrameSource* begin_frame_source() { return begin_frame_source_; }
41
42 private:
43 BeginFrameSource* begin_frame_source_;
32 }; 44 };
33 45
34 class TestSoftwareOutputDevice : public SoftwareOutputDevice { 46 class TestSoftwareOutputDevice : public SoftwareOutputDevice {
35 public: 47 public:
36 TestSoftwareOutputDevice() {} 48 TestSoftwareOutputDevice() {}
37 49
38 gfx::Rect damage_rect() const { return damage_rect_; } 50 gfx::Rect damage_rect() const { return damage_rect_; }
39 gfx::Size viewport_pixel_size() const { return viewport_pixel_size_; } 51 gfx::Size viewport_pixel_size() const { return viewport_pixel_size_; }
40 }; 52 };
41 53
42 class DisplayTest : public testing::Test { 54 class DisplayTest : public testing::Test {
43 public: 55 public:
44 DisplayTest() 56 DisplayTest()
45 : factory_(&manager_, &empty_client_), 57 : factory_(&manager_, &surface_factory_client_),
46 software_output_device_(nullptr), 58 software_output_device_(nullptr),
47 task_runner_(new base::NullTaskRunner) {} 59 task_runner_(new base::NullTaskRunner) {}
48 60
49 protected: 61 protected:
50 void SetUpContext(scoped_ptr<TestWebGraphicsContext3D> context) { 62 void SetUpContext(scoped_ptr<TestWebGraphicsContext3D> context) {
51 if (context) { 63 if (context) {
52 output_surface_ = FakeOutputSurface::Create3d( 64 output_surface_ = FakeOutputSurface::Create3d(
53 TestContextProvider::Create(context.Pass())); 65 TestContextProvider::Create(context.Pass()));
54 } else { 66 } else {
55 scoped_ptr<TestSoftwareOutputDevice> output_device( 67 scoped_ptr<TestSoftwareOutputDevice> output_device(
(...skipping 10 matching lines...) Expand all
66 pass_list->swap(frame_data->render_pass_list); 78 pass_list->swap(frame_data->render_pass_list);
67 79
68 scoped_ptr<CompositorFrame> frame(new CompositorFrame); 80 scoped_ptr<CompositorFrame> frame(new CompositorFrame);
69 frame->delegated_frame_data = frame_data.Pass(); 81 frame->delegated_frame_data = frame_data.Pass();
70 82
71 factory_.SubmitCompositorFrame(surface_id, frame.Pass(), 83 factory_.SubmitCompositorFrame(surface_id, frame.Pass(),
72 SurfaceFactory::DrawCallback()); 84 SurfaceFactory::DrawCallback());
73 } 85 }
74 86
75 SurfaceManager manager_; 87 SurfaceManager manager_;
76 EmptySurfaceFactoryClient empty_client_; 88 FakeSurfaceFactoryClient surface_factory_client_;
77 SurfaceFactory factory_; 89 SurfaceFactory factory_;
78 TestSoftwareOutputDevice* software_output_device_; 90 TestSoftwareOutputDevice* software_output_device_;
79 scoped_ptr<FakeOutputSurface> output_surface_; 91 scoped_ptr<FakeOutputSurface> output_surface_;
80 FakeOutputSurface* output_surface_ptr_; 92 FakeOutputSurface* output_surface_ptr_;
81 FakeBeginFrameSource fake_begin_frame_source_; 93 FakeBeginFrameSource fake_begin_frame_source_;
82 scoped_refptr<base::NullTaskRunner> task_runner_; 94 scoped_refptr<base::NullTaskRunner> task_runner_;
83 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 95 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
84 }; 96 };
85 97
86 class TestDisplayClient : public DisplayClient { 98 class TestDisplayClient : public DisplayClient {
87 public: 99 public:
88 TestDisplayClient() {} 100 TestDisplayClient() {}
89 ~TestDisplayClient() override {} 101 ~TestDisplayClient() override {}
90 102
91 void CommitVSyncParameters(base::TimeTicks timebase, 103 void CommitVSyncParameters(base::TimeTicks timebase,
92 base::TimeDelta interval) override {} 104 base::TimeDelta interval) override {}
93 void OutputSurfaceLost() override {} 105 void OutputSurfaceLost() override {}
94 void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override {} 106 void SetMemoryPolicy(const ManagedMemoryPolicy& policy) override {}
95 }; 107 };
96 108
97 class TestDisplayScheduler : public DisplayScheduler { 109 class TestDisplayScheduler : public DisplayScheduler {
98 public: 110 public:
99 TestDisplayScheduler(DisplaySchedulerClient* client, 111 TestDisplayScheduler(DisplaySchedulerClient* client,
100 BeginFrameSource* begin_frame_source, 112 BeginFrameSource* begin_frame_source,
101 base::NullTaskRunner* task_runner) 113 base::NullTaskRunner* task_runner)
102 : DisplayScheduler(client, begin_frame_source, task_runner, 1), 114 : DisplayScheduler(client, begin_frame_source, task_runner, 1),
103 damaged(false), 115 damaged(false),
104 display_resized_(false), 116 display_resized_(false),
105 has_new_root_surface(false), 117 has_new_root_surface(false),
106 swapped(false) {} 118 swapped(false) {
119 begin_frame_source_for_children_.reset(new FakeBeginFrameSource);
120 }
107 121
108 ~TestDisplayScheduler() override {} 122 ~TestDisplayScheduler() override {}
109 123
110 void DisplayResized() override { display_resized_ = true; } 124 void DisplayResized() override { display_resized_ = true; }
111 125
112 void SetNewRootSurface(SurfaceId root_surface_id) override { 126 void SetNewRootSurface(SurfaceId root_surface_id) override {
113 has_new_root_surface = true; 127 has_new_root_surface = true;
114 } 128 }
115 129
116 void SurfaceDamaged(SurfaceId surface_id) override { 130 void SurfaceDamaged(SurfaceId surface_id) override {
(...skipping 12 matching lines...) Expand all
129 bool damaged; 143 bool damaged;
130 bool display_resized_; 144 bool display_resized_;
131 bool has_new_root_surface; 145 bool has_new_root_surface;
132 bool swapped; 146 bool swapped;
133 }; 147 };
134 148
135 void CopyCallback(bool* called, scoped_ptr<CopyOutputResult> result) { 149 void CopyCallback(bool* called, scoped_ptr<CopyOutputResult> result) {
136 *called = true; 150 *called = true;
137 } 151 }
138 152
153 // Verify Display responds to SurfaceAggregatorClient methods properly.
154 TEST_F(DisplayTest, DisplayAsSurfaceAggregatorClient) {
155 SetUpContext(nullptr);
156 TestDisplayClient client;
157 RendererSettings settings;
158 Display display(&client, &manager_, shared_bitmap_manager_.get(), nullptr,
159 settings);
160
161 TestDisplayScheduler scheduler(&display, &fake_begin_frame_source_,
162 task_runner_.get());
163 display.Initialize(output_surface_.Pass(), &scheduler);
164
165 SurfaceId surface_id(6);
166 factory_.Create(surface_id);
167 Surface* surface = manager_.GetSurfaceForId(surface_id);
168
169 EXPECT_EQ(nullptr, surface_factory_client_.begin_frame_source());
170 display.AddSurface(surface);
171 EXPECT_NE(nullptr, surface_factory_client_.begin_frame_source());
172 display.RemoveSurface(surface);
173 EXPECT_EQ(nullptr, surface_factory_client_.begin_frame_source());
174 }
175
139 // Check that frame is damaged and swapped only under correct conditions. 176 // Check that frame is damaged and swapped only under correct conditions.
140 TEST_F(DisplayTest, DisplayDamaged) { 177 TEST_F(DisplayTest, DisplayDamaged) {
141 SetUpContext(nullptr); 178 SetUpContext(nullptr);
142 TestDisplayClient client; 179 TestDisplayClient client;
143 RendererSettings settings; 180 RendererSettings settings;
144 settings.partial_swap_enabled = true; 181 settings.partial_swap_enabled = true;
145 settings.finish_rendering_on_resize = true; 182 settings.finish_rendering_on_resize = true;
146 Display display(&client, &manager_, shared_bitmap_manager_.get(), nullptr, 183 Display display(&client, &manager_, shared_bitmap_manager_.get(), nullptr,
147 settings); 184 settings);
148 185
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after
432 469
433 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM()); 470 EXPECT_CALL(*context_ptr, shallowFinishCHROMIUM());
434 display.Resize(gfx::Size(250, 250)); 471 display.Resize(gfx::Size(250, 250));
435 testing::Mock::VerifyAndClearExpectations(context_ptr); 472 testing::Mock::VerifyAndClearExpectations(context_ptr);
436 473
437 factory_.Destroy(surface_id); 474 factory_.Destroy(surface_id);
438 } 475 }
439 476
440 } // namespace 477 } // namespace
441 } // namespace cc 478 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | cc/surfaces/onscreen_display_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698