| // Copyright 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "cc/layers/heads_up_display_layer.h" |
| #include "cc/layers/layer.h" |
| #include "cc/test/layer_tree_test.h" |
| #include "cc/trees/layer_tree_host.h" |
| |
| namespace cc { |
| namespace { |
| |
| class HeadsUpDisplayTest : public LayerTreeTest { |
| protected: |
| virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { |
| // Enable the HUD without requiring text. |
| settings->initial_debug_state.show_property_changed_rects = true; |
| } |
| }; |
| |
| class DrawsContentLayer : public Layer { |
| public: |
| static scoped_refptr<DrawsContentLayer> Create() { |
| return make_scoped_refptr(new DrawsContentLayer()); |
| } |
| virtual bool DrawsContent() const OVERRIDE { return true; } |
| |
| private: |
| DrawsContentLayer() : Layer() {} |
| virtual ~DrawsContentLayer() {} |
| }; |
| |
| class HudWithRootLayerChange : public HeadsUpDisplayTest { |
| public: |
| HudWithRootLayerChange() |
| : root_layer1_(DrawsContentLayer::Create()), |
| root_layer2_(DrawsContentLayer::Create()), |
| num_commits_(0) {} |
| |
| virtual void BeginTest() OVERRIDE { |
| root_layer1_->SetBounds(gfx::Size(30, 30)); |
| root_layer2_->SetBounds(gfx::Size(30, 30)); |
| |
| PostSetNeedsCommitToMainThread(); |
| } |
| |
| virtual void DidCommit() OVERRIDE { |
| ++num_commits_; |
| |
| ASSERT_TRUE(layer_tree_host()->hud_layer()); |
| |
| switch (num_commits_) { |
| case 1: |
| // Change directly to a new root layer. |
| layer_tree_host()->SetRootLayer(root_layer1_); |
| break; |
| case 2: |
| EXPECT_EQ(root_layer1_.get(), layer_tree_host()->hud_layer()->parent()); |
| // Unset the root layer. |
| layer_tree_host()->SetRootLayer(NULL); |
| break; |
| case 3: |
| EXPECT_EQ(0, layer_tree_host()->hud_layer()->parent()); |
| // Change back to the previous root layer. |
| layer_tree_host()->SetRootLayer(root_layer1_); |
| break; |
| case 4: |
| EXPECT_EQ(root_layer1_.get(), layer_tree_host()->hud_layer()->parent()); |
| // Unset the root layer. |
| layer_tree_host()->SetRootLayer(NULL); |
| break; |
| case 5: |
| EXPECT_EQ(0, layer_tree_host()->hud_layer()->parent()); |
| // Change to a new root layer from a null root. |
| layer_tree_host()->SetRootLayer(root_layer2_); |
| break; |
| case 6: |
| EXPECT_EQ(root_layer2_.get(), layer_tree_host()->hud_layer()->parent()); |
| // Change directly back to the last root layer/ |
| layer_tree_host()->SetRootLayer(root_layer1_); |
| break; |
| case 7: |
| EXPECT_EQ(root_layer1_.get(), layer_tree_host()->hud_layer()->parent()); |
| EndTest(); |
| break; |
| } |
| } |
| |
| virtual void AfterTest() OVERRIDE {} |
| |
| private: |
| scoped_refptr<DrawsContentLayer> root_layer1_; |
| scoped_refptr<DrawsContentLayer> root_layer2_; |
| int num_commits_; |
| }; |
| |
| MULTI_THREAD_TEST_F(HudWithRootLayerChange); |
| |
| } // namespace |
| } // namespace cc |