blob: ce08e202b1ab03e2f484c7bb41f773a213c1346c [file] [log] [blame]
// 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/heads_up_display_layer.h"
#include "cc/layer.h"
#include "cc/layer_tree_host.h"
#include "cc/test/layer_tree_test_common.h"
using namespace WebKitTests;
namespace cc {
namespace {
class HeadsUpDisplayTest : public ThreadedTest {
protected:
virtual void initializeSettings(LayerTreeSettings& settings) OVERRIDE
{
// Enable the HUD without requiring text.
settings.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->hudLayer());
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->hudLayer()->parent());
// Unset the root layer.
m_layerTreeHost->setRootLayer(0);
break;
case 3:
EXPECT_EQ(0, m_layerTreeHost->hudLayer()->parent());
// Change back to the previous root layer.
m_layerTreeHost->setRootLayer(m_rootLayer1);
break;
case 4:
EXPECT_EQ(m_rootLayer1.get(), m_layerTreeHost->hudLayer()->parent());
// Unset the root layer.
m_layerTreeHost->setRootLayer(0);
break;
case 5:
EXPECT_EQ(0, m_layerTreeHost->hudLayer()->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->hudLayer()->parent());
// Change directly back to the last root layer/
m_layerTreeHost->setRootLayer(m_rootLayer1);
break;
case 7:
EXPECT_EQ(m_rootLayer1.get(), m_layerTreeHost->hudLayer()->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