1 // Copyright 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "cc/layers/heads_up_display_layer.h" 6 #include "cc/layers/layer.h" 7 #include "cc/test/layer_tree_test.h" 8 #include "cc/trees/layer_tree_host.h" 9 10 namespace cc { 11 namespace { 12 13 class HeadsUpDisplayTest : public LayerTreeTest { 14 protected: 15 virtual void InitializeSettings(LayerTreeSettings* settings) OVERRIDE { 16 // Enable the HUD without requiring text. 17 settings->initial_debug_state.show_property_changed_rects = true; 18 } 19 }; 20 21 class DrawsContentLayer : public Layer { 22 public: 23 static scoped_refptr<DrawsContentLayer> Create() { 24 return make_scoped_refptr(new DrawsContentLayer()); 25 } 26 virtual bool DrawsContent() const OVERRIDE { return true; } 27 28 private: 29 DrawsContentLayer() : Layer() {} 30 virtual ~DrawsContentLayer() {} 31 }; 32 33 class HudWithRootLayerChange : public HeadsUpDisplayTest { 34 public: 35 HudWithRootLayerChange() 36 : root_layer1_(DrawsContentLayer::Create()), 37 root_layer2_(DrawsContentLayer::Create()), 38 num_commits_(0) {} 39 40 virtual void BeginTest() OVERRIDE { 41 root_layer1_->SetBounds(gfx::Size(30, 30)); 42 root_layer2_->SetBounds(gfx::Size(30, 30)); 43 44 PostSetNeedsCommitToMainThread(); 45 } 46 47 virtual void DidCommit() OVERRIDE { 48 ++num_commits_; 49 50 ASSERT_TRUE(layer_tree_host()->hud_layer()); 51 52 switch (num_commits_) { 53 case 1: 54 // Change directly to a new root layer. 55 layer_tree_host()->SetRootLayer(root_layer1_); 56 break; 57 case 2: 58 EXPECT_EQ(root_layer1_.get(), layer_tree_host()->hud_layer()->parent()); 59 // Unset the root layer. 60 layer_tree_host()->SetRootLayer(NULL); 61 break; 62 case 3: 63 EXPECT_EQ(0, layer_tree_host()->hud_layer()->parent()); 64 // Change back to the previous root layer. 65 layer_tree_host()->SetRootLayer(root_layer1_); 66 break; 67 case 4: 68 EXPECT_EQ(root_layer1_.get(), layer_tree_host()->hud_layer()->parent()); 69 // Unset the root layer. 70 layer_tree_host()->SetRootLayer(NULL); 71 break; 72 case 5: 73 EXPECT_EQ(0, layer_tree_host()->hud_layer()->parent()); 74 // Change to a new root layer from a null root. 75 layer_tree_host()->SetRootLayer(root_layer2_); 76 break; 77 case 6: 78 EXPECT_EQ(root_layer2_.get(), layer_tree_host()->hud_layer()->parent()); 79 // Change directly back to the last root layer/ 80 layer_tree_host()->SetRootLayer(root_layer1_); 81 break; 82 case 7: 83 EXPECT_EQ(root_layer1_.get(), layer_tree_host()->hud_layer()->parent()); 84 EndTest(); 85 break; 86 } 87 } 88 89 virtual void AfterTest() OVERRIDE {} 90 91 private: 92 scoped_refptr<DrawsContentLayer> root_layer1_; 93 scoped_refptr<DrawsContentLayer> root_layer2_; 94 int num_commits_; 95 }; 96 97 MULTI_THREAD_TEST_F(HudWithRootLayerChange); 98 99 } // namespace 100 } // namespace cc 101