diff options
author | enne <enne@chromium.org> | 2015-06-12 16:56:32 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-06-12 23:56:58 +0000 |
commit | f44fcf9ee12b4c1b7e2c1039f639a3101d1517e3 (patch) | |
tree | abe6fa901b67a70c2810b6a245e32d41da160984 /cc/trees/layer_tree_host_unittest.cc | |
parent | 680986697fe53bc140837bb74d495e6ad973d2c7 (diff) | |
download | chromium_src-f44fcf9ee12b4c1b7e2c1039f639a3101d1517e3.zip chromium_src-f44fcf9ee12b4c1b7e2c1039f639a3101d1517e3.tar.gz chromium_src-f44fcf9ee12b4c1b7e2c1039f639a3101d1517e3.tar.bz2 |
Abort copy requests from never-drawn trees
In rare-ish cases, the scheduler will commit/activate onto the active
tree without ever having drawn that tree. This happens in cases where
the tree is !CanDraw, such as in cases of empty viewports or not being
visible or losing a context.
Preserving render surface creation on the main thread (along with clip
nodes and transform nodes in the future) makes handling this edge case
extra complicated, so I'd like to just abort these requests.
Callers to CopyOutputRequest already have to deal with failure, so they
can just re-request.
R=danakj@chromium.org,vollick@chromium.org
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel
Review URL: https://codereview.chromium.org/1186603004
Cr-Commit-Position: refs/heads/master@{#334288}
Diffstat (limited to 'cc/trees/layer_tree_host_unittest.cc')
-rw-r--r-- | cc/trees/layer_tree_host_unittest.cc | 79 |
1 files changed, 0 insertions, 79 deletions
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc index ffe090d..79c5f53 100644 --- a/cc/trees/layer_tree_host_unittest.cc +++ b/cc/trees/layer_tree_host_unittest.cc @@ -5750,85 +5750,6 @@ class LayerTreeHostTestNoTasksBetweenWillAndDidCommit SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestNoTasksBetweenWillAndDidCommit); -// Verify that if a LayerImpl holds onto a copy request for multiple -// frames that it will continue to have a render surface through -// multiple commits, even though the Layer itself has no reason -// to have a render surface. -class LayerPreserveRenderSurfaceFromOutputRequests : public LayerTreeHostTest { - protected: - void SetupTree() override { - scoped_refptr<Layer> root = Layer::Create(layer_settings()); - root->CreateRenderSurface(); - root->SetBounds(gfx::Size(10, 10)); - child_ = Layer::Create(layer_settings()); - child_->SetBounds(gfx::Size(20, 20)); - root->AddChild(child_); - - layer_tree_host()->SetRootLayer(root); - LayerTreeHostTest::SetupTree(); - } - - static void CopyOutputCallback(scoped_ptr<CopyOutputResult> result) {} - - void BeginTest() override { - child_->RequestCopyOfOutput( - CopyOutputRequest::CreateBitmapRequest(base::Bind(CopyOutputCallback))); - EXPECT_TRUE(child_->HasCopyRequest()); - PostSetNeedsCommitToMainThread(); - } - - void DidCommit() override { EXPECT_FALSE(child_->HasCopyRequest()); } - - void CommitCompleteOnThread(LayerTreeHostImpl* host_impl) override { - LayerImpl* child_impl = host_impl->sync_tree()->LayerById(child_->id()); - - switch (host_impl->sync_tree()->source_frame_number()) { - case 0: - EXPECT_TRUE(child_impl->HasCopyRequest()); - EXPECT_TRUE(child_impl->render_surface()); - break; - case 1: - if (host_impl->proxy()->CommitToActiveTree()) { - EXPECT_TRUE(child_impl->HasCopyRequest()); - EXPECT_TRUE(child_impl->render_surface()); - } else { - EXPECT_FALSE(child_impl->HasCopyRequest()); - EXPECT_FALSE(child_impl->render_surface()); - } - break; - default: - NOTREACHED(); - break; - } - } - - void DidActivateTreeOnThread(LayerTreeHostImpl* host_impl) override { - LayerImpl* child_impl = host_impl->active_tree()->LayerById(child_->id()); - EXPECT_TRUE(child_impl->HasCopyRequest()); - EXPECT_TRUE(child_impl->render_surface()); - - switch (host_impl->active_tree()->source_frame_number()) { - case 0: - // Lose output surface to prevent drawing and cause another commit. - host_impl->DidLoseOutputSurface(); - break; - case 1: - EndTest(); - break; - default: - NOTREACHED(); - break; - } - } - - void AfterTest() override {} - - private: - scoped_refptr<Layer> child_; -}; - -SINGLE_AND_MULTI_THREAD_TEST_F(LayerPreserveRenderSurfaceFromOutputRequests); - class LayerTreeHostTestUpdateCopyRequests : public LayerTreeHostTest { protected: void SetupTree() override { |