| Index: ui/views/view_unittest.cc
|
| diff --git a/ui/views/view_unittest.cc b/ui/views/view_unittest.cc
|
| index d4a270e8fc837b9ac8fb515dba5029fc726139af..1a103b731deb77f359ff10f7048caa4d6c15c196 100644
|
| --- a/ui/views/view_unittest.cc
|
| +++ b/ui/views/view_unittest.cc
|
| @@ -9,6 +9,8 @@
|
| #include "base/strings/string_util.h"
|
| #include "base/strings/stringprintf.h"
|
| #include "base/strings/utf_string_conversions.h"
|
| +#include "cc/playback/display_item_list.h"
|
| +#include "cc/playback/display_item_list_settings.h"
|
| #include "ui/base/accelerators/accelerator.h"
|
| #include "ui/base/clipboard/clipboard.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| @@ -445,21 +447,29 @@ TEST_F(ViewTest, PaintWithUnknownInvalidation) {
|
| v2->SetBounds(3, 4, 6, 5);
|
| v1->AddChildView(v2);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(1, 1);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| + // With a known invalidation, v1 and v2 are not painted.
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas));
|
| - EXPECT_TRUE(v1->did_paint_);
|
| - EXPECT_TRUE(v2->did_paint_);
|
| -
|
| - v1->Reset();
|
| - v2->Reset();
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| +
|
| + // With unknown invalidation, v1 and v2 are painted.
|
| root_view->Paint(
|
| - ui::PaintContext(ui::PaintContext(&canvas, paint_area),
|
| + ui::PaintContext(ui::PaintContext(list.get(), 1.f, root_area, paint_area),
|
| ui::PaintContext::CLONE_WITHOUT_INVALIDATION));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
| @@ -480,12 +490,22 @@ TEST_F(ViewTest, PaintContainsChildren) {
|
| v2->SetBounds(3, 4, 6, 5);
|
| v1->AddChildView(v2);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(25, 26);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
| }
|
| @@ -518,12 +538,22 @@ TEST_F(ViewTest, PaintContainsChildrenInRTL) {
|
| EXPECT_EQ(gfx::Rect(6, 15, 6, 5), v2->layer()->bounds());
|
| v2->SetPaintToLayer(false);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(25, 26);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
| }
|
| @@ -543,12 +573,22 @@ TEST_F(ViewTest, PaintIntersectsChildren) {
|
| v2->SetBounds(3, 4, 6, 5);
|
| v1->AddChildView(v2);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(9, 10, 5, 6);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
| }
|
| @@ -581,12 +621,22 @@ TEST_F(ViewTest, PaintIntersectsChildrenInRTL) {
|
| EXPECT_EQ(gfx::Rect(6, 15, 6, 5), v2->layer()->bounds());
|
| v2->SetPaintToLayer(false);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(2, 10, 5, 6);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
| }
|
| @@ -606,12 +656,22 @@ TEST_F(ViewTest, PaintIntersectsChildButNotGrandChild) {
|
| v2->SetBounds(3, 4, 6, 5);
|
| v1->AddChildView(v2);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(9, 10, 2, 3);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| }
|
| @@ -644,12 +704,22 @@ TEST_F(ViewTest, PaintIntersectsChildButNotGrandChildInRTL) {
|
| EXPECT_EQ(gfx::Rect(6, 15, 6, 5), v2->layer()->bounds());
|
| v2->SetPaintToLayer(false);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(2, 10, 2, 3);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| }
|
| @@ -669,12 +739,22 @@ TEST_F(ViewTest, PaintIntersectsNoChildren) {
|
| v2->SetBounds(3, 4, 6, 5);
|
| v1->AddChildView(v2);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(9, 10, 2, 1);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| }
|
| @@ -707,12 +787,22 @@ TEST_F(ViewTest, PaintIntersectsNoChildrenInRTL) {
|
| EXPECT_EQ(gfx::Rect(6, 15, 6, 5), v2->layer()->bounds());
|
| v2->SetPaintToLayer(false);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| gfx::Rect paint_area(2, 10, 2, 1);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| }
|
| @@ -732,13 +822,23 @@ TEST_F(ViewTest, PaintIntersectsOneChild) {
|
| v2->SetBounds(3, 4, 6, 5);
|
| root_view->AddChildView(v2);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| // Intersects with the second child only.
|
| gfx::Rect paint_area(3, 3, 1, 2);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
|
|
| @@ -749,7 +849,7 @@ TEST_F(ViewTest, PaintIntersectsOneChild) {
|
| v2->Reset();
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| }
|
| @@ -782,13 +882,23 @@ TEST_F(ViewTest, PaintIntersectsOneChildInRTL) {
|
| EXPECT_EQ(gfx::Rect(16, 4, 6, 5), v2->layer()->bounds());
|
| v2->SetPaintToLayer(false);
|
|
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
| +
|
| // Intersects with the first child only.
|
| gfx::Rect paint_area(3, 10, 1, 2);
|
| + gfx::Rect root_area(root_view->size());
|
| + list = cc::DisplayItemList::Create(root_area, cc::DisplayItemListSettings());
|
|
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
|
|
| @@ -799,7 +909,7 @@ TEST_F(ViewTest, PaintIntersectsOneChildInRTL) {
|
| v2->Reset();
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, root_area, paint_area));
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
| }
|
| @@ -820,26 +930,36 @@ TEST_F(ViewTest, PaintInPromotedToLayer) {
|
| v2->SetBounds(3, 4, 6, 5);
|
| v1->AddChildView(v2);
|
|
|
| - EXPECT_FALSE(v1->did_paint_);
|
| - EXPECT_FALSE(v2->did_paint_);
|
| + // Paint everything once, since it has to build its cache. Then we can test
|
| + // invalidation.
|
| + gfx::Rect first_paint(1, 1);
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
|
| + v1->Paint(ui::PaintContext(list.get(), 1.f, first_paint, first_paint));
|
| + v1->Reset();
|
| + v2->Reset();
|
|
|
| {
|
| - gfx::Canvas canvas(root_view->size(), 1.f, true);
|
| gfx::Rect paint_area(25, 26);
|
| + gfx::Rect view_area(root_view->size());
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(view_area, cc::DisplayItemListSettings());
|
|
|
| // The promoted views are not painted as they are separate paint roots.
|
| - root_view->Paint(ui::PaintContext(&canvas, paint_area));
|
| + root_view->Paint(ui::PaintContext(list.get(), 1.f, view_area, paint_area));
|
| EXPECT_FALSE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| }
|
|
|
| {
|
| - gfx::Canvas canvas(v1->size(), 1.f, true);
|
| gfx::Rect paint_area(1, 1);
|
| + gfx::Rect view_area(v1->size());
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(view_area, cc::DisplayItemListSettings());
|
|
|
| // The |v1| view is painted. If it used its offset incorrect, it would think
|
| // its at (10,11) instead of at (0,0) since it is the paint root.
|
| - v1->Paint(ui::PaintContext(&canvas, paint_area));
|
| + v1->Paint(ui::PaintContext(list.get(), 1.f, view_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_FALSE(v2->did_paint_);
|
| }
|
| @@ -847,12 +967,14 @@ TEST_F(ViewTest, PaintInPromotedToLayer) {
|
| v1->Reset();
|
|
|
| {
|
| - gfx::Canvas canvas(v1->size(), 1.f, true);
|
| gfx::Rect paint_area(3, 3, 1, 2);
|
| + gfx::Rect view_area(v1->size());
|
| + scoped_refptr<cc::DisplayItemList> list =
|
| + cc::DisplayItemList::Create(view_area, cc::DisplayItemListSettings());
|
|
|
| // The |v2| view is painted also. If it used its offset incorrect, it would
|
| // think its at (13,15) instead of at (3,4) since |v1| is the paint root.
|
| - v1->Paint(ui::PaintContext(&canvas, paint_area));
|
| + v1->Paint(ui::PaintContext(list.get(), 1.f, view_area, paint_area));
|
| EXPECT_TRUE(v1->did_paint_);
|
| EXPECT_TRUE(v2->did_paint_);
|
| }
|
|
|