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

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

Issue 2897053002: [cc] Remove BeginFrameAck from BFS::DidFinishFrame and update tests. (Closed)
Patch Set: fix exo compile error Created 3 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
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/direct_compositor_frame_sink.h" 5 #include "cc/surfaces/direct_compositor_frame_sink.h"
6 6
7 #include <memory> 7 #include <memory>
8 8
9 #include "base/memory/ptr_util.h" 9 #include "base/memory/ptr_util.h"
10 #include "cc/output/renderer_settings.h" 10 #include "cc/output/renderer_settings.h"
(...skipping 12 matching lines...) Expand all
23 #include "cc/test/test_context_provider.h" 23 #include "cc/test/test_context_provider.h"
24 #include "cc/test/test_gpu_memory_buffer_manager.h" 24 #include "cc/test/test_gpu_memory_buffer_manager.h"
25 #include "cc/test/test_shared_bitmap_manager.h" 25 #include "cc/test/test_shared_bitmap_manager.h"
26 #include "testing/gtest/include/gtest/gtest.h" 26 #include "testing/gtest/include/gtest/gtest.h"
27 27
28 namespace cc { 28 namespace cc {
29 namespace { 29 namespace {
30 30
31 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1); 31 static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1);
32 32
33 class ObserverTrackingBeginFrameSource : public BackToBackBeginFrameSource {
34 public:
35 using BackToBackBeginFrameSource::BackToBackBeginFrameSource;
36
37 void DidFinishFrame(BeginFrameObserver* obs,
38 const BeginFrameAck& ack) override {
39 BackToBackBeginFrameSource::DidFinishFrame(obs, ack);
40 if (obs == tracked_observer_)
41 last_ack_ = ack;
42 }
43
44 void set_tracked_observer(BeginFrameObserver* obs) {
45 tracked_observer_ = obs;
46 }
47
48 const BeginFrameAck& last_ack() const { return last_ack_; }
49
50 private:
51 BeginFrameObserver* tracked_observer_ = nullptr;
52 BeginFrameAck last_ack_;
53 };
54
55 class TestDirectCompositorFrameSink : public DirectCompositorFrameSink { 33 class TestDirectCompositorFrameSink : public DirectCompositorFrameSink {
56 public: 34 public:
57 using DirectCompositorFrameSink::DirectCompositorFrameSink; 35 using DirectCompositorFrameSink::DirectCompositorFrameSink;
58 36
59 CompositorFrameSinkSupport* support() const { return support_.get(); } 37 CompositorFrameSinkSupport* support() const { return support_.get(); }
60 }; 38 };
61 39
62 class DirectCompositorFrameSinkTest : public testing::Test { 40 class DirectCompositorFrameSinkTest : public testing::Test {
63 public: 41 public:
64 DirectCompositorFrameSinkTest() 42 DirectCompositorFrameSinkTest()
65 : now_src_(new base::SimpleTestTickClock()), 43 : now_src_(new base::SimpleTestTickClock()),
66 task_runner_(new OrderedSimpleTaskRunner(now_src_.get(), true)), 44 task_runner_(new OrderedSimpleTaskRunner(now_src_.get(), true)),
67 display_size_(1920, 1080), 45 display_size_(1920, 1080),
68 display_rect_(display_size_), 46 display_rect_(display_size_),
69 context_provider_(TestContextProvider::Create()) { 47 context_provider_(TestContextProvider::Create()) {
70 surface_manager_.RegisterFrameSinkId(kArbitraryFrameSinkId); 48 surface_manager_.RegisterFrameSinkId(kArbitraryFrameSinkId);
71 49
72 std::unique_ptr<FakeOutputSurface> display_output_surface = 50 std::unique_ptr<FakeOutputSurface> display_output_surface =
73 FakeOutputSurface::Create3d(); 51 FakeOutputSurface::Create3d();
74 display_output_surface_ = display_output_surface.get(); 52 display_output_surface_ = display_output_surface.get();
75 53
76 begin_frame_source_.reset(new ObserverTrackingBeginFrameSource( 54 begin_frame_source_.reset(new BackToBackBeginFrameSource(
77 base::MakeUnique<DelayBasedTimeSource>(task_runner_.get()))); 55 base::MakeUnique<DelayBasedTimeSource>(task_runner_.get())));
78 56
79 int max_frames_pending = 2; 57 int max_frames_pending = 2;
80 std::unique_ptr<DisplayScheduler> scheduler( 58 std::unique_ptr<DisplayScheduler> scheduler(
81 new DisplayScheduler(task_runner_.get(), max_frames_pending)); 59 new DisplayScheduler(task_runner_.get(), max_frames_pending));
82 60
83 display_.reset(new Display( 61 display_.reset(new Display(
84 &bitmap_manager_, &gpu_memory_buffer_manager_, RendererSettings(), 62 &bitmap_manager_, &gpu_memory_buffer_manager_, RendererSettings(),
85 kArbitraryFrameSinkId, begin_frame_source_.get(), 63 kArbitraryFrameSinkId, begin_frame_source_.get(),
86 std::move(display_output_surface), std::move(scheduler), 64 std::move(display_output_surface), std::move(scheduler),
87 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get()))); 65 base::MakeUnique<TextureMailboxDeleter>(task_runner_.get())));
88 compositor_frame_sink_.reset(new TestDirectCompositorFrameSink( 66 compositor_frame_sink_.reset(new TestDirectCompositorFrameSink(
89 kArbitraryFrameSinkId, &surface_manager_, display_.get(), 67 kArbitraryFrameSinkId, &surface_manager_, display_.get(),
90 context_provider_, nullptr, &gpu_memory_buffer_manager_, 68 context_provider_, nullptr, &gpu_memory_buffer_manager_,
91 &bitmap_manager_)); 69 &bitmap_manager_));
92 70
93 compositor_frame_sink_->BindToClient(&compositor_frame_sink_client_); 71 compositor_frame_sink_->BindToClient(&compositor_frame_sink_client_);
94 begin_frame_source_->set_tracked_observer(
95 compositor_frame_sink_->support());
96 display_->Resize(display_size_); 72 display_->Resize(display_size_);
97 display_->SetVisible(true); 73 display_->SetVisible(true);
98 74
99 EXPECT_FALSE( 75 EXPECT_FALSE(
100 compositor_frame_sink_client_.did_lose_compositor_frame_sink_called()); 76 compositor_frame_sink_client_.did_lose_compositor_frame_sink_called());
101 } 77 }
102 78
103 ~DirectCompositorFrameSinkTest() override { 79 ~DirectCompositorFrameSinkTest() override {
104 compositor_frame_sink_->DetachFromClient(); 80 compositor_frame_sink_->DetachFromClient();
105 } 81 }
(...skipping 23 matching lines...) Expand all
129 scoped_refptr<OrderedSimpleTaskRunner> task_runner_; 105 scoped_refptr<OrderedSimpleTaskRunner> task_runner_;
130 106
131 const gfx::Size display_size_; 107 const gfx::Size display_size_;
132 const gfx::Rect display_rect_; 108 const gfx::Rect display_rect_;
133 SurfaceManager surface_manager_; 109 SurfaceManager surface_manager_;
134 TestSharedBitmapManager bitmap_manager_; 110 TestSharedBitmapManager bitmap_manager_;
135 TestGpuMemoryBufferManager gpu_memory_buffer_manager_; 111 TestGpuMemoryBufferManager gpu_memory_buffer_manager_;
136 112
137 scoped_refptr<TestContextProvider> context_provider_; 113 scoped_refptr<TestContextProvider> context_provider_;
138 FakeOutputSurface* display_output_surface_ = nullptr; 114 FakeOutputSurface* display_output_surface_ = nullptr;
139 std::unique_ptr<ObserverTrackingBeginFrameSource> begin_frame_source_; 115 std::unique_ptr<BackToBackBeginFrameSource> begin_frame_source_;
140 std::unique_ptr<Display> display_; 116 std::unique_ptr<Display> display_;
141 FakeCompositorFrameSinkClient compositor_frame_sink_client_; 117 FakeCompositorFrameSinkClient compositor_frame_sink_client_;
142 std::unique_ptr<TestDirectCompositorFrameSink> compositor_frame_sink_; 118 std::unique_ptr<TestDirectCompositorFrameSink> compositor_frame_sink_;
143 }; 119 };
144 120
145 TEST_F(DirectCompositorFrameSinkTest, DamageTriggersSwapBuffers) { 121 TEST_F(DirectCompositorFrameSinkTest, DamageTriggersSwapBuffers) {
146 SwapBuffersWithDamage(display_rect_); 122 SwapBuffersWithDamage(display_rect_);
147 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 123 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
148 task_runner_->RunUntilIdle(); 124 task_runner_->RunUntilIdle();
149 EXPECT_EQ(2u, display_output_surface_->num_sent_frames()); 125 EXPECT_EQ(2u, display_output_surface_->num_sent_frames());
(...skipping 14 matching lines...) Expand all
164 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 140 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
165 SwapBuffersWithDamage(display_rect_); 141 SwapBuffersWithDamage(display_rect_);
166 task_runner_->RunUntilIdle(); 142 task_runner_->RunUntilIdle();
167 EXPECT_EQ(1u, display_output_surface_->num_sent_frames()); 143 EXPECT_EQ(1u, display_output_surface_->num_sent_frames());
168 display_output_surface_->set_suspended_for_recycle(false); 144 display_output_surface_->set_suspended_for_recycle(false);
169 SwapBuffersWithDamage(display_rect_); 145 SwapBuffersWithDamage(display_rect_);
170 task_runner_->RunUntilIdle(); 146 task_runner_->RunUntilIdle();
171 EXPECT_EQ(2u, display_output_surface_->num_sent_frames()); 147 EXPECT_EQ(2u, display_output_surface_->num_sent_frames());
172 } 148 }
173 149
174 class TestBeginFrameObserver : public BeginFrameObserverBase { 150 // TODO(eseckler): Add back tests for BeginFrameAck forwarding through
175 public: 151 // DirectCompositorFrameSink and CompositorFrameSinkSupport when we add plumbing
176 const BeginFrameAck& ack() const { return ack_; } 152 // of BeginFrameAcks through SurfaceObservers.
177
178 private:
179 bool OnBeginFrameDerivedImpl(const BeginFrameArgs& args) override {
180 ack_ = BeginFrameAck(args.source_id, args.sequence_number,
181 args.sequence_number, false);
182 return true;
183 }
184
185 void OnBeginFrameSourcePausedChanged(bool paused) override{};
186
187 BeginFrameAck ack_;
188 };
189
190 TEST_F(DirectCompositorFrameSinkTest, AcknowledgesBeginFramesWithDamage) {
191 // Verify that the frame sink acknowledged the BeginFrame attached to
192 // CompositorFrame submitted during SetUp().
193 EXPECT_EQ(BeginFrameAck(0, 1, 1, true), begin_frame_source_->last_ack());
194 }
195
196 TEST_F(DirectCompositorFrameSinkTest, AcknowledgesBeginFramesWithoutDamage) {
197 // Request a BeginFrame from the CompositorFrameSinkClient.
198 TestBeginFrameObserver observer;
199 compositor_frame_sink_client_.begin_frame_source()->AddObserver(&observer);
200 task_runner_->RunUntilIdle();
201 EXPECT_LE(BeginFrameArgs::kStartingFrameNumber,
202 observer.ack().sequence_number);
203 compositor_frame_sink_client_.begin_frame_source()->DidFinishFrame(
204 &observer, observer.ack());
205 compositor_frame_sink_->DidNotProduceFrame(observer.ack());
206 compositor_frame_sink_client_.begin_frame_source()->RemoveObserver(&observer);
207
208 // Verify that the frame sink acknowledged the last BeginFrame.
209 EXPECT_EQ(observer.ack(), begin_frame_source_->last_ack());
210 }
211 153
212 } // namespace 154 } // namespace
213 } // namespace cc 155 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698