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

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: Remove debug code and fix flakiness due to uninitialized variable 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') | cc/test/ordered_simple_task_runner.cc » ('j') | 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 FakeOnscreenDisplayClient : public OnscreenDisplayClient {
22 public:
23 FakeOnscreenDisplayClient(
24 SurfaceManager* manager,
25 SharedBitmapManager* bitmap_manager,
26 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
27 const RendererSettings& settings,
28 scoped_refptr<base::SingleThreadTaskRunner> task_runner)
29 : OnscreenDisplayClient(FakeOutputSurface::Create3d(),
30 manager,
31 bitmap_manager,
32 gpu_memory_buffer_manager,
33 settings,
34 task_runner) {
35 // Ownership is passed to another object later, store a pointer
36 // to it now for future reference.
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 SurfaceDisplayOutputSurfaceTest : public testing::Test {
48 public:
49 SurfaceDisplayOutputSurfaceTest()
50 : task_runner_(new OrderedSimpleTaskRunner()),
51 allocator_(0),
52 display_size_(1920, 1080),
53 display_rect_(display_size_),
54 display_client_(&surface_manager_,
55 &bitmap_manager_,
56 &gpu_memory_buffer_manager_,
57 renderer_settings_,
58 task_runner_),
59 context_provider_(TestContextProvider::Create()),
60 surface_display_output_surface_(&surface_manager_,
61 &allocator_,
62 context_provider_) {
63 output_surface_ = display_client_.output_surface();
64 display_client_.set_surface_output_surface(
65 &surface_display_output_surface_);
66 surface_display_output_surface_.set_display_client(&display_client_);
67 surface_display_output_surface_.BindToClient(
68 &surface_display_output_surface_client_);
69 display_client_.display()->Resize(display_size_);
70
71 EXPECT_FALSE(surface_display_output_surface_client_
72 .did_lose_output_surface_called());
73 }
74
75 ~SurfaceDisplayOutputSurfaceTest() override {}
76
77 void SwapBuffersWithDamage(const gfx::Rect& damage_rect_) {
78 scoped_ptr<RenderPass> render_pass(RenderPass::Create());
79 render_pass->SetNew(RenderPassId(1, 1), display_rect_, damage_rect_,
80 gfx::Transform());
81
82 scoped_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData);
83 frame_data->render_pass_list.push_back(render_pass.Pass());
84
85 CompositorFrame frame;
86 frame.delegated_frame_data = frame_data.Pass();
87
88 surface_display_output_surface_.SwapBuffers(&frame);
89 }
90
91 void SetUp() override {
92 // Draw the first frame to start in an "unlocked" state.
93 SwapBuffersWithDamage(display_rect_);
94
95 EXPECT_EQ(0u, output_surface_->num_sent_frames());
96 task_runner_->RunUntilIdle();
97 EXPECT_EQ(1u, output_surface_->num_sent_frames());
98 }
99
100 protected:
101 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
102 SurfaceIdAllocator allocator_;
103
104 const gfx::Size display_size_;
105 const gfx::Rect display_rect_;
106 FakeOutputSurface* output_surface_;
107 SurfaceManager surface_manager_;
108 TestSharedBitmapManager bitmap_manager_;
109 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
110 RendererSettings renderer_settings_;
111 FakeOnscreenDisplayClient display_client_;
112
113 scoped_refptr<TestContextProvider> context_provider_;
114
115 FakeOutputSurfaceClient surface_display_output_surface_client_;
116 SurfaceDisplayOutputSurface surface_display_output_surface_;
117 };
118
119 TEST_F(SurfaceDisplayOutputSurfaceTest, DamageTriggersSwapBuffers) {
120 SwapBuffersWithDamage(display_rect_);
121 EXPECT_EQ(1u, output_surface_->num_sent_frames());
122 task_runner_->RunUntilIdle();
123 EXPECT_EQ(2u, output_surface_->num_sent_frames());
124 }
125
126 TEST_F(SurfaceDisplayOutputSurfaceTest, NoDamageDoesNotTriggerSwapBuffers) {
127 SwapBuffersWithDamage(gfx::Rect());
128 EXPECT_EQ(1u, output_surface_->num_sent_frames());
129 task_runner_->RunUntilIdle();
130 EXPECT_EQ(1u, output_surface_->num_sent_frames());
131 }
132
133 TEST_F(SurfaceDisplayOutputSurfaceTest,
134 LockingResourcesDoesNotIndirectlyCauseDamage) {
135 surface_display_output_surface_.ForceReclaimResources();
136 EXPECT_EQ(1u, output_surface_->num_sent_frames());
137 task_runner_->RunPendingTasks();
138 EXPECT_EQ(1u, output_surface_->num_sent_frames());
139
140 SwapBuffersWithDamage(gfx::Rect());
141 EXPECT_EQ(1u, output_surface_->num_sent_frames());
142 task_runner_->RunUntilIdle();
143 EXPECT_EQ(1u, output_surface_->num_sent_frames());
144 }
145
146 } // namespace
147 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/onscreen_display_client.h ('k') | cc/test/ordered_simple_task_runner.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698