| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/string_util.h" | 9 #include "base/string_util.h" |
| 10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
| (...skipping 2559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2570 #if defined(USE_AURA) | 2570 #if defined(USE_AURA) |
| 2571 ui::Layer* root_layer = NULL; | 2571 ui::Layer* root_layer = NULL; |
| 2572 gfx::Point origin; | 2572 gfx::Point origin; |
| 2573 widget()->CalculateOffsetToAncestorWithLayer(&origin, &root_layer); | 2573 widget()->CalculateOffsetToAncestorWithLayer(&origin, &root_layer); |
| 2574 #else | 2574 #else |
| 2575 ui::Layer* root_layer = widget()->GetRootView()->layer(); | 2575 ui::Layer* root_layer = widget()->GetRootView()->layer(); |
| 2576 #endif | 2576 #endif |
| 2577 View* content_view = new View; | 2577 View* content_view = new View; |
| 2578 widget()->SetContentsView(content_view); | 2578 widget()->SetContentsView(content_view); |
| 2579 | 2579 |
| 2580 #if !defined(USE_WEBKIT_COMPOSITOR) |
| 2581 // TODO(piman): with the webkit compositor, we don't create Textures on |
| 2582 // Layers. We're not supposed to be calling Layer::DrawTree. This test needs |
| 2583 // refactoring to fully work in that case. |
| 2580 root_layer->DrawTree(); | 2584 root_layer->DrawTree(); |
| 2581 ui::TestTexture::reset_live_count(); | 2585 ui::TestTexture::reset_live_count(); |
| 2586 #endif |
| 2582 | 2587 |
| 2583 // Create v1, give it a bounds and verify everything is set up correctly. | 2588 // Create v1, give it a bounds and verify everything is set up correctly. |
| 2584 View* v1 = new View; | 2589 View* v1 = new View; |
| 2585 v1->SetPaintToLayer(true); | 2590 v1->SetPaintToLayer(true); |
| 2591 #if !defined(USE_WEBKIT_COMPOSITOR) |
| 2586 root_layer->DrawTree(); | 2592 root_layer->DrawTree(); |
| 2587 EXPECT_EQ(0, ui::TestTexture::live_count()); | 2593 EXPECT_EQ(0, ui::TestTexture::live_count()); |
| 2594 #endif |
| 2588 EXPECT_TRUE(v1->layer() != NULL); | 2595 EXPECT_TRUE(v1->layer() != NULL); |
| 2589 v1->SetBounds(20, 30, 140, 150); | 2596 v1->SetBounds(20, 30, 140, 150); |
| 2590 content_view->AddChildView(v1); | 2597 content_view->AddChildView(v1); |
| 2598 #if !defined(USE_WEBKIT_COMPOSITOR) |
| 2591 root_layer->DrawTree(); | 2599 root_layer->DrawTree(); |
| 2592 EXPECT_EQ(1, ui::TestTexture::live_count()); | 2600 EXPECT_EQ(1, ui::TestTexture::live_count()); |
| 2601 #endif |
| 2593 ASSERT_TRUE(v1->layer() != NULL); | 2602 ASSERT_TRUE(v1->layer() != NULL); |
| 2594 EXPECT_EQ(root_layer, v1->layer()->parent()); | 2603 EXPECT_EQ(root_layer, v1->layer()->parent()); |
| 2595 EXPECT_EQ(gfx::Rect(20, 30, 140, 150), v1->layer()->bounds()); | 2604 EXPECT_EQ(gfx::Rect(20, 30, 140, 150), v1->layer()->bounds()); |
| 2596 | 2605 |
| 2597 // Create v2 as a child of v1 and do basic assertion testing. | 2606 // Create v2 as a child of v1 and do basic assertion testing. |
| 2598 View* v2 = new View; | 2607 View* v2 = new View; |
| 2599 v1->AddChildView(v2); | 2608 v1->AddChildView(v2); |
| 2600 EXPECT_TRUE(v2->layer() == NULL); | 2609 EXPECT_TRUE(v2->layer() == NULL); |
| 2601 v2->SetBounds(10, 20, 30, 40); | 2610 v2->SetBounds(10, 20, 30, 40); |
| 2602 v2->SetPaintToLayer(true); | 2611 v2->SetPaintToLayer(true); |
| 2612 #if !defined(USE_WEBKIT_COMPOSITOR) |
| 2603 root_layer->DrawTree(); | 2613 root_layer->DrawTree(); |
| 2604 EXPECT_EQ(2, ui::TestTexture::live_count()); | 2614 EXPECT_EQ(2, ui::TestTexture::live_count()); |
| 2615 #endif |
| 2605 ASSERT_TRUE(v2->layer() != NULL); | 2616 ASSERT_TRUE(v2->layer() != NULL); |
| 2606 EXPECT_EQ(v1->layer(), v2->layer()->parent()); | 2617 EXPECT_EQ(v1->layer(), v2->layer()->parent()); |
| 2607 EXPECT_EQ(gfx::Rect(10, 20, 30, 40), v2->layer()->bounds()); | 2618 EXPECT_EQ(gfx::Rect(10, 20, 30, 40), v2->layer()->bounds()); |
| 2608 | 2619 |
| 2609 // Turn off v1s layer. v2 should still have a layer but its parent should have | 2620 // Turn off v1s layer. v2 should still have a layer but its parent should have |
| 2610 // changed. | 2621 // changed. |
| 2611 v1->SetPaintToLayer(false); | 2622 v1->SetPaintToLayer(false); |
| 2623 #if !defined(USE_WEBKIT_COMPOSITOR) |
| 2612 root_layer->DrawTree(); | 2624 root_layer->DrawTree(); |
| 2613 EXPECT_EQ(1, ui::TestTexture::live_count()); | 2625 EXPECT_EQ(1, ui::TestTexture::live_count()); |
| 2626 #endif |
| 2614 EXPECT_TRUE(v1->layer() == NULL); | 2627 EXPECT_TRUE(v1->layer() == NULL); |
| 2615 EXPECT_TRUE(v2->layer() != NULL); | 2628 EXPECT_TRUE(v2->layer() != NULL); |
| 2616 EXPECT_EQ(root_layer, v2->layer()->parent()); | 2629 EXPECT_EQ(root_layer, v2->layer()->parent()); |
| 2617 ASSERT_EQ(1u, root_layer->children().size()); | 2630 ASSERT_EQ(1u, root_layer->children().size()); |
| 2618 EXPECT_EQ(root_layer->children()[0], v2->layer()); | 2631 EXPECT_EQ(root_layer->children()[0], v2->layer()); |
| 2619 // The bounds of the layer should have changed to be relative to the root view | 2632 // The bounds of the layer should have changed to be relative to the root view |
| 2620 // now. | 2633 // now. |
| 2621 EXPECT_EQ(gfx::Rect(30, 50, 30, 40), v2->layer()->bounds()); | 2634 EXPECT_EQ(gfx::Rect(30, 50, 30, 40), v2->layer()->bounds()); |
| 2622 | 2635 |
| 2623 // Make v1 have a layer again and verify v2s layer is wired up correctly. | 2636 // Make v1 have a layer again and verify v2s layer is wired up correctly. |
| 2624 ui::Transform transform; | 2637 ui::Transform transform; |
| 2625 transform.SetScale(2.0f, 2.0f); | 2638 transform.SetScale(2.0f, 2.0f); |
| 2626 v1->SetTransform(transform); | 2639 v1->SetTransform(transform); |
| 2640 #if !defined(USE_WEBKIT_COMPOSITOR) |
| 2627 root_layer->DrawTree(); | 2641 root_layer->DrawTree(); |
| 2628 EXPECT_EQ(2, ui::TestTexture::live_count()); | 2642 EXPECT_EQ(2, ui::TestTexture::live_count()); |
| 2643 #endif |
| 2629 EXPECT_TRUE(v1->layer() != NULL); | 2644 EXPECT_TRUE(v1->layer() != NULL); |
| 2630 EXPECT_TRUE(v2->layer() != NULL); | 2645 EXPECT_TRUE(v2->layer() != NULL); |
| 2631 EXPECT_EQ(root_layer, v1->layer()->parent()); | 2646 EXPECT_EQ(root_layer, v1->layer()->parent()); |
| 2632 EXPECT_EQ(v1->layer(), v2->layer()->parent()); | 2647 EXPECT_EQ(v1->layer(), v2->layer()->parent()); |
| 2633 ASSERT_EQ(1u, root_layer->children().size()); | 2648 ASSERT_EQ(1u, root_layer->children().size()); |
| 2634 EXPECT_EQ(root_layer->children()[0], v1->layer()); | 2649 EXPECT_EQ(root_layer->children()[0], v1->layer()); |
| 2635 ASSERT_EQ(1u, v1->layer()->children().size()); | 2650 ASSERT_EQ(1u, v1->layer()->children().size()); |
| 2636 EXPECT_EQ(v1->layer()->children()[0], v2->layer()); | 2651 EXPECT_EQ(v1->layer()->children()[0], v2->layer()); |
| 2637 EXPECT_EQ(gfx::Rect(10, 20, 30, 40), v2->layer()->bounds()); | 2652 EXPECT_EQ(gfx::Rect(10, 20, 30, 40), v2->layer()->bounds()); |
| 2638 } | 2653 } |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2969 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { | 2984 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE { |
| 2970 painted_ = true; | 2985 painted_ = true; |
| 2971 } | 2986 } |
| 2972 | 2987 |
| 2973 private: | 2988 private: |
| 2974 bool painted_; | 2989 bool painted_; |
| 2975 | 2990 |
| 2976 DISALLOW_COPY_AND_ASSIGN(PaintTrackingView); | 2991 DISALLOW_COPY_AND_ASSIGN(PaintTrackingView); |
| 2977 }; | 2992 }; |
| 2978 | 2993 |
| 2994 #if !defined(USE_WEBKIT_COMPOSITOR) |
| 2995 // TODO(piman): this test relies on the way the non-webkit compositor works. |
| 2996 // Layer::DrawTree should not be called with the webkit compositor. In the |
| 2997 // WebKit case, it needs to go through the "real" compositor (not the test one) |
| 2998 // to do the paints on the layer/views. |
| 2999 |
| 2979 // Makes sure child views with layers aren't painted when paint starts at an | 3000 // Makes sure child views with layers aren't painted when paint starts at an |
| 2980 // ancestor. | 3001 // ancestor. |
| 2981 TEST_F(ViewLayerTest, DontPaintChildrenWithLayers) { | 3002 TEST_F(ViewLayerTest, DontPaintChildrenWithLayers) { |
| 2982 PaintTrackingView* content_view = new PaintTrackingView; | 3003 PaintTrackingView* content_view = new PaintTrackingView; |
| 2983 widget()->SetContentsView(content_view); | 3004 widget()->SetContentsView(content_view); |
| 2984 content_view->SetPaintToLayer(true); | 3005 content_view->SetPaintToLayer(true); |
| 2985 GetRootLayer()->DrawTree(); | 3006 GetRootLayer()->DrawTree(); |
| 2986 GetRootLayer()->SchedulePaint(gfx::Rect(0, 0, 10, 10)); | 3007 GetRootLayer()->SchedulePaint(gfx::Rect(0, 0, 10, 10)); |
| 2987 content_view->set_painted(false); | 3008 content_view->set_painted(false); |
| 2988 // content_view no longer has a dirty rect. Paint from the root and make sure | 3009 // content_view no longer has a dirty rect. Paint from the root and make sure |
| 2989 // PaintTrackingView isn't painted. | 3010 // PaintTrackingView isn't painted. |
| 2990 GetRootLayer()->DrawTree(); | 3011 GetRootLayer()->DrawTree(); |
| 2991 EXPECT_FALSE(content_view->painted()); | 3012 EXPECT_FALSE(content_view->painted()); |
| 2992 | 3013 |
| 2993 // Make content_view have a dirty rect, paint the layers and make sure | 3014 // Make content_view have a dirty rect, paint the layers and make sure |
| 2994 // PaintTrackingView is painted. | 3015 // PaintTrackingView is painted. |
| 2995 content_view->layer()->SchedulePaint(gfx::Rect(0, 0, 10, 10)); | 3016 content_view->layer()->SchedulePaint(gfx::Rect(0, 0, 10, 10)); |
| 2996 GetRootLayer()->DrawTree(); | 3017 GetRootLayer()->DrawTree(); |
| 2997 EXPECT_TRUE(content_view->painted()); | 3018 EXPECT_TRUE(content_view->painted()); |
| 2998 } | 3019 } |
| 3020 #endif |
| 2999 | 3021 |
| 3000 // Tests that the visibility of child layers are updated correctly when a View's | 3022 // Tests that the visibility of child layers are updated correctly when a View's |
| 3001 // visibility changes. | 3023 // visibility changes. |
| 3002 TEST_F(ViewLayerTest, VisibilityChildLayers) { | 3024 TEST_F(ViewLayerTest, VisibilityChildLayers) { |
| 3003 View* v1 = new View; | 3025 View* v1 = new View; |
| 3004 v1->SetPaintToLayer(true); | 3026 v1->SetPaintToLayer(true); |
| 3005 widget()->SetContentsView(v1); | 3027 widget()->SetContentsView(v1); |
| 3006 | 3028 |
| 3007 View* v2 = new View; | 3029 View* v2 = new View; |
| 3008 v1->AddChildView(v2); | 3030 v1->AddChildView(v2); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3061 ScrambleTree(content); | 3083 ScrambleTree(content); |
| 3062 EXPECT_TRUE(ViewAndLayerTreeAreConsistent(content, content->layer())); | 3084 EXPECT_TRUE(ViewAndLayerTreeAreConsistent(content, content->layer())); |
| 3063 | 3085 |
| 3064 ScrambleTree(content); | 3086 ScrambleTree(content); |
| 3065 EXPECT_TRUE(ViewAndLayerTreeAreConsistent(content, content->layer())); | 3087 EXPECT_TRUE(ViewAndLayerTreeAreConsistent(content, content->layer())); |
| 3066 } | 3088 } |
| 3067 | 3089 |
| 3068 #endif // VIEWS_COMPOSITOR | 3090 #endif // VIEWS_COMPOSITOR |
| 3069 | 3091 |
| 3070 } // namespace views | 3092 } // namespace views |
| OLD | NEW |