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

Side by Side Diff: services/ui/ws/frame_generator_unittest.cc

Issue 2763143002: Remove FrameGenerator::root_window_ (Closed)
Patch Set: Created 3 years, 9 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "services/ui/ws/frame_generator.h" 5 #include "services/ui/ws/frame_generator.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "cc/output/compositor_frame_sink.h" 8 #include "cc/output/compositor_frame_sink.h"
9 #include "cc/scheduler/begin_frame_source.h" 9 #include "cc/scheduler/begin_frame_source.h"
10 #include "cc/test/begin_frame_args_test.cc" 10 #include "cc/test/begin_frame_args_test.cc"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 // testing::Test overrides: 143 // testing::Test overrides:
144 void SetUp() override { 144 void SetUp() override {
145 testing::Test::SetUp(); 145 testing::Test::SetUp();
146 146
147 std::unique_ptr<FakeCompositorFrameSink> compositor_frame_sink = 147 std::unique_ptr<FakeCompositorFrameSink> compositor_frame_sink =
148 base::MakeUnique<FakeCompositorFrameSink>(); 148 base::MakeUnique<FakeCompositorFrameSink>();
149 compositor_frame_sink_ = compositor_frame_sink.get(); 149 compositor_frame_sink_ = compositor_frame_sink.get();
150 150
151 constexpr float kRefreshRate = 0.f; 151 constexpr float kRefreshRate = 0.f;
152 constexpr bool kTickAutomatically = false; 152 constexpr bool kTickAutomatically = false;
153 constexpr bool is_window_visible = true;
153 begin_frame_source_ = base::MakeUnique<cc::FakeExternalBeginFrameSource>( 154 begin_frame_source_ = base::MakeUnique<cc::FakeExternalBeginFrameSource>(
154 kRefreshRate, kTickAutomatically); 155 kRefreshRate, kTickAutomatically);
155 compositor_frame_sink_->SetBeginFrameSource(begin_frame_source_.get()); 156 compositor_frame_sink_->SetBeginFrameSource(begin_frame_source_.get());
156 server_window_delegate_ = base::MakeUnique<TestServerWindowDelegate>(); 157 server_window_delegate_ = base::MakeUnique<TestServerWindowDelegate>();
157 root_window_ = base::MakeUnique<ServerWindow>(server_window_delegate_.get(),
158 WindowId());
159 root_window_->SetVisible(true);
160 frame_generator_ = base::MakeUnique<FrameGenerator>( 158 frame_generator_ = base::MakeUnique<FrameGenerator>(
161 root_window_.get(), std::move(compositor_frame_sink)); 159 std::move(compositor_frame_sink), is_window_visible, gfx::Rect(1, 2));
162 }; 160 };
163 161
162 void InitWithSurfaceInfo() {
163 // FrameGenerator requires a valid SurfaceInfo before generating
164 // CompositorFrames.
165 const cc::SurfaceId kArbitrarySurfaceId(
166 cc::FrameSinkId(1, 1),
167 cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
168 const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
169 gfx::Size(100, 100));
170 frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
171 IssueBeginFrame();
172 EXPECT_EQ(1, NumberOfFramesReceived());
173 }
174
164 int NumberOfFramesReceived() { 175 int NumberOfFramesReceived() {
165 return compositor_frame_sink_->number_frames_received(); 176 return compositor_frame_sink_->number_frames_received();
166 } 177 }
167 178
168 void IssueBeginFrame() { 179 void IssueBeginFrame() {
169 begin_frame_source_->TestOnBeginFrame(cc::CreateBeginFrameArgsForTesting( 180 begin_frame_source_->TestOnBeginFrame(cc::CreateBeginFrameArgsForTesting(
170 BEGINFRAME_FROM_HERE, 0, next_sequence_number_)); 181 BEGINFRAME_FROM_HERE, 0, next_sequence_number_));
171 ++next_sequence_number_; 182 ++next_sequence_number_;
172 } 183 }
173 184
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 EXPECT_EQ(kDefaultScaleFactor, last_metadata.device_scale_factor); 263 EXPECT_EQ(kDefaultScaleFactor, last_metadata.device_scale_factor);
253 264
254 frame_generator()->SetDeviceScaleFactor(kArbitraryScaleFactor); 265 frame_generator()->SetDeviceScaleFactor(kArbitraryScaleFactor);
255 IssueBeginFrame(); 266 IssueBeginFrame();
256 EXPECT_EQ(2, NumberOfFramesReceived()); 267 EXPECT_EQ(2, NumberOfFramesReceived());
257 const cc::CompositorFrameMetadata& second_last_metadata = LastMetadata(); 268 const cc::CompositorFrameMetadata& second_last_metadata = LastMetadata();
258 EXPECT_EQ(kArbitraryScaleFactor, second_last_metadata.device_scale_factor); 269 EXPECT_EQ(kArbitraryScaleFactor, second_last_metadata.device_scale_factor);
259 } 270 }
260 271
261 TEST_F(FrameGeneratorTest, SetHighContrastMode) { 272 TEST_F(FrameGeneratorTest, SetHighContrastMode) {
262 // FrameGenerator requires a valid SurfaceInfo before generating 273 InitWithSurfaceInfo();
263 // CompositorFrames.
264 const cc::SurfaceId kArbitrarySurfaceId(
265 cc::FrameSinkId(1, 1),
266 cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
267 const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
268 gfx::Size(100, 100));
269 frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
270 IssueBeginFrame();
271 EXPECT_EQ(1, NumberOfFramesReceived());
272 274
273 // Changing high contrast mode should trigger a BeginFrame. 275 // Changing high contrast mode should trigger a BeginFrame.
274 frame_generator()->SetHighContrastMode(true); 276 frame_generator()->SetHighContrastMode(true);
275 IssueBeginFrame(); 277 IssueBeginFrame();
276 EXPECT_EQ(2, NumberOfFramesReceived()); 278 EXPECT_EQ(2, NumberOfFramesReceived());
277 279
278 // Verify that the last frame has an invert filter. 280 // Verify that the last frame has an invert filter.
279 const cc::RenderPassList& render_pass_list = LastRenderPassList(); 281 const cc::RenderPassList& render_pass_list = LastRenderPassList();
280 const cc::FilterOperations expected_filters( 282 const cc::FilterOperations expected_filters(
281 {cc::FilterOperation::CreateInvertFilter(1.f)}); 283 {cc::FilterOperation::CreateInvertFilter(1.f)});
282 EXPECT_EQ(expected_filters, render_pass_list.front()->filters); 284 EXPECT_EQ(expected_filters, render_pass_list.front()->filters);
283 } 285 }
284 286
287 TEST_F(FrameGeneratorTest, VisibilityChanged) {
288 InitWithSurfaceInfo();
289
290 frame_generator()->OnWindowVisibilityChanged(false);
291 IssueBeginFrame();
292 EXPECT_EQ(1, NumberOfFramesReceived());
293
294 frame_generator()->OnWindowVisibilityChanged(true);
295 IssueBeginFrame();
296 EXPECT_EQ(2, NumberOfFramesReceived());
297 }
298
299 TEST_F(FrameGeneratorTest, WindowBoundsChanged) {
300 InitWithSurfaceInfo();
301
302 // Window bounds change triggers a BeginFrame.
303 constexpr int expected_render_pass_id = 1;
304 const gfx::Rect kArbitraryRect(3, 4);
305 frame_generator()->OnWindowBoundsChanged(kArbitraryRect);
306 IssueBeginFrame();
307 EXPECT_EQ(2, NumberOfFramesReceived());
308 cc::RenderPass* received_render_pass = LastRenderPassList().front().get();
309 EXPECT_EQ(expected_render_pass_id, received_render_pass->id);
310 EXPECT_EQ(kArbitraryRect, received_render_pass->output_rect);
311 EXPECT_EQ(kArbitraryRect, received_render_pass->damage_rect);
312 EXPECT_EQ(gfx::Transform(), received_render_pass->transform_to_root_target);
313 }
314
315 TEST_F(FrameGeneratorTest, WindowDamaged) {
316 InitWithSurfaceInfo();
317
318 frame_generator()->OnWindowDamaged();
319 IssueBeginFrame();
320 EXPECT_EQ(2, NumberOfFramesReceived());
321 }
322
285 } // namespace test 323 } // namespace test
286 } // namespace ws 324 } // namespace ws
287 } // namespace ui 325 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698