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

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

Issue 2337913003: Fork cc::OutputSurface into cc::CompositorFrameSink. (Closed)
Patch Set: cfsfork: rebase Created 4 years, 3 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/surface_display_output_surface.h" 5 #include "cc/surfaces/direct_compositor_frame_sink.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "cc/output/renderer_settings.h" 9 #include "cc/output/renderer_settings.h"
10 #include "cc/output/texture_mailbox_deleter.h" 10 #include "cc/output/texture_mailbox_deleter.h"
11 #include "cc/scheduler/begin_frame_source.h" 11 #include "cc/scheduler/begin_frame_source.h"
12 #include "cc/scheduler/delay_based_time_source.h" 12 #include "cc/scheduler/delay_based_time_source.h"
13 #include "cc/surfaces/display.h" 13 #include "cc/surfaces/display.h"
14 #include "cc/surfaces/display_scheduler.h" 14 #include "cc/surfaces/display_scheduler.h"
15 #include "cc/surfaces/surface_id_allocator.h" 15 #include "cc/surfaces/surface_id_allocator.h"
16 #include "cc/surfaces/surface_manager.h" 16 #include "cc/surfaces/surface_manager.h"
17 #include "cc/test/fake_compositor_frame_sink_client.h"
17 #include "cc/test/fake_output_surface.h" 18 #include "cc/test/fake_output_surface.h"
18 #include "cc/test/fake_output_surface_client.h"
19 #include "cc/test/ordered_simple_task_runner.h" 19 #include "cc/test/ordered_simple_task_runner.h"
20 #include "cc/test/test_context_provider.h" 20 #include "cc/test/test_context_provider.h"
21 #include "cc/test/test_gpu_memory_buffer_manager.h" 21 #include "cc/test/test_gpu_memory_buffer_manager.h"
22 #include "cc/test/test_shared_bitmap_manager.h" 22 #include "cc/test/test_shared_bitmap_manager.h"
23 #include "testing/gtest/include/gtest/gtest.h" 23 #include "testing/gtest/include/gtest/gtest.h"
24 24
25 namespace cc { 25 namespace cc {
26 namespace { 26 namespace {
27 27
28 static constexpr int kArbitraryClientId = 0; 28 static constexpr int kArbitraryClientId = 0;
29 29
30 class SurfaceDisplayOutputSurfaceTest : public testing::Test { 30 class DirectCompositorFrameSinkTest : public testing::Test {
31 public: 31 public:
32 SurfaceDisplayOutputSurfaceTest() 32 DirectCompositorFrameSinkTest()
33 : now_src_(new base::SimpleTestTickClock()), 33 : now_src_(new base::SimpleTestTickClock()),
34 task_runner_(new OrderedSimpleTaskRunner(now_src_.get(), true)), 34 task_runner_(new OrderedSimpleTaskRunner(now_src_.get(), true)),
35 allocator_(kArbitraryClientId), 35 allocator_(kArbitraryClientId),
36 display_size_(1920, 1080), 36 display_size_(1920, 1080),
37 display_rect_(display_size_), 37 display_rect_(display_size_),
38 context_provider_(TestContextProvider::Create()) { 38 context_provider_(TestContextProvider::Create()) {
39 surface_manager_.RegisterSurfaceClientId(allocator_.client_id()); 39 surface_manager_.RegisterSurfaceClientId(allocator_.client_id());
40 40
41 std::unique_ptr<FakeOutputSurface> display_output_surface = 41 std::unique_ptr<FakeOutputSurface> display_output_surface =
42 FakeOutputSurface::Create3d(); 42 FakeOutputSurface::Create3d();
43 display_output_surface_ = display_output_surface.get(); 43 display_output_surface_ = display_output_surface.get();
44 44
45 std::unique_ptr<BeginFrameSource> begin_frame_source( 45 std::unique_ptr<BeginFrameSource> begin_frame_source(
46 new BackToBackBeginFrameSource( 46 new BackToBackBeginFrameSource(
47 base::MakeUnique<DelayBasedTimeSource>(task_runner_.get()))); 47 base::MakeUnique<DelayBasedTimeSource>(task_runner_.get())));
48 48
49 int max_frames_pending = 2; 49 int max_frames_pending = 2;
50 std::unique_ptr<DisplayScheduler> scheduler(new DisplayScheduler( 50 std::unique_ptr<DisplayScheduler> scheduler(new DisplayScheduler(
51 begin_frame_source.get(), task_runner_.get(), max_frames_pending)); 51 begin_frame_source.get(), task_runner_.get(), max_frames_pending));
52 52
53 display_.reset(new Display( 53 display_.reset(new Display(
54 &bitmap_manager_, &gpu_memory_buffer_manager_, RendererSettings(), 54 &bitmap_manager_, &gpu_memory_buffer_manager_, RendererSettings(),
55 std::move(begin_frame_source), std::move(display_output_surface), 55 std::move(begin_frame_source), std::move(display_output_surface),
56 std::move(scheduler), 56 std::move(scheduler),
57 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get()))); 57 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get())));
58 delegated_output_surface_.reset(new SurfaceDisplayOutputSurface( 58 compositor_frame_sink_.reset(new DirectCompositorFrameSink(
59 &surface_manager_, &allocator_, display_.get(), context_provider_, 59 &surface_manager_, &allocator_, display_.get(), context_provider_,
60 nullptr)); 60 nullptr));
61 61
62 delegated_output_surface_->BindToClient(&delegated_output_surface_client_); 62 compositor_frame_sink_->BindToClient(&compositor_frame_sink_client_);
63 display_->Resize(display_size_); 63 display_->Resize(display_size_);
64 display_->SetVisible(true); 64 display_->SetVisible(true);
65 65
66 EXPECT_FALSE( 66 EXPECT_FALSE(
67 delegated_output_surface_client_.did_lose_output_surface_called()); 67 compositor_frame_sink_client_.did_lose_compositor_frame_sink_called());
68 } 68 }
69 69
70 ~SurfaceDisplayOutputSurfaceTest() override {} 70 ~DirectCompositorFrameSinkTest() override {}
71 71
72 void SwapBuffersWithDamage(const gfx::Rect& damage_rect) { 72 void SwapBuffersWithDamage(const gfx::Rect& damage_rect) {
73 std::unique_ptr<RenderPass> render_pass(RenderPass::Create()); 73 std::unique_ptr<RenderPass> render_pass(RenderPass::Create());
74 render_pass->SetNew(RenderPassId(1, 1), display_rect_, damage_rect, 74 render_pass->SetNew(RenderPassId(1, 1), display_rect_, damage_rect,
75 gfx::Transform()); 75 gfx::Transform());
76 76
77 std::unique_ptr<DelegatedFrameData> frame_data(new DelegatedFrameData); 77 auto frame_data = base::MakeUnique<DelegatedFrameData>();
78 frame_data->render_pass_list.push_back(std::move(render_pass)); 78 frame_data->render_pass_list.push_back(std::move(render_pass));
79 79
80 CompositorFrame frame; 80 CompositorFrame frame;
81 frame.delegated_frame_data = std::move(frame_data); 81 frame.delegated_frame_data = std::move(frame_data);
82 82
83 delegated_output_surface_->SwapBuffers(std::move(frame)); 83 compositor_frame_sink_->SwapBuffers(std::move(frame));
84 } 84 }
85 85
86 void SetUp() override { 86 void SetUp() override {
87 // Draw the first frame to start in an "unlocked" state. 87 // Draw the first frame to start in an "unlocked" state.
88 SwapBuffersWithDamage(display_rect_); 88 SwapBuffersWithDamage(display_rect_);
89 89
90 EXPECT_EQ(0u, display_output_surface_->num_sent_frames()); 90 EXPECT_EQ(0u, display_output_surface_->num_sent_frames());
91 task_runner_->RunUntilIdle(); 91 task_runner_->RunUntilIdle();
92 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 92 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
93 } 93 }
94 94
95 protected: 95 protected:
96 std::unique_ptr<base::SimpleTestTickClock> now_src_; 96 std::unique_ptr<base::SimpleTestTickClock> now_src_;
97 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 97 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
98 SurfaceIdAllocator allocator_; 98 SurfaceIdAllocator allocator_;
99 99
100 const gfx::Size display_size_; 100 const gfx::Size display_size_;
101 const gfx::Rect display_rect_; 101 const gfx::Rect display_rect_;
102 SurfaceManager surface_manager_; 102 SurfaceManager surface_manager_;
103 TestSharedBitmapManager bitmap_manager_; 103 TestSharedBitmapManager bitmap_manager_;
104 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; 104 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
105 105
106 scoped_refptr<TestContextProvider> context_provider_; 106 scoped_refptr<TestContextProvider> context_provider_;
107 FakeOutputSurface* display_output_surface_ = nullptr; 107 FakeOutputSurface* display_output_surface_ = nullptr;
108 std::unique_ptr<Display> display_; 108 std::unique_ptr<Display> display_;
109 FakeOutputSurfaceClient delegated_output_surface_client_; 109 FakeCompositorFrameSinkClient compositor_frame_sink_client_;
110 std::unique_ptr<SurfaceDisplayOutputSurface> delegated_output_surface_; 110 std::unique_ptr<DirectCompositorFrameSink> compositor_frame_sink_;
111 }; 111 };
112 112
113 TEST_F(SurfaceDisplayOutputSurfaceTest, DamageTriggersSwapBuffers) { 113 TEST_F(DirectCompositorFrameSinkTest, DamageTriggersSwapBuffers) {
114 SwapBuffersWithDamage(display_rect_); 114 SwapBuffersWithDamage(display_rect_);
115 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 115 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
116 task_runner_->RunUntilIdle(); 116 task_runner_->RunUntilIdle();
117 EXPECT_EQ(2u, display_output_surface_->num_sent_frames()); 117 EXPECT_EQ(2u, display_output_surface_->num_sent_frames());
118 } 118 }
119 119
120 TEST_F(SurfaceDisplayOutputSurfaceTest, NoDamageDoesNotTriggerSwapBuffers) { 120 TEST_F(DirectCompositorFrameSinkTest, NoDamageDoesNotTriggerSwapBuffers) {
121 SwapBuffersWithDamage(gfx::Rect()); 121 SwapBuffersWithDamage(gfx::Rect());
122 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 122 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
123 task_runner_->RunUntilIdle(); 123 task_runner_->RunUntilIdle();
124 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 124 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
125 } 125 }
126 126
127 TEST_F(SurfaceDisplayOutputSurfaceTest, SuspendedDoesNotTriggerSwapBuffers) { 127 TEST_F(DirectCompositorFrameSinkTest, SuspendedDoesNotTriggerSwapBuffers) {
128 SwapBuffersWithDamage(display_rect_); 128 SwapBuffersWithDamage(display_rect_);
129 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 129 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
130 display_output_surface_->set_suspended_for_recycle(true); 130 display_output_surface_->set_suspended_for_recycle(true);
131 task_runner_->RunUntilIdle(); 131 task_runner_->RunUntilIdle();
132 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 132 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
133 SwapBuffersWithDamage(display_rect_); 133 SwapBuffersWithDamage(display_rect_);
134 task_runner_->RunUntilIdle(); 134 task_runner_->RunUntilIdle();
135 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 135 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
136 display_output_surface_->set_suspended_for_recycle(false); 136 display_output_surface_->set_suspended_for_recycle(false);
137 SwapBuffersWithDamage(display_rect_); 137 SwapBuffersWithDamage(display_rect_);
138 task_runner_->RunUntilIdle(); 138 task_runner_->RunUntilIdle();
139 EXPECT_EQ(2u, display_output_surface_->num_sent_frames()); 139 EXPECT_EQ(2u, display_output_surface_->num_sent_frames());
140 } 140 }
141 141
142 TEST_F(SurfaceDisplayOutputSurfaceTest, 142 TEST_F(DirectCompositorFrameSinkTest,
143 LockingResourcesDoesNotIndirectlyCauseDamage) { 143 LockingResourcesDoesNotIndirectlyCauseDamage) {
144 delegated_output_surface_->ForceReclaimResources(); 144 compositor_frame_sink_->ForceReclaimResources();
145 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 145 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
146 task_runner_->RunPendingTasks(); 146 task_runner_->RunPendingTasks();
147 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 147 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
148 148
149 SwapBuffersWithDamage(gfx::Rect()); 149 SwapBuffersWithDamage(gfx::Rect());
150 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 150 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
151 task_runner_->RunUntilIdle(); 151 task_runner_->RunUntilIdle();
152 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 152 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
153 } 153 }
154 154
155 } // namespace 155 } // namespace
156 } // namespace cc 156 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698