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

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

Issue 2763623002: [ui/ws] Acknowledge BeginFrames in FrameGenerator + add tests. (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | no next file » | 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 b5c9b981ec682f149f161c89b96d513f12d8bd41..e195417f3852b61ecb023bcd01729c9e3b54fe3a 100644
--- a/services/ui/ws/frame_generator_unittest.cc
+++ b/services/ui/ws/frame_generator_unittest.cc
@@ -87,7 +87,7 @@ class FakeCompositorFrameSink : public cc::CompositorFrameSink,
}
void OnDidFinishFrame(const cc::BeginFrameAck& ack) override {
- external_begin_frame_source_->DidFinishFrame(this, ack);
+ begin_frame_source_->DidFinishFrame(this, ack);
}
void SetBeginFrameSource(cc::BeginFrameSource* source) {
@@ -175,6 +175,12 @@ class FrameGeneratorTest : public testing::Test {
return compositor_frame_sink_->last_metadata();
}
+ const cc::BeginFrameAck& LastBeginFrameAckFromFrameGenerator() {
Fady Samuel 2017/03/20 18:33:13 nit: FromFrameGenerator is a bit redundant given t
Eric Seckler 2017/03/21 16:26:04 Done.
+ 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_;
@@ -193,6 +199,7 @@ TEST_F(FrameGeneratorTest, OnSurfaceCreated) {
// FrameGenerator does not request BeginFrames upon creation.
IssueBeginFrame();
EXPECT_EQ(0, NumberOfFramesReceived());
+ EXPECT_EQ(cc::BeginFrameAck(), LastBeginFrameAckFromFrameGenerator());
const cc::SurfaceId kArbitrarySurfaceId(
cc::FrameSinkId(1, 1),
@@ -213,10 +220,44 @@ TEST_F(FrameGeneratorTest, OnSurfaceCreated) {
EXPECT_EQ(1lu, referenced_surfaces.size());
EXPECT_EQ(kArbitrarySurfaceId, referenced_surfaces.front());
+ cc::BeginFrameAck expected_ack(0, 2, 2, 0, true);
+ EXPECT_EQ(expected_ack, LastBeginFrameAckFromFrameGenerator());
+ EXPECT_EQ(expected_ack, last_metadata.begin_frame_ack);
+
// FrameGenerator stops requesting BeginFrames after submitting a
// CompositorFrame.
IssueBeginFrame();
EXPECT_EQ(1, NumberOfFramesReceived());
+ EXPECT_EQ(cc::BeginFrameAck(0, 2, 2, 0, true),
+ LastBeginFrameAckFromFrameGenerator());
+}
+
+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),
+ LastBeginFrameAckFromFrameGenerator());
+
+ // When visible again, 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, LastBeginFrameAckFromFrameGenerator());
+ EXPECT_EQ(expected_ack, LastMetadata().begin_frame_ack);
}
TEST_F(FrameGeneratorTest, SetDeviceScaleFactor) {
« no previous file with comments | « services/ui/ws/frame_generator.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698