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

Unified Diff: services/ui/ws/frame_generator_unittest.cc

Issue 2763143002: Remove FrameGenerator::root_window_ (Closed)
Patch Set: Addressed comments 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | services/ui/ws/platform_display_default.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: services/ui/ws/frame_generator_unittest.cc
diff --git a/services/ui/ws/frame_generator_unittest.cc b/services/ui/ws/frame_generator_unittest.cc
index 243269982d3566e7248d1b21db35ac4cbe113c0a..86d4508789db500d68c32235fc7c074906523767 100644
--- a/services/ui/ws/frame_generator_unittest.cc
+++ b/services/ui/ws/frame_generator_unittest.cc
@@ -154,13 +154,25 @@ class FrameGeneratorTest : public testing::Test {
kRefreshRate, kTickAutomatically);
compositor_frame_sink_->SetBeginFrameSource(begin_frame_source_.get());
server_window_delegate_ = base::MakeUnique<TestServerWindowDelegate>();
- root_window_ = base::MakeUnique<ServerWindow>(server_window_delegate_.get(),
- WindowId());
- root_window_->SetVisible(true);
- frame_generator_ = base::MakeUnique<FrameGenerator>(
- root_window_.get(), std::move(compositor_frame_sink));
+ frame_generator_ =
+ base::MakeUnique<FrameGenerator>(std::move(compositor_frame_sink));
+ frame_generator_->OnWindowSizeChanged(gfx::Size(1, 2));
};
+ void InitWithSurfaceInfo() {
+ // FrameGenerator requires a valid SurfaceInfo before generating
+ // CompositorFrames.
+ const cc::SurfaceId kArbitrarySurfaceId(
+ cc::FrameSinkId(1, 1),
+ cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
+ const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
+ gfx::Size(100, 100));
+
+ frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
+ IssueBeginFrame();
+ EXPECT_EQ(1, NumberOfFramesReceived());
+ }
+
int NumberOfFramesReceived() {
return compositor_frame_sink_->number_frames_received();
}
@@ -185,19 +197,25 @@ class FrameGeneratorTest : public testing::Test {
return begin_frame_source_->LastAckForObserver(compositor_frame_sink_);
}
- ServerWindow* root_window() { return root_window_.get(); }
-
private:
FakeCompositorFrameSink* compositor_frame_sink_ = nullptr;
std::unique_ptr<cc::FakeExternalBeginFrameSource> begin_frame_source_;
std::unique_ptr<TestServerWindowDelegate> server_window_delegate_;
- std::unique_ptr<ServerWindow> root_window_;
std::unique_ptr<FrameGenerator> frame_generator_;
int next_sequence_number_ = 1;
DISALLOW_COPY_AND_ASSIGN(FrameGeneratorTest);
};
+TEST_F(FrameGeneratorTest, InvalidSurfaceInfo) {
+ // After SetUP(), frame_generator() has its |is_window_visible_| set to true
+ // and |bounds_| to an arbitrary non-empty gfx::Rect but not a valid
+ // SurfaceInfo. frame_generator() should not request BeginFrames in this
+ // state.
+ IssueBeginFrame();
+ EXPECT_EQ(0, NumberOfFramesReceived());
+}
+
TEST_F(FrameGeneratorTest, OnSurfaceCreated) {
EXPECT_EQ(0, NumberOfFramesReceived());
@@ -236,33 +254,6 @@ TEST_F(FrameGeneratorTest, OnSurfaceCreated) {
EXPECT_EQ(expected_ack, LastBeginFrameAck());
}
-TEST_F(FrameGeneratorTest, BeginFrameWhileInvisible) {
- EXPECT_EQ(0, NumberOfFramesReceived());
-
- // A valid SurfaceInfo is required for BeginFrame processing.
- const cc::SurfaceId kArbitrarySurfaceId(
- cc::FrameSinkId(1, 1),
- cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
- const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
- gfx::Size(100, 100));
- frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
- EXPECT_EQ(0, NumberOfFramesReceived());
-
- // No frames are produced while invisible but in need of BeginFrames.
- root_window()->SetVisible(false);
- IssueBeginFrame();
- EXPECT_EQ(0, NumberOfFramesReceived());
- EXPECT_EQ(cc::BeginFrameAck(0, 1, 1, 0, false), LastBeginFrameAck());
-
- // When visible again, a frame is produced.
- root_window()->SetVisible(true);
- IssueBeginFrame();
- EXPECT_EQ(1, NumberOfFramesReceived());
- cc::BeginFrameAck expected_ack(0, 2, 2, 0, true);
- EXPECT_EQ(expected_ack, LastBeginFrameAck());
- EXPECT_EQ(expected_ack, LastMetadata().begin_frame_ack);
-}
-
TEST_F(FrameGeneratorTest, SetDeviceScaleFactor) {
EXPECT_EQ(0, NumberOfFramesReceived());
const cc::SurfaceId kArbitrarySurfaceId(
@@ -298,16 +289,7 @@ TEST_F(FrameGeneratorTest, SetDeviceScaleFactor) {
}
TEST_F(FrameGeneratorTest, SetHighContrastMode) {
- // FrameGenerator requires a valid SurfaceInfo before generating
- // CompositorFrames.
- const cc::SurfaceId kArbitrarySurfaceId(
- cc::FrameSinkId(1, 1),
- cc::LocalSurfaceId(1, base::UnguessableToken::Create()));
- const cc::SurfaceInfo kArbitrarySurfaceInfo(kArbitrarySurfaceId, 1.0f,
- gfx::Size(100, 100));
- frame_generator()->OnSurfaceCreated(kArbitrarySurfaceInfo);
- IssueBeginFrame();
- EXPECT_EQ(1, NumberOfFramesReceived());
+ InitWithSurfaceInfo();
// Changing high contrast mode should trigger a BeginFrame.
frame_generator()->SetHighContrastMode(true);
@@ -321,6 +303,50 @@ TEST_F(FrameGeneratorTest, SetHighContrastMode) {
EXPECT_EQ(expected_filters, render_pass_list.front()->filters);
}
+TEST_F(FrameGeneratorTest, WindowBoundsChanged) {
+ InitWithSurfaceInfo();
+
+ // Window bounds change triggers a BeginFrame.
+ constexpr int expected_render_pass_id = 1;
+ const gfx::Size kArbitrarySize(3, 4);
+ frame_generator()->OnWindowSizeChanged(kArbitrarySize);
+ IssueBeginFrame();
+ EXPECT_EQ(2, NumberOfFramesReceived());
+ cc::RenderPass* received_render_pass = LastRenderPassList().front().get();
+ EXPECT_EQ(expected_render_pass_id, received_render_pass->id);
+ EXPECT_EQ(kArbitrarySize, received_render_pass->output_rect.size());
+ EXPECT_EQ(kArbitrarySize, received_render_pass->damage_rect.size());
+ EXPECT_EQ(gfx::Transform(), received_render_pass->transform_to_root_target);
+}
+
+// Change window bounds twice before issuing a BeginFrame. The CompositorFrame
+// submitted by frame_generator() should only has the second bounds.
+TEST_F(FrameGeneratorTest, WindowBoundsChangedTwice) {
+ InitWithSurfaceInfo();
+
+ const gfx::Size kArbitrarySize(3, 4);
+ const gfx::Size kAnotherArbitrarySize(5, 6);
+ frame_generator()->OnWindowSizeChanged(kArbitrarySize);
+ frame_generator()->OnWindowSizeChanged(kAnotherArbitrarySize);
+ IssueBeginFrame();
+ EXPECT_EQ(2, NumberOfFramesReceived());
+ cc::RenderPass* received_render_pass = LastRenderPassList().front().get();
+ EXPECT_EQ(kAnotherArbitrarySize, received_render_pass->output_rect.size());
+ EXPECT_EQ(kAnotherArbitrarySize, received_render_pass->damage_rect.size());
+
+ // frame_generator() stops requesting BeginFrames after getting one.
+ IssueBeginFrame();
+ EXPECT_EQ(2, NumberOfFramesReceived());
+}
+
+TEST_F(FrameGeneratorTest, WindowDamaged) {
+ InitWithSurfaceInfo();
+
+ frame_generator()->OnWindowDamaged();
+ IssueBeginFrame();
+ EXPECT_EQ(2, NumberOfFramesReceived());
+}
+
} // namespace test
} // namespace ws
} // namespace ui
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | services/ui/ws/platform_display_default.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698