// 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