Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(404)

Side by Side Diff: ui/views/view_unittest.cc

Issue 1423653005: Further plumb visual rect into cc:DisplayItemList. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix clip recorder params in omnibox. Created 5 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 6
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "base/rand_util.h" 8 #include "base/rand_util.h"
9 #include "base/strings/string_util.h" 9 #include "base/strings/string_util.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 510 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings()); 521 cc::DisplayItemList::Create(first_paint, cc::DisplayItemListSettings());
522 root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint)); 522 root_view->Paint(ui::PaintContext(list.get(), 1.f, first_paint));
523 523
524 // The empty view has nothing to paint so it doesn't try build a cache, nor do 524 // The empty view has nothing to paint so it doesn't try build a cache, nor do
525 // its children which would be clipped by its (empty) self. 525 // its children which would be clipped by its (empty) self.
526 EXPECT_FALSE(v1->did_paint_); 526 EXPECT_FALSE(v1->did_paint_);
527 EXPECT_FALSE(v11->did_paint_); 527 EXPECT_FALSE(v11->did_paint_);
528 EXPECT_TRUE(v2->did_paint_); 528 EXPECT_TRUE(v2->did_paint_);
529 } 529 }
530 530
531 TEST_F(ViewTest, PaintWithMovedViewUsesCache) {
532 ScopedTestPaintWidget widget(CreateParams(Widget::InitParams::TYPE_POPUP));
533 View* root_view = widget->GetRootView();
534 TestView* v1 = new TestView;
535 v1->SetBounds(10, 11, 12, 13);
536 root_view->AddChildView(v1);
537
538 // Paint everything once, since it has to build its cache. Then we can test
539 // invalidation.
540 gfx::Rect pixel_rect = gfx::Rect(1, 1);
541 float device_scale_factor = 1.f;
542 scoped_refptr<cc::DisplayItemList> list =
543 cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
544 root_view->Paint(
545 ui::PaintContext(list.get(), device_scale_factor, pixel_rect));
546 EXPECT_TRUE(v1->did_paint_);
547 v1->Reset();
548 // The visual rects for (clip, drawing, transform) should be in layer space.
549 gfx::Rect expected_visual_rect_in_layer_space(10, 11, 12, 13);
550 int item_index = 3;
551 EXPECT_EQ(expected_visual_rect_in_layer_space,
552 list->VisualRectForTesting(item_index++));
553 EXPECT_EQ(expected_visual_rect_in_layer_space,
554 list->VisualRectForTesting(item_index++));
555 EXPECT_EQ(expected_visual_rect_in_layer_space,
556 list->VisualRectForTesting(item_index));
557
558 // If invalidation doesn't intersect v1, we paint with the cache.
559 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
560 root_view->Paint(
561 ui::PaintContext(list.get(), device_scale_factor, pixel_rect));
562 EXPECT_FALSE(v1->did_paint_);
563 v1->Reset();
564
565 // If invalidation does intersect v1, we don't paint with the cache.
566 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
567 root_view->Paint(
568 ui::PaintContext(list.get(), device_scale_factor, v1->bounds()));
569 EXPECT_TRUE(v1->did_paint_);
570 v1->Reset();
571
572 // Moving the view should still use the cache when the invalidation doesn't
573 // intersect v1.
574 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
575 v1->SetX(9);
576 root_view->Paint(
577 ui::PaintContext(list.get(), device_scale_factor, pixel_rect));
578 EXPECT_FALSE(v1->did_paint_);
579 v1->Reset();
580 item_index = 3;
581 expected_visual_rect_in_layer_space.SetRect(9, 11, 12, 13);
582 EXPECT_EQ(expected_visual_rect_in_layer_space,
583 list->VisualRectForTesting(item_index++));
584 EXPECT_EQ(expected_visual_rect_in_layer_space,
585 list->VisualRectForTesting(item_index++));
586 EXPECT_EQ(expected_visual_rect_in_layer_space,
587 list->VisualRectForTesting(item_index));
588
589 // Moving the view should not use the cache when painting without
590 // invalidation.
591 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
592 v1->SetX(8);
593 root_view->Paint(ui::PaintContext(
594 ui::PaintContext(list.get(), device_scale_factor, pixel_rect),
595 ui::PaintContext::CLONE_WITHOUT_INVALIDATION));
596 EXPECT_TRUE(v1->did_paint_);
597 v1->Reset();
598 item_index = 3;
599 expected_visual_rect_in_layer_space.SetRect(8, 11, 12, 13);
600 EXPECT_EQ(expected_visual_rect_in_layer_space,
601 list->VisualRectForTesting(item_index++));
602 EXPECT_EQ(expected_visual_rect_in_layer_space,
603 list->VisualRectForTesting(item_index++));
604 EXPECT_EQ(expected_visual_rect_in_layer_space,
605 list->VisualRectForTesting(item_index));
606 }
607
608 TEST_F(ViewTest, PaintWithMovedViewUsesCacheInRTL) {
609 ScopedRTL rtl;
610 ScopedTestPaintWidget widget(CreateParams(Widget::InitParams::TYPE_POPUP));
611 View* root_view = widget->GetRootView();
612 TestView* v1 = new TestView;
613 v1->SetBounds(10, 11, 12, 13);
614 root_view->AddChildView(v1);
615
616 // Paint everything once, since it has to build its cache. Then we can test
617 // invalidation.
618 gfx::Rect pixel_rect = gfx::Rect(1, 1);
619 float device_scale_factor = 1.f;
620 scoped_refptr<cc::DisplayItemList> list =
621 cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
622 root_view->Paint(
623 ui::PaintContext(list.get(), device_scale_factor, pixel_rect));
624 EXPECT_TRUE(v1->did_paint_);
625 v1->Reset();
626 // The visual rects for (clip, drawing, transform) should be in layer space.
627 // x: 25 - 10(x) - 12(width) = 3
628 gfx::Rect expected_visual_rect_in_layer_space(3, 11, 12, 13);
629 int item_index = 3;
630 EXPECT_EQ(expected_visual_rect_in_layer_space,
631 list->VisualRectForTesting(item_index++));
632 EXPECT_EQ(expected_visual_rect_in_layer_space,
633 list->VisualRectForTesting(item_index++));
634 EXPECT_EQ(expected_visual_rect_in_layer_space,
635 list->VisualRectForTesting(item_index));
636
637 // If invalidation doesn't intersect v1, we paint with the cache.
638 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
639 root_view->Paint(
640 ui::PaintContext(list.get(), device_scale_factor, pixel_rect));
641 EXPECT_FALSE(v1->did_paint_);
642 v1->Reset();
643
644 // If invalidation does intersect v1, we don't paint with the cache.
645 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
646 root_view->Paint(
647 ui::PaintContext(list.get(), device_scale_factor, v1->bounds()));
648 EXPECT_TRUE(v1->did_paint_);
649 v1->Reset();
650
651 // Moving the view should still use the cache when the invalidation doesn't
652 // intersect v1.
653 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
654 v1->SetX(9);
655 root_view->Paint(
656 ui::PaintContext(list.get(), device_scale_factor, pixel_rect));
657 EXPECT_FALSE(v1->did_paint_);
658 v1->Reset();
659 item_index = 3;
660 // x: 25 - 9(x) - 12(width) = 4
661 expected_visual_rect_in_layer_space.SetRect(4, 11, 12, 13);
662 EXPECT_EQ(expected_visual_rect_in_layer_space,
663 list->VisualRectForTesting(item_index++));
664 EXPECT_EQ(expected_visual_rect_in_layer_space,
665 list->VisualRectForTesting(item_index++));
666 EXPECT_EQ(expected_visual_rect_in_layer_space,
667 list->VisualRectForTesting(item_index));
668
669 // Moving the view should not use the cache when painting without
670 // invalidation.
671 list = cc::DisplayItemList::Create(pixel_rect, cc::DisplayItemListSettings());
672 v1->SetX(8);
673 root_view->Paint(ui::PaintContext(
674 ui::PaintContext(list.get(), device_scale_factor, pixel_rect),
675 ui::PaintContext::CLONE_WITHOUT_INVALIDATION));
676 EXPECT_TRUE(v1->did_paint_);
677 v1->Reset();
678 item_index = 3;
679 // x: 25 - 8(x) - 12(width) = 5
680 expected_visual_rect_in_layer_space.SetRect(5, 11, 12, 13);
681 EXPECT_EQ(expected_visual_rect_in_layer_space,
682 list->VisualRectForTesting(item_index++));
683 EXPECT_EQ(expected_visual_rect_in_layer_space,
684 list->VisualRectForTesting(item_index++));
685 EXPECT_EQ(expected_visual_rect_in_layer_space,
686 list->VisualRectForTesting(item_index));
687 }
688
531 TEST_F(ViewTest, PaintWithUnknownInvalidation) { 689 TEST_F(ViewTest, PaintWithUnknownInvalidation) {
532 ScopedTestPaintWidget widget(CreateParams(Widget::InitParams::TYPE_POPUP)); 690 ScopedTestPaintWidget widget(CreateParams(Widget::InitParams::TYPE_POPUP));
533 View* root_view = widget->GetRootView(); 691 View* root_view = widget->GetRootView();
534 692
535 TestView* v1 = new TestView; 693 TestView* v1 = new TestView;
536 v1->SetBounds(10, 11, 12, 13); 694 v1->SetBounds(10, 11, 12, 13);
537 root_view->AddChildView(v1); 695 root_view->AddChildView(v1);
538 696
539 TestView* v2 = new TestView; 697 TestView* v2 = new TestView;
540 v2->SetBounds(3, 4, 6, 5); 698 v2->SetBounds(3, 4, 6, 5);
(...skipping 3591 matching lines...) Expand 10 before | Expand all | Expand 10 after
4132 // notification. 4290 // notification.
4133 TestView* test_view_child_2 = new TestView(); 4291 TestView* test_view_child_2 = new TestView();
4134 test_view->AddChildView(test_view_child_2); 4292 test_view->AddChildView(test_view_child_2);
4135 EXPECT_TRUE(test_view_child_2->native_theme_); 4293 EXPECT_TRUE(test_view_child_2->native_theme_);
4136 EXPECT_EQ(widget->GetNativeTheme(), test_view_child_2->native_theme_); 4294 EXPECT_EQ(widget->GetNativeTheme(), test_view_child_2->native_theme_);
4137 4295
4138 widget->CloseNow(); 4296 widget->CloseNow();
4139 } 4297 }
4140 4298
4141 } // namespace views 4299 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698