summaryrefslogtreecommitdiff
path: root/chromium/cc/layers/picture_layer_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/cc/layers/picture_layer_unittest.cc')
-rw-r--r--chromium/cc/layers/picture_layer_unittest.cc69
1 files changed, 69 insertions, 0 deletions
diff --git a/chromium/cc/layers/picture_layer_unittest.cc b/chromium/cc/layers/picture_layer_unittest.cc
new file mode 100644
index 00000000000..c3dd244c2ef
--- /dev/null
+++ b/chromium/cc/layers/picture_layer_unittest.cc
@@ -0,0 +1,69 @@
+// Copyright 2013 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/picture_layer.h"
+
+#include "cc/layers/content_layer_client.h"
+#include "cc/layers/picture_layer_impl.h"
+#include "cc/resources/resource_update_queue.h"
+#include "cc/test/fake_layer_tree_host.h"
+#include "cc/test/fake_picture_layer_impl.h"
+#include "cc/test/fake_proxy.h"
+#include "cc/test/impl_side_painting_settings.h"
+#include "cc/trees/occlusion_tracker.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace cc {
+namespace {
+
+class MockContentLayerClient : public ContentLayerClient {
+ public:
+ virtual void PaintContents(SkCanvas* canvas,
+ gfx::Rect clip,
+ gfx::RectF* opaque) OVERRIDE {}
+ virtual void DidChangeLayerCanUseLCDText() OVERRIDE {}
+};
+
+TEST(PictureLayerTest, NoTilesIfEmptyBounds) {
+ MockContentLayerClient client;
+ scoped_refptr<PictureLayer> layer = PictureLayer::Create(&client);
+ layer->SetBounds(gfx::Size(10, 10));
+
+ scoped_ptr<FakeLayerTreeHost> host = FakeLayerTreeHost::Create();
+ host->SetRootLayer(layer);
+ layer->SetIsDrawable(true);
+ layer->SavePaintProperties();
+
+ OcclusionTracker occlusion(gfx::Rect(0, 0, 1000, 1000), false);
+ scoped_ptr<ResourceUpdateQueue> queue(new ResourceUpdateQueue);
+ layer->Update(queue.get(), &occlusion);
+
+ layer->SetBounds(gfx::Size(0, 0));
+ layer->SavePaintProperties();
+ // Intentionally skipping Update since it would normally be skipped on
+ // a layer with empty bounds.
+
+ FakeProxy proxy;
+#ifndef NDEBUG
+ proxy.SetCurrentThreadIsImplThread(true);
+#endif
+ {
+ FakeLayerTreeHostImpl host_impl(ImplSidePaintingSettings(), &proxy);
+ host_impl.CreatePendingTree();
+ scoped_ptr<FakePictureLayerImpl> layer_impl =
+ FakePictureLayerImpl::Create(host_impl.pending_tree(), 1);
+
+ layer->PushPropertiesTo(layer_impl.get());
+ EXPECT_FALSE(layer_impl->CanHaveTilings());
+ EXPECT_TRUE(layer_impl->bounds() == gfx::Size(0, 0));
+ EXPECT_TRUE(layer_impl->pile()->size() == gfx::Size(0, 0));
+ EXPECT_TRUE(layer_impl->pile()->recorded_region().IsEmpty());
+ }
+#ifndef NDEBUG
+ proxy.SetCurrentThreadIsImplThread(false);
+#endif
+}
+
+} // namespace
+} // namespace cc