summaryrefslogtreecommitdiffstats
path: root/cc/layers/heads_up_display_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'cc/layers/heads_up_display_unittest.cc')
-rw-r--r--cc/layers/heads_up_display_unittest.cc110
1 files changed, 110 insertions, 0 deletions
diff --git a/cc/layers/heads_up_display_unittest.cc b/cc/layers/heads_up_display_unittest.cc
new file mode 100644
index 0000000..1a4213e
--- /dev/null
+++ b/cc/layers/heads_up_display_unittest.cc
@@ -0,0 +1,110 @@
+// 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_common.h"
+#include "cc/trees/layer_tree_host.h"
+
+namespace cc {
+namespace {
+
+class HeadsUpDisplayTest : public ThreadedTest {
+protected:
+ virtual void initializeSettings(LayerTreeSettings& settings) OVERRIDE
+ {
+ // Enable the HUD without requiring text.
+ settings.initialDebugState.showPropertyChangedRects = 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()
+ : m_rootLayer1(DrawsContentLayer::Create())
+ , m_rootLayer2(DrawsContentLayer::Create())
+ , m_numCommits(0)
+ {
+ }
+
+ virtual void beginTest() OVERRIDE
+ {
+ m_rootLayer1->SetBounds(gfx::Size(30, 30));
+ m_rootLayer2->SetBounds(gfx::Size(30, 30));
+
+ postSetNeedsCommitToMainThread();
+ }
+
+ virtual void didCommit() OVERRIDE
+ {
+ ++m_numCommits;
+
+ ASSERT_TRUE(m_layerTreeHost->hud_layer());
+
+ switch (m_numCommits) {
+ case 1:
+ // Change directly to a new root layer.
+ m_layerTreeHost->SetRootLayer(m_rootLayer1);
+ break;
+ case 2:
+ EXPECT_EQ(m_rootLayer1.get(), m_layerTreeHost->hud_layer()->parent());
+ // Unset the root layer.
+ m_layerTreeHost->SetRootLayer(NULL);
+ break;
+ case 3:
+ EXPECT_EQ(0, m_layerTreeHost->hud_layer()->parent());
+ // Change back to the previous root layer.
+ m_layerTreeHost->SetRootLayer(m_rootLayer1);
+ break;
+ case 4:
+ EXPECT_EQ(m_rootLayer1.get(), m_layerTreeHost->hud_layer()->parent());
+ // Unset the root layer.
+ m_layerTreeHost->SetRootLayer(NULL);
+ break;
+ case 5:
+ EXPECT_EQ(0, m_layerTreeHost->hud_layer()->parent());
+ // Change to a new root layer from a null root.
+ m_layerTreeHost->SetRootLayer(m_rootLayer2);
+ break;
+ case 6:
+ EXPECT_EQ(m_rootLayer2.get(), m_layerTreeHost->hud_layer()->parent());
+ // Change directly back to the last root layer/
+ m_layerTreeHost->SetRootLayer(m_rootLayer1);
+ break;
+ case 7:
+ EXPECT_EQ(m_rootLayer1.get(), m_layerTreeHost->hud_layer()->parent());
+ endTest();
+ break;
+ }
+ }
+
+ virtual void afterTest() OVERRIDE
+ {
+ }
+
+private:
+ scoped_refptr<DrawsContentLayer> m_rootLayer1;
+ scoped_refptr<DrawsContentLayer> m_rootLayer2;
+ int m_numCommits;
+};
+
+TEST_F(HudWithRootLayerChange, runMultiThread)
+{
+ runTest(true);
+}
+
+} // namespace
+} // namespace cc