| 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 1390118669004b4ee2f06ad0bde634a2b3727745..2e92f233a459fe9854290a0e521d86feb02c76cb 100644
|
| --- a/cc/trees/layer_tree_host_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_unittest.cc
|
| @@ -503,6 +503,104 @@ class LayerTreeHostTestCompositeAndReadbackBeforePreviousCommitDraws
|
| MULTI_THREAD_TEST_F(
|
| LayerTreeHostTestCompositeAndReadbackBeforePreviousCommitDraws);
|
|
|
| +class LayerTreeHostTestCompositeAndReadbackDuringForcedDraw
|
| + : public LayerTreeHostTest {
|
| + protected:
|
| + virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
|
| + // This enables forced draws after a single prepare to draw failure.
|
| + settings->timeout_and_draw_when_animation_checkerboards = true;
|
| + settings->maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
|
| + }
|
| +
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
|
| + LayerTreeHostImpl::FrameData* frame_data,
|
| + bool result) OVERRIDE {
|
| + EXPECT_GE(host_impl->active_tree()->source_frame_number(), 0);
|
| + EXPECT_LE(host_impl->active_tree()->source_frame_number(), 2);
|
| +
|
| + // Before we react to the failed draw by initiating the forced draw
|
| + // sequence, start a readback on the main thread.
|
| + if (host_impl->active_tree()->source_frame_number() == 0)
|
| + PostReadbackToMainThread();
|
| +
|
| + // Returning false will eventually result in a forced draw.
|
| + return false;
|
| + }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + // We should only draw for the readback and the forced draw.
|
| + EXPECT_GE(host_impl->active_tree()->source_frame_number(), 1);
|
| + EXPECT_LE(host_impl->active_tree()->source_frame_number(), 2);
|
| + }
|
| +
|
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
|
| + bool result) OVERRIDE {
|
| + // We should only swap for the forced draw.
|
| + EXPECT_EQ(host_impl->active_tree()->source_frame_number(), 2);
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +MULTI_THREAD_TEST_F(LayerTreeHostTestCompositeAndReadbackDuringForcedDraw);
|
| +
|
| +class LayerTreeHostTestCompositeAndReadbackAfterForcedDraw
|
| + : public LayerTreeHostTest {
|
| + protected:
|
| + virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
|
| + // This enables forced draws after a single prepare to draw failure.
|
| + settings->timeout_and_draw_when_animation_checkerboards = true;
|
| + settings->maximum_number_of_failed_draws_before_draw_is_forced_ = 1;
|
| + }
|
| +
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual bool PrepareToDrawOnThread(LayerTreeHostImpl* host_impl,
|
| + LayerTreeHostImpl::FrameData* frame_data,
|
| + bool result) OVERRIDE {
|
| + EXPECT_GE(host_impl->active_tree()->source_frame_number(), 0);
|
| + EXPECT_LE(host_impl->active_tree()->source_frame_number(), 3);
|
| +
|
| + // Returning false will eventually result in a forced draw.
|
| + return false;
|
| + }
|
| +
|
| + virtual void DidCommit() OVERRIDE {
|
| + if (layer_tree_host()->source_frame_number() == 1) {
|
| + // Avoid aborting the forced draw commit so source_frame_number
|
| + // increments.
|
| + layer_tree_host()->SetNeedsCommit();
|
| + } else if (layer_tree_host()->source_frame_number() == 2) {
|
| + // Perform a readback immediately after the forced draw's commit.
|
| + char pixels[4];
|
| + layer_tree_host()->CompositeAndReadback(&pixels, gfx::Rect(0, 0, 1, 1));
|
| + }
|
| + }
|
| +
|
| + virtual void DrawLayersOnThread(LayerTreeHostImpl* host_impl) OVERRIDE {
|
| + // We should only draw for the the forced draw, readback, and
|
| + // replacement commit.
|
| + EXPECT_GE(host_impl->active_tree()->source_frame_number(), 1);
|
| + EXPECT_LE(host_impl->active_tree()->source_frame_number(), 3);
|
| + }
|
| +
|
| + virtual void SwapBuffersOnThread(LayerTreeHostImpl* host_impl,
|
| + bool result) OVERRIDE {
|
| + // We should only swap for the forced draw and replacement commit.
|
| + EXPECT_TRUE(host_impl->active_tree()->source_frame_number() == 1 ||
|
| + host_impl->active_tree()->source_frame_number() == 3);
|
| + if (host_impl->active_tree()->source_frame_number() == 3)
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +};
|
| +
|
| +MULTI_THREAD_TEST_F(LayerTreeHostTestCompositeAndReadbackAfterForcedDraw);
|
| +
|
| // If the layerTreeHost says it can't draw, Then we should not try to draw.
|
| class LayerTreeHostTestCanDrawBlocksDrawing : public LayerTreeHostTest {
|
| public:
|
|
|