| 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 9f9f65325750a4ac025bd30005e269b88e027b0c..ab0046c1715c5f7b2d52d257c21b63b1ebd71cb9 100644
|
| --- a/cc/trees/layer_tree_host_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_unittest.cc
|
| @@ -16,6 +16,7 @@
|
| #include "cc/layers/layer_impl.h"
|
| #include "cc/layers/picture_layer.h"
|
| #include "cc/layers/scrollbar_layer.h"
|
| +#include "cc/layers/solid_color_layer.h"
|
| #include "cc/layers/video_layer.h"
|
| #include "cc/output/begin_frame_args.h"
|
| #include "cc/output/copy_output_request.h"
|
| @@ -4074,5 +4075,111 @@ class LayerTreeHostTestVideoLayerInvalidate : public LayerTreeHostTest {
|
|
|
| SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestVideoLayerInvalidate);
|
|
|
| +class LayerTreeHostTestPushHiddenLayer : public LayerTreeHostTest {
|
| + protected:
|
| + virtual void SetupTree() OVERRIDE {
|
| + root_layer_ = Layer::Create();
|
| + root_layer_->SetAnchorPoint(gfx::PointF());
|
| + root_layer_->SetPosition(gfx::Point());
|
| + root_layer_->SetBounds(gfx::Size(10, 10));
|
| +
|
| + parent_layer_ = SolidColorLayer::Create();
|
| + parent_layer_->SetAnchorPoint(gfx::PointF());
|
| + parent_layer_->SetPosition(gfx::Point());
|
| + parent_layer_->SetBounds(gfx::Size(10, 10));
|
| + parent_layer_->SetIsDrawable(true);
|
| + root_layer_->AddChild(parent_layer_);
|
| +
|
| + child_layer_ = SolidColorLayer::Create();
|
| + child_layer_->SetAnchorPoint(gfx::PointF());
|
| + child_layer_->SetPosition(gfx::Point());
|
| + child_layer_->SetBounds(gfx::Size(10, 10));
|
| + child_layer_->SetIsDrawable(true);
|
| + parent_layer_->AddChild(child_layer_);
|
| +
|
| + layer_tree_host()->SetRootLayer(root_layer_);
|
| + LayerTreeHostTest::SetupTree();
|
| + }
|
| +
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual void DidCommitAndDrawFrame() OVERRIDE {
|
| + switch (layer_tree_host()->source_frame_number()) {
|
| + case 1:
|
| + // The layer type used does not need to push properties every frame.
|
| + EXPECT_FALSE(child_layer_->needs_push_properties());
|
| +
|
| + // Change the bounds of the child layer, but make it skipped
|
| + // by CalculateDrawProperties.
|
| + parent_layer_->SetOpacity(0.f);
|
| + child_layer_->SetBounds(gfx::Size(5, 5));
|
| + break;
|
| + case 2:
|
| + // The bounds of the child layer were pushed to the impl side.
|
| + EXPECT_FALSE(child_layer_->needs_push_properties());
|
| +
|
| + EndTest();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
|
| + LayerImpl* root = impl->active_tree()->root_layer();
|
| + LayerImpl* parent = root->children()[0];
|
| + LayerImpl* child = parent->children()[0];
|
| +
|
| + switch (impl->active_tree()->source_frame_number()) {
|
| + case 1:
|
| + EXPECT_EQ(gfx::Size(5, 5).ToString(), child->bounds().ToString());
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +
|
| + scoped_refptr<Layer> root_layer_;
|
| + scoped_refptr<SolidColorLayer> parent_layer_;
|
| + scoped_refptr<SolidColorLayer> child_layer_;
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostTestPushHiddenLayer);
|
| +
|
| +class LayerTreeHostTestUpdateLayerInEmptyViewport : public LayerTreeHostTest {
|
| + protected:
|
| + virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE {
|
| + settings->impl_side_painting = true;
|
| + }
|
| +
|
| + virtual void SetupTree() OVERRIDE {
|
| + root_layer_ = FakePictureLayer::Create(&client_);
|
| + root_layer_->SetAnchorPoint(gfx::PointF());
|
| + root_layer_->SetBounds(gfx::Size(10, 10));
|
| +
|
| + layer_tree_host()->SetRootLayer(root_layer_);
|
| + LayerTreeHostTest::SetupTree();
|
| + }
|
| +
|
| + virtual void BeginTest() OVERRIDE {
|
| + // The viewport is empty, but we still need to update layers on the main
|
| + // thread.
|
| + layer_tree_host()->SetViewportSize(gfx::Size(0, 0));
|
| + PostSetNeedsCommitToMainThread();
|
| + }
|
| +
|
| + virtual void DidCommit() OVERRIDE {
|
| + // The layer should be updated even though the viewport is empty, so we
|
| + // are capable of drawing it on the impl tree.
|
| + EXPECT_GT(root_layer_->update_count(), 0u);
|
| + EndTest();
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +
|
| + FakeContentLayerClient client_;
|
| + scoped_refptr<FakePictureLayer> root_layer_;
|
| +};
|
| +
|
| +MULTI_THREAD_TEST_F(LayerTreeHostTestUpdateLayerInEmptyViewport);
|
| +
|
| } // namespace
|
| } // namespace cc
|
|
|