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

Unified Diff: cc/trees/layer_tree_host_unittest.cc

Issue 2712983003: [cc] Set BeginFrame sequence numbers on CompositorFrames from Scheduler. (Closed)
Patch Set: sync Created 3 years, 10 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
Index: cc/trees/layer_tree_host_unittest.cc
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 751366c76ef5be61c37f88054d5d91e8753ee023..3eb52fdb65a94d9cc9d28584ac3ea3d41cd52e2c 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -7016,5 +7016,83 @@ class LayerTreeHostTestSubmitFrameResources : public LayerTreeHostTest {
SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestSubmitFrameResources);
+class LayerTreeHostTestBeginFrameSequenceNumbers : public LayerTreeHostTest {
+ protected:
+ void BeginTest() override { PostSetNeedsCommitToMainThread(); }
+
+ void WillBeginImplFrameOnThread(LayerTreeHostImpl* impl,
+ const BeginFrameArgs& args) override {
+ if (current_begin_frame_args_.IsValid()) {
brianderson 2017/02/24 01:08:36 This if condition probably isn't needed.
Eric Seckler 2017/02/27 11:50:32 Done.
+ // We've received a second BeginFrame, stop blocking activation.
+ impl->BlockNotifyReadyToActivateForTesting(false);
+ }
+
+ EXPECT_TRUE(args.IsValid());
+ current_begin_frame_args_ = args;
+ }
+
+ void WillBeginMainFrame() override {
+ // Request another commit but defer it indefinitely. That way, the current
+ // commit's latest_confirmed_sequence_number should stay at the first
+ // BeginFrame's sequence number.
+ layer_tree_host()->SetDeferCommits(true);
brianderson 2017/02/24 01:08:37 I think you can avoid this if you use the BeginCom
Eric Seckler 2017/02/27 11:50:32 Not entirely sure whether I understood this correc
+ PostSetNeedsCommitToMainThread();
+ }
+
+ void BeginMainFrame(const BeginFrameArgs& args) override {
+ EXPECT_FALSE(current_begin_main_frame_args_.IsValid());
+ EXPECT_TRUE(args.IsValid());
+ current_begin_main_frame_args_ = args;
+ }
+
+ void WillCommitCompleteOnThread(LayerTreeHostImpl* impl) override {
+ // Defer current commit's activation until second BeginFrame.
+ impl->BlockNotifyReadyToActivateForTesting(true);
+ }
+
+ DrawResult PrepareToDrawOnThread(LayerTreeHostImpl* impl,
+ LayerTreeHostImpl::FrameData* frame_data,
+ DrawResult draw_result) override {
+ // We should only draw in second BeginFrame.
+ EXPECT_TRUE(current_begin_main_frame_args_.IsValid());
+ EXPECT_LT(current_begin_main_frame_args_.sequence_number,
+ current_begin_frame_args_.sequence_number);
+ frame_data_ = frame_data;
+ return draw_result;
+ }
+
+ void DrawLayersOnThread(LayerTreeHostImpl* impl) override {
+ EXPECT_TRUE(frame_data_);
+ EXPECT_EQ(current_begin_frame_args_.source_id,
+ frame_data_->begin_frame_source_id);
+ EXPECT_EQ(current_begin_frame_args_.sequence_number,
+ frame_data_->begin_frame_sequence_number);
+ EXPECT_EQ(current_begin_main_frame_args_.sequence_number,
+ frame_data_->latest_confirmed_begin_frame_sequence_number);
+ }
+
+ void DisplayReceivedCompositorFrameOnThread(
+ const CompositorFrame& frame) override {
+ compositor_frame_submitted_ = true;
+ EXPECT_EQ(current_begin_frame_args_.source_id,
+ frame.metadata.begin_frame_source_id);
+ EXPECT_EQ(current_begin_frame_args_.sequence_number,
+ frame.metadata.begin_frame_sequence_number);
+ EXPECT_EQ(current_begin_main_frame_args_.sequence_number,
+ frame.metadata.latest_confirmed_begin_frame_sequence_number);
+ EndTest();
+ }
+
+ void AfterTest() override { EXPECT_TRUE(compositor_frame_submitted_); }
+
+ private:
+ bool compositor_frame_submitted_;
+ BeginFrameArgs current_begin_frame_args_;
+ BeginFrameArgs current_begin_main_frame_args_;
+ LayerTreeHostImpl::FrameData* frame_data_;
+};
+
+MULTI_THREAD_BLOCKNOTIFY_TEST_F(LayerTreeHostTestBeginFrameSequenceNumbers);
+
} // namespace
} // namespace cc

Powered by Google App Engine
This is Rietveld 408576698