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

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

Issue 1124273004: Add SurfaceDisplayOutputSurface unittests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@displayScheduler16
Patch Set: DoesIndrectly -> DoesNotIndirectly Created 5 years, 7 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/onscreen_display_client.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "cc/surfaces/surface_display_output_surface.h"
6
7 #include "cc/surfaces/onscreen_display_client.h"
8 #include "cc/surfaces/surface_id_allocator.h"
9 #include "cc/surfaces/surface_manager.h"
10 #include "cc/test/fake_output_surface.h"
11 #include "cc/test/fake_output_surface_client.h"
12 #include "cc/test/ordered_simple_task_runner.h"
13 #include "cc/test/test_context_provider.h"
14 #include "cc/test/test_gpu_memory_buffer_manager.h"
15 #include "cc/test/test_shared_bitmap_manager.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace cc {
19 namespace {
20
21 class FakeSurfaceManager : public SurfaceManager {};
22
23 class FakeOnscreenDisplayClient : public OnscreenDisplayClient {
24 public:
25 FakeOnscreenDisplayClient(
26 SurfaceManager* manager,
27 SharedBitmapManager* bitmap_manager,
28 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
29 const RendererSettings& settings,
30 scoped_refptr<base::SingleThreadTaskRunner> task_runner)
31 : OnscreenDisplayClient(FakeOutputSurface::Create3d(),
32 manager,
33 bitmap_manager,
34 gpu_memory_buffer_manager,
35 settings,
36 task_runner) {
37 fake_output_surface_ =
38 static_cast<FakeOutputSurface*>(output_surface_.get());
39 }
40
41 FakeOutputSurface* output_surface() { return fake_output_surface_; }
42
43 protected:
44 FakeOutputSurface* fake_output_surface_;
45 };
46
47 class TestSurfaceDisplayOutputSurface : public SurfaceDisplayOutputSurface {
brianderson 2015/05/12 17:01:20 I guess this class is pretty useless for the exist
48 public:
49 TestSurfaceDisplayOutputSurface(
50 SurfaceManager* surface_manager,
51 SurfaceIdAllocator* allocator,
52 const scoped_refptr<ContextProvider>& context_provider)
53 : SurfaceDisplayOutputSurface(surface_manager,
54 allocator,
55 context_provider) {}
56 };
57
58 class SurfaceDisplayOutputSurfaceTest : public testing::Test {
59 public:
60 SurfaceDisplayOutputSurfaceTest()
61 : task_runner_(new OrderedSimpleTaskRunner()),
62 allocator_(0),
63 display_size_(1920, 1080),
64 display_rect_(display_size_),
65 display_client_(&surface_manager_,
66 &bitmap_manager_,
67 &gpu_memory_buffer_manager_,
68 renderer_settings_,
69 task_runner_),
70 context_provider_(TestContextProvider::Create()),
71 surface_display_output_surface_(&surface_manager_,
72 &allocator_,
73 context_provider_) {
74 output_surface_ = display_client_.output_surface();
75 display_client_.set_surface_output_surface(
76 &surface_display_output_surface_);
77 surface_display_output_surface_.set_display_client(&display_client_);
78 surface_display_output_surface_.BindToClient(
79 &surface_display_output_surface_client_);
80 display_client_.display()->Resize(display_size_);
81 }
82
83 ~SurfaceDisplayOutputSurfaceTest() override {}
84
85 void SetUp() override {
86 // Draw the first frame to start in an "unlocked" state.
87 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
88 render_pass->output_rect = display_rect_;
89 render_pass->damage_rect = display_rect_;
90
91 CompositorFrame frame1;
92 frame1.delegated_frame_data = make_scoped_ptr(new DelegatedFrameData);
93 frame1.delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
94 surface_display_output_surface_.SwapBuffers(&frame1);
95
96 EXPECT_EQ(output_surface_->num_sent_frames(), 0u);
97 task_runner_->RunUntilIdle();
98 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
99 }
100
101 protected:
102 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
103 SurfaceIdAllocator allocator_;
104
105 const gfx::Size display_size_;
106 const gfx::Rect display_rect_;
107 FakeOutputSurface* output_surface_;
108 FakeSurfaceManager surface_manager_;
109 TestSharedBitmapManager bitmap_manager_;
110 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
111 RendererSettings renderer_settings_;
112 FakeOnscreenDisplayClient display_client_;
113
114 scoped_refptr<TestContextProvider> context_provider_;
115
116 FakeOutputSurfaceClient surface_display_output_surface_client_;
117 TestSurfaceDisplayOutputSurface surface_display_output_surface_;
118 };
119
120 TEST_F(SurfaceDisplayOutputSurfaceTest, DamageTriggersSwapBuffers) {
121 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
122 render_pass->output_rect = display_rect_;
123 render_pass->damage_rect = display_rect_;
124
125 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
126 task_runner_->RunUntilIdle();
127 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
128
129 CompositorFrame frame1;
130 frame1.delegated_frame_data = make_scoped_ptr(new DelegatedFrameData);
131 frame1.delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
132 surface_display_output_surface_.SwapBuffers(&frame1);
133
134 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
135 task_runner_->RunUntilIdle();
136 EXPECT_EQ(output_surface_->num_sent_frames(), 2u);
137 }
138
139 TEST_F(SurfaceDisplayOutputSurfaceTest, NoDamageDoesNotTriggerSwapBuffers) {
140 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
141 render_pass->output_rect = display_rect_;
142 render_pass->damage_rect = gfx::Rect();
143
144 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
145 task_runner_->RunUntilIdle();
146 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
147
148 CompositorFrame frame1;
149 frame1.delegated_frame_data = make_scoped_ptr(new DelegatedFrameData);
150 frame1.delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
151 surface_display_output_surface_.SwapBuffers(&frame1);
152
153 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
154 task_runner_->RunUntilIdle();
155 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
156 }
157
158 TEST_F(SurfaceDisplayOutputSurfaceTest,
159 LockingResourcesDoesNotIndirectlyCauseDamage) {
160 scoped_ptr<RenderPass> render_pass = RenderPass::Create();
161 render_pass->output_rect = display_rect_;
162 render_pass->damage_rect = gfx::Rect();
163
164 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
165 task_runner_->RunUntilIdle();
166 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
167
168 surface_display_output_surface_.ForceReclaimResources();
169 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
170 task_runner_->RunPendingTasks();
171 task_runner_->RunPendingTasks();
172 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
173
174 CompositorFrame frame1;
175 frame1.delegated_frame_data = make_scoped_ptr(new DelegatedFrameData);
176 frame1.delegated_frame_data->render_pass_list.push_back(render_pass.Pass());
177 surface_display_output_surface_.SwapBuffers(&frame1);
178
179 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
180 task_runner_->RunUntilIdle();
181 EXPECT_EQ(output_surface_->num_sent_frames(), 1u);
182 }
183
184 } // namespace
185 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/onscreen_display_client.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698