Chromium Code Reviews| 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 e5f4583ee5986b2ebb5ecd698c891a3405e141bf..96a04ac369abab0d8b38376562eb368755e3715d 100644 |
| --- a/cc/trees/layer_tree_host_unittest.cc |
| +++ b/cc/trees/layer_tree_host_unittest.cc |
| @@ -34,6 +34,7 @@ |
| #include "cc/quads/render_pass_draw_quad.h" |
| #include "cc/quads/tile_draw_quad.h" |
| #include "cc/resources/ui_resource_manager.h" |
| +#include "cc/test/begin_frame_args_test.h" |
| #include "cc/test/fake_content_layer_client.h" |
| #include "cc/test/fake_layer_tree_host_client.h" |
| #include "cc/test/fake_output_surface.h" |
| @@ -7007,5 +7008,78 @@ 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 { |
| + // First BeginFrame will block activation, second one unblocks. |
| + impl->BlockNotifyReadyToActivateForTesting(false); |
| + |
| + EXPECT_TRUE(args.IsValid()); |
| + current_begin_frame_args_ = args; |
| + } |
| + |
| + void BeginMainFrame(const BeginFrameArgs& args) override { |
| + EXPECT_TRUE(args.IsValid()); |
| + if (!current_begin_main_frame_args_.IsValid()) |
| + current_begin_main_frame_args_ = args; |
|
brianderson
2017/03/02 19:53:36
current_begin_main_frame_args_ is written on the m
Eric Seckler
2017/03/07 12:26:56
Ah, I see. Added a copy to impl.
|
| + } |
| + |
| + void BeginCommitOnThread(LayerTreeHostImpl* impl) override { |
| + // Request another subsequent commit. That way, the first commit's |
| + // latest_confirmed_sequence_number should stay at the first BeginFrame's |
| + // sequence number. |
| + PostSetNeedsCommitToMainThread(); |
| + } |
| + |
| + 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( |
| + BeginFrameAck(current_begin_frame_args_.source_id, |
| + current_begin_frame_args_.sequence_number, |
| + current_begin_main_frame_args_.sequence_number, 0, true), |
| + frame_data_->begin_frame_ack); |
| + } |
| + |
| + void DisplayReceivedCompositorFrameOnThread( |
| + const CompositorFrame& frame) override { |
| + compositor_frame_submitted_ = true; |
| + EXPECT_EQ( |
| + BeginFrameAck(current_begin_frame_args_.source_id, |
| + current_begin_frame_args_.sequence_number, |
| + current_begin_main_frame_args_.sequence_number, 0, true), |
| + frame.metadata.begin_frame_ack); |
| + 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 |