summaryrefslogtreecommitdiffstats
path: root/ui/compositor/layer_unittest.cc
diff options
context:
space:
mode:
authoroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-08 19:16:59 +0000
committeroshima@chromium.org <oshima@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-05-08 19:16:59 +0000
commitcd9a61c70012ba2d7062f861d9ae3fe4b831f277 (patch)
tree36ec4f771194c94f290fb433e462fce602ffcb8d /ui/compositor/layer_unittest.cc
parent9bdadea89eed1e2b85b0b89df4b5a744ee933920 (diff)
downloadchromium_src-cd9a61c70012ba2d7062f861d9ae3fe4b831f277.zip
chromium_src-cd9a61c70012ba2d7062f861d9ae3fe4b831f277.tar.gz
chromium_src-cd9a61c70012ba2d7062f861d9ae3fe4b831f277.tar.bz2
Move DIP translation from ui/aura to ui/compositor.
Layer's coordinate system is now in DIP. Added support of dynamic density switching. Removed ENABLE_DIP gyp/macro and added runtime flag "--ui-enable-dip" BUG=105165, 114666 TEST=enabled monitor test. added new tests to compositor_unittests Review URL: https://chromiumcodereview.appspot.com/10221028 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@135888 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/compositor/layer_unittest.cc')
-rw-r--r--ui/compositor/layer_unittest.cc168
1 files changed, 163 insertions, 5 deletions
diff --git a/ui/compositor/layer_unittest.cc b/ui/compositor/layer_unittest.cc
index 3af990d..6143ebb 100644
--- a/ui/compositor/layer_unittest.cc
+++ b/ui/compositor/layer_unittest.cc
@@ -9,8 +9,12 @@
#include "base/memory/scoped_ptr.h"
#include "base/path_service.h"
#include "base/string_util.h"
+#include "base/stringprintf.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "third_party/WebKit/Source/Platform/chromium/public/WebSize.h"
#include "ui/compositor/compositor_observer.h"
+#include "ui/compositor/compositor_setup.h"
+#include "ui/compositor/dip_util.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_animation_sequence.h"
#include "ui/compositor/test/test_compositor_host.h"
@@ -19,8 +23,6 @@
#include "ui/gfx/gfx_paths.h"
#include "ui/gfx/skia_util.h"
-#include "ui/compositor/compositor_setup.h"
-
namespace ui {
namespace {
@@ -220,18 +222,27 @@ class TestLayerDelegate : public LayerDelegate {
const gfx::Size& paint_size() const { return paint_size_; }
int color_index() const { return color_index_; }
+ std::string ToScaleString() const {
+ return StringPrintf("%.1f %.1f", scale_x_, scale_y_);
+ }
+
// Overridden from LayerDelegate:
virtual void OnPaintLayer(gfx::Canvas* canvas) OVERRIDE {
SkBitmap contents = canvas->ExtractBitmap();
paint_size_ = gfx::Size(contents.width(), contents.height());
canvas->FillRect(gfx::Rect(paint_size_), colors_[color_index_]);
color_index_ = (color_index_ + 1) % static_cast<int>(colors_.size());
+ const SkMatrix& matrix = canvas->sk_canvas()->getTotalMatrix();
+ scale_x_ = matrix.getScaleX();
+ scale_y_ = matrix.getScaleY();
}
private:
std::vector<SkColor> colors_;
int color_index_;
gfx::Size paint_size_;
+ float scale_x_;
+ float scale_y_;
DISALLOW_COPY_AND_ASSIGN(TestLayerDelegate);
};
@@ -315,6 +326,9 @@ class TestCompositorObserver : public CompositorObserver {
#define MAYBE_CompositorObservers DISABLED_CompositorObservers
#define MAYBE_ModifyHierarchy DISABLED_ModifyHierarchy
#define MAYBE_Opacity DISABLED_Opacity
+#define MAYBE_ScaleUpDown DISABLED_ScaleUpDown
+#define MAYBE_ScaleReparent DISABLED_ScaleReparent
+#define MAYBE_NoScaleCanvas DISABLED_NoScaleCanvas
#else
#define MAYBE_Delegate DISABLED_Delegate
#define MAYBE_Draw Draw
@@ -326,6 +340,9 @@ class TestCompositorObserver : public CompositorObserver {
#define MAYBE_CompositorObservers DISABLED_CompositorObservers
#define MAYBE_ModifyHierarchy ModifyHierarchy
#define MAYBE_Opacity Opacity
+#define MAYBE_ScaleUpDown ScaleUpDown
+#define MAYBE_ScaleReparent ScaleReparent
+#define MAYBE_NoScaleCanvas NoScaleCanvas
#endif
TEST_F(LayerWithRealCompositorTest, MAYBE_Draw) {
@@ -366,7 +383,8 @@ class LayerWithDelegateTest : public testing::Test, public CompositorDelegate {
virtual void SetUp() OVERRIDE {
ui::SetupTestCompositor();
compositor_.reset(new Compositor(
- this, gfx::kNullAcceleratedWidget, gfx::Size(1000, 1000)));
+ this, gfx::kNullAcceleratedWidget));
+ compositor_->SetScaleAndSize(1.0f, gfx::Size(1000, 1000));
}
virtual void TearDown() OVERRIDE {
@@ -857,7 +875,7 @@ TEST_F(LayerWithRealCompositorTest, MAYBE_CompositorObservers) {
// Checks that modifying the hierarchy correctly affects final composite.
TEST_F(LayerWithRealCompositorTest, MAYBE_ModifyHierarchy) {
- GetCompositor()->WidgetSizeChanged(gfx::Size(50, 50));
+ GetCompositor()->SetScaleAndSize(1.0f, gfx::Size(50, 50));
// l0
// +-l11
@@ -917,7 +935,7 @@ TEST_F(LayerWithRealCompositorTest, MAYBE_ModifyHierarchy) {
// Opacity is rendered correctly.
// Checks that modifying the hierarchy correctly affects final composite.
TEST_F(LayerWithRealCompositorTest, MAYBE_Opacity) {
- GetCompositor()->WidgetSizeChanged(gfx::Size(50, 50));
+ GetCompositor()->SetScaleAndSize(1.0f, gfx::Size(50, 50));
// l0
// +-l11
@@ -1021,4 +1039,144 @@ TEST_F(LayerWithDelegateTest, SchedulePaintFromOnPaintLayer) {
gfx::Rect(10, 10, 30, 30)));
}
+TEST_F(LayerWithRealCompositorTest, MAYBE_ScaleUpDown) {
+ test::ScopedDIPEnablerForTest enable;
+
+ scoped_ptr<Layer> root(CreateColorLayer(SK_ColorWHITE,
+ gfx::Rect(10, 20, 200, 220)));
+ TestLayerDelegate root_delegate;
+ root_delegate.AddColor(SK_ColorWHITE);
+ root->set_delegate(&root_delegate);
+
+ scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorWHITE,
+ gfx::Rect(10, 20, 140, 180)));
+ TestLayerDelegate l1_delegate;
+ l1_delegate.AddColor(SK_ColorWHITE);
+ l1->set_delegate(&l1_delegate);
+
+ GetCompositor()->SetScaleAndSize(1.0f, gfx::Size(500, 500));
+ GetCompositor()->SetRootLayer(root.get());
+ root->Add(l1.get());
+ RunPendingMessages();
+
+ EXPECT_EQ("10,20 200x220", root->bounds().ToString());
+ EXPECT_EQ("10,20 140x180", l1->bounds().ToString());
+ gfx::Size size_in_pixel = root->web_layer().bounds();
+ EXPECT_EQ("200x220", size_in_pixel.ToString());
+ size_in_pixel = l1->web_layer().bounds();
+ EXPECT_EQ("140x180", size_in_pixel.ToString());
+
+ SchedulePaintForLayer(root.get());
+ SchedulePaintForLayer(l1.get());
+ RunPendingMessages();
+
+ EXPECT_EQ("200x220", root_delegate.paint_size().ToString());
+ EXPECT_EQ("140x180", l1_delegate.paint_size().ToString());
+
+ // Scale up to 2.0. Changing scale doesn't change the bounds in DIP.
+ GetCompositor()->SetScaleAndSize(2.0f, gfx::Size(500, 500));
+ EXPECT_EQ("10,20 200x220", root->bounds().ToString());
+ EXPECT_EQ("10,20 140x180", l1->bounds().ToString());
+ // Pixel size must have been scaled up.
+ size_in_pixel = root->web_layer().bounds();
+ EXPECT_EQ("400x440", size_in_pixel.ToString());
+ size_in_pixel = l1->web_layer().bounds();
+ EXPECT_EQ("280x360", size_in_pixel.ToString());
+
+ // Canvas size must have been scaled down up.
+ SchedulePaintForLayer(root.get());
+ SchedulePaintForLayer(l1.get());
+ RunPendingMessages();
+ EXPECT_EQ("400x440", root_delegate.paint_size().ToString());
+ EXPECT_EQ("2.0 2.0", root_delegate.ToScaleString());
+ EXPECT_EQ("280x360", l1_delegate.paint_size().ToString());
+ EXPECT_EQ("2.0 2.0", l1_delegate.ToScaleString());
+
+ // Scale down back to 1.0f.
+ GetCompositor()->SetScaleAndSize(1.0f, gfx::Size(500, 500));
+ EXPECT_EQ("10,20 200x220", root->bounds().ToString());
+ EXPECT_EQ("10,20 140x180", l1->bounds().ToString());
+ // Pixel size must have been scaled down.
+ size_in_pixel = root->web_layer().bounds();
+ EXPECT_EQ("200x220", size_in_pixel.ToString());
+ size_in_pixel = l1->web_layer().bounds();
+ EXPECT_EQ("140x180", size_in_pixel.ToString());
+
+ // Canvas size must have been scaled down too.
+ SchedulePaintForLayer(root.get());
+ SchedulePaintForLayer(l1.get());
+ RunPendingMessages();
+ EXPECT_EQ("200x220", root_delegate.paint_size().ToString());
+ EXPECT_EQ("1.0 1.0", root_delegate.ToScaleString());
+ EXPECT_EQ("140x180", l1_delegate.paint_size().ToString());
+ EXPECT_EQ("1.0 1.0", l1_delegate.ToScaleString());
+}
+
+TEST_F(LayerWithRealCompositorTest, MAYBE_ScaleReparent) {
+ test::ScopedDIPEnablerForTest enable;
+ scoped_ptr<Layer> root(CreateColorLayer(SK_ColorWHITE,
+ gfx::Rect(10, 20, 200, 220)));
+ scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorWHITE,
+ gfx::Rect(10, 20, 140, 180)));
+ TestLayerDelegate l1_delegate;
+ l1_delegate.AddColor(SK_ColorWHITE);
+ l1->set_delegate(&l1_delegate);
+
+ GetCompositor()->SetScaleAndSize(1.0f, gfx::Size(500, 500));
+ GetCompositor()->SetRootLayer(root.get());
+ RunPendingMessages();
+
+ root->Add(l1.get());
+ EXPECT_EQ("10,20 140x180", l1->bounds().ToString());
+ gfx::Size size_in_pixel = l1->web_layer().bounds();
+ EXPECT_EQ("140x180", size_in_pixel.ToString());
+
+ SchedulePaintForLayer(l1.get());
+ RunPendingMessages();
+ EXPECT_EQ("140x180", l1_delegate.paint_size().ToString());
+ EXPECT_EQ("1.0 1.0", l1_delegate.ToScaleString());
+
+ // Remove l1 from root and change the scale.
+ root->Remove(l1.get());
+ EXPECT_EQ(NULL, l1->parent());
+ EXPECT_EQ(NULL, l1->GetCompositor());
+ GetCompositor()->SetScaleAndSize(2.0f, gfx::Size(500, 500));
+ // Sanity check on root and l1.
+ EXPECT_EQ("10,20 200x220", root->bounds().ToString());
+ size_in_pixel = l1->web_layer().bounds();
+ EXPECT_EQ("140x180", size_in_pixel.ToString());
+
+
+ root->Add(l1.get());
+ EXPECT_EQ("10,20 140x180", l1->bounds().ToString());
+ size_in_pixel = l1->web_layer().bounds();
+ EXPECT_EQ("280x360", size_in_pixel.ToString());
+ SchedulePaintForLayer(l1.get());
+ RunPendingMessages();
+ EXPECT_EQ("280x360", l1_delegate.paint_size().ToString());
+ EXPECT_EQ("2.0 2.0", l1_delegate.ToScaleString());
+}
+
+// Tests layer::set_scale_canvas(false).
+TEST_F(LayerWithRealCompositorTest, MAYBE_NoScaleCanvas) {
+ test::ScopedDIPEnablerForTest enable;
+ scoped_ptr<Layer> root(CreateColorLayer(SK_ColorWHITE,
+ gfx::Rect(10, 20, 200, 220)));
+ scoped_ptr<Layer> l1(CreateColorLayer(SK_ColorWHITE,
+ gfx::Rect(10, 20, 140, 180)));
+ l1->set_scale_canvas(false);
+ root->Add(l1.get());
+ TestLayerDelegate l1_delegate;
+ l1_delegate.AddColor(SK_ColorWHITE);
+ l1->set_delegate(&l1_delegate);
+
+ GetCompositor()->SetScaleAndSize(2.0f, gfx::Size(500, 500));
+ GetCompositor()->SetRootLayer(root.get());
+
+ SchedulePaintForLayer(l1.get());
+ RunPendingMessages();
+ EXPECT_EQ("280x360", l1_delegate.paint_size().ToString());
+ EXPECT_EQ("1.0 1.0", l1_delegate.ToScaleString());
+}
+
} // namespace ui