| Index: cc/trees/layer_tree_host_unittest.cc
|
| diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
|
| index 73033a19b4866e75645d5cf21735c3bcd0ab92b8..9ac59cf3548eb0d4a21b24ca4050f41a5c363c83 100644
|
| --- a/cc/trees/layer_tree_host_unittest.cc
|
| +++ b/cc/trees/layer_tree_host_unittest.cc
|
| @@ -4469,6 +4469,139 @@ class LayerTreeHostTestAbortEvictedTextures : public LayerTreeHostTest {
|
| // Commits can only be aborted when using the thread proxy.
|
| MULTI_THREAD_TEST_F(LayerTreeHostTestAbortEvictedTextures);
|
|
|
| +class TestWebGraphicsContext3DWithTextureCounts
|
| + : public TestWebGraphicsContext3D {
|
| + public:
|
| + static scoped_ptr<TestWebGraphicsContext3DWithTextureCounts> Create() {
|
| + return make_scoped_ptr(new TestWebGraphicsContext3DWithTextureCounts());
|
| + }
|
| +
|
| + virtual ~TestWebGraphicsContext3DWithTextureCounts() {}
|
| +
|
| + virtual WebKit::WebGLId createTexture() OVERRIDE {
|
| + ++num_create_texture_calls_;
|
| + return TestWebGraphicsContext3D::createTexture();
|
| + }
|
| +
|
| + virtual void deleteTexture(WebKit::WebGLId texture_id) OVERRIDE {
|
| + ++num_delete_texture_calls_;
|
| + TestWebGraphicsContext3D::deleteTexture(texture_id);
|
| + }
|
| +
|
| + int num_create_texture_calls_;
|
| + int num_delete_texture_calls_;
|
| +
|
| + private:
|
| + TestWebGraphicsContext3DWithTextureCounts()
|
| + : TestWebGraphicsContext3D(),
|
| + num_create_texture_calls_(0),
|
| + num_delete_texture_calls_(0) {}
|
| +};
|
| +
|
| +// UI resources should be evicted when visibility is set to false and recreated
|
| +// when visibility is set to true.
|
| +class LayerTreeHostEvictUIResourceTest : public LayerTreeHostTest {
|
| + public:
|
| + LayerTreeHostEvictUIResourceTest()
|
| + : LayerTreeHostTest(), num_commits_(0), context3d_(NULL) {}
|
| +
|
| + virtual scoped_ptr<TestWebGraphicsContext3DWithTextureCounts>
|
| + CreateContext3d() {
|
| + return TestWebGraphicsContext3DWithTextureCounts::Create();
|
| + }
|
| +
|
| + virtual scoped_ptr<OutputSurface> CreateOutputSurface(
|
| + bool fallback) OVERRIDE {
|
| + scoped_ptr<TestWebGraphicsContext3DWithTextureCounts> context3d =
|
| + CreateContext3d();
|
| + context3d_ = context3d.get();
|
| + return FakeOutputSurface::Create3d(
|
| + context3d.PassAs<TestWebGraphicsContext3D>()).PassAs<OutputSurface>();
|
| + }
|
| +
|
| + virtual void BeginTest() OVERRIDE { PostSetNeedsCommitToMainThread(); }
|
| +
|
| + virtual void SetupTree() OVERRIDE {
|
| + root_ = Layer::Create();
|
| + bool paint_scrollbar = true;
|
| + bool has_thumb = false;
|
| + scrollbar_layer_ = FakePaintedScrollbarLayer::Create(
|
| + paint_scrollbar, has_thumb, root_->id());
|
| +
|
| + root_->AddChild(scrollbar_layer_);
|
| + layer_tree_host()->SetRootLayer(root_);
|
| + LayerTreeHostTest::SetupTree();
|
| + }
|
| +
|
| + virtual void DidCommit() OVERRIDE {
|
| + int frame = num_commits_;
|
| + scoped_ptr<base::AutoReset<bool> > ignore;
|
| + switch (frame) {
|
| + case 1:
|
| + PostSetNeedsCommitToMainThread();
|
| + break;
|
| + case 2:
|
| + PostSetVisibleToMainThread(false);
|
| + PostSetNeedsRedrawToMainThread();
|
| + PostSetVisibleToMainThread(true);
|
| + PostSetNeedsCommitToMainThread();
|
| + break;
|
| + case 3:
|
| + PostSetNeedsCommitToMainThread();
|
| + break;
|
| + case 4:
|
| + EndTest();
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void PerformTest(LayerTreeHostImpl* impl) {
|
| + int frame = num_commits_;
|
| + switch (frame) {
|
| + case 1:
|
| + // Expect one texture has been created. None has been deleted.
|
| + EXPECT_EQ(context3d_->num_create_texture_calls_, 1);
|
| + EXPECT_EQ(context3d_->num_delete_texture_calls_, 0);
|
| + break;
|
| + case 2:
|
| + // Expect two textures has been created. One has been deleted.
|
| + EXPECT_EQ(context3d_->num_create_texture_calls_, 2);
|
| + EXPECT_EQ(context3d_->num_delete_texture_calls_, 1);
|
| + break;
|
| + case 3:
|
| + // Visibility has been changed once. So resource was evicted in LTHI
|
| + // and recreated in LTH. Expect four textures has been created. Three
|
| + // has been deleted.
|
| + EXPECT_EQ(context3d_->num_create_texture_calls_, 4);
|
| + EXPECT_EQ(context3d_->num_delete_texture_calls_, 3);
|
| + break;
|
| + default:
|
| + break;
|
| + }
|
| + }
|
| +
|
| + virtual void CommitCompleteOnThread(LayerTreeHostImpl* impl) OVERRIDE {
|
| + ++num_commits_;
|
| + if (!layer_tree_host()->settings().impl_side_painting)
|
| + PerformTest(impl);
|
| + }
|
| +
|
| + virtual void DidActivateTreeOnThread(LayerTreeHostImpl* impl) OVERRIDE {
|
| + if (layer_tree_host()->settings().impl_side_painting)
|
| + PerformTest(impl);
|
| + }
|
| +
|
| + virtual void AfterTest() OVERRIDE {}
|
| +
|
| + protected:
|
| + scoped_refptr<Layer> root_;
|
| + scoped_refptr<FakePaintedScrollbarLayer> scrollbar_layer_;
|
| + int num_commits_;
|
| + TestWebGraphicsContext3DWithTextureCounts* context3d_;
|
| +};
|
| +
|
| +SINGLE_AND_MULTI_THREAD_TEST_F(LayerTreeHostEvictUIResourceTest);
|
| +
|
| } // namespace
|
|
|
| } // namespace cc
|
|
|