| OLD | NEW |
| 1 // Copyright 2011 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/layers/tiled_layer.h" | 5 #include "cc/layers/tiled_layer.h" |
| 6 | 6 |
| 7 #include <limits> | 7 #include <limits> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "cc/debug/overdraw_metrics.h" | 10 #include "cc/debug/overdraw_metrics.h" |
| (...skipping 560 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 // Create a LayerTreeHost that has the right viewportsize, | 571 // Create a LayerTreeHost that has the right viewportsize, |
| 572 // so the layer is considered small enough. | 572 // so the layer is considered small enough. |
| 573 bool run_out_of_memory[2] = { false, true }; | 573 bool run_out_of_memory[2] = { false, true }; |
| 574 for (int i = 0; i < 2; i++) { | 574 for (int i = 0; i < 2; i++) { |
| 575 // Create a layer with 5x5 tiles, with 4x4 size viewport. | 575 // Create a layer with 5x5 tiles, with 4x4 size viewport. |
| 576 int viewport_width = 4 * FakeTiledLayer::tile_size().width(); | 576 int viewport_width = 4 * FakeTiledLayer::tile_size().width(); |
| 577 int viewport_height = 4 * FakeTiledLayer::tile_size().width(); | 577 int viewport_height = 4 * FakeTiledLayer::tile_size().width(); |
| 578 int layer_width = 5 * FakeTiledLayer::tile_size().width(); | 578 int layer_width = 5 * FakeTiledLayer::tile_size().width(); |
| 579 int layer_height = 5 * FakeTiledLayer::tile_size().height(); | 579 int layer_height = 5 * FakeTiledLayer::tile_size().height(); |
| 580 int memory_for_layer = layer_width * layer_height * 4; | 580 int memory_for_layer = layer_width * layer_height * 4; |
| 581 layer_tree_host_->SetViewportSize(gfx::Size(layer_width, layer_height), | 581 layer_tree_host_->SetViewportSize( |
| 582 gfx::Size(layer_width, layer_height)); | 582 gfx::Size(viewport_width, viewport_height), |
| 583 gfx::Size(viewport_width, viewport_height)); |
| 583 | 584 |
| 584 // Use 10x5 tiles to run out of memory. | 585 // Use 10x5 tiles to run out of memory. |
| 585 if (run_out_of_memory[i]) | 586 if (run_out_of_memory[i]) |
| 586 layer_width *= 2; | 587 layer_width *= 2; |
| 587 | 588 |
| 588 resource_manager_->SetMaxMemoryLimitBytes(memory_for_layer); | 589 resource_manager_->SetMaxMemoryLimitBytes(memory_for_layer); |
| 589 | 590 |
| 590 scoped_refptr<FakeTiledLayer> layer = | 591 scoped_refptr<FakeTiledLayer> layer = |
| 591 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); | 592 make_scoped_refptr(new FakeTiledLayer(resource_manager_.get())); |
| 592 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 593 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
| (...skipping 358 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 | 952 |
| 952 layer_tree_host_->SetRootLayer(layer); | 953 layer_tree_host_->SetRootLayer(layer); |
| 953 layer_tree_host_->SetViewportSize(gfx::Size(300, 200), gfx::Size(300, 200)); | 954 layer_tree_host_->SetViewportSize(gfx::Size(300, 200), gfx::Size(300, 200)); |
| 954 | 955 |
| 955 // Full update of all 6 tiles. | 956 // Full update of all 6 tiles. |
| 956 layer_tree_host_->UpdateLayers(queue_.get(), | 957 layer_tree_host_->UpdateLayers(queue_.get(), |
| 957 std::numeric_limits<size_t>::max()); | 958 std::numeric_limits<size_t>::max()); |
| 958 { | 959 { |
| 959 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 960 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
| 960 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 961 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
| 961 EXPECT_EQ(6, queue_->FullUploadSize()); | 962 EXPECT_EQ(6u, queue_->FullUploadSize()); |
| 962 EXPECT_EQ(0, queue_->PartialUploadSize()); | 963 EXPECT_EQ(0u, queue_->PartialUploadSize()); |
| 963 UpdateTextures(); | 964 UpdateTextures(); |
| 964 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); | 965 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); |
| 965 EXPECT_FALSE(queue_->HasMoreUpdates()); | 966 EXPECT_FALSE(queue_->HasMoreUpdates()); |
| 966 layer->fake_layer_updater()->ClearUpdateCount(); | 967 layer->fake_layer_updater()->ClearUpdateCount(); |
| 967 LayerPushPropertiesTo(layer.get(), layer_impl.get()); | 968 LayerPushPropertiesTo(layer.get(), layer_impl.get()); |
| 968 } | 969 } |
| 969 layer_tree_host_->CommitComplete(); | 970 layer_tree_host_->CommitComplete(); |
| 970 | 971 |
| 971 // Full update of 3 tiles and partial update of 3 tiles. | 972 // Full update of 3 tiles and partial update of 3 tiles. |
| 972 layer->InvalidateContentRect(gfx::Rect(0, 0, 300, 150)); | 973 layer->InvalidateContentRect(gfx::Rect(0, 0, 300, 150)); |
| 973 layer_tree_host_->UpdateLayers(queue_.get(), | 974 layer_tree_host_->UpdateLayers(queue_.get(), |
| 974 std::numeric_limits<size_t>::max()); | 975 std::numeric_limits<size_t>::max()); |
| 975 { | 976 { |
| 976 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 977 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
| 977 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 978 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
| 978 EXPECT_EQ(3, queue_->FullUploadSize()); | 979 EXPECT_EQ(3u, queue_->FullUploadSize()); |
| 979 EXPECT_EQ(3, queue_->PartialUploadSize()); | 980 EXPECT_EQ(3u, queue_->PartialUploadSize()); |
| 980 UpdateTextures(); | 981 UpdateTextures(); |
| 981 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); | 982 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); |
| 982 EXPECT_FALSE(queue_->HasMoreUpdates()); | 983 EXPECT_FALSE(queue_->HasMoreUpdates()); |
| 983 layer->fake_layer_updater()->ClearUpdateCount(); | 984 layer->fake_layer_updater()->ClearUpdateCount(); |
| 984 LayerPushPropertiesTo(layer.get(), layer_impl.get()); | 985 LayerPushPropertiesTo(layer.get(), layer_impl.get()); |
| 985 } | 986 } |
| 986 layer_tree_host_->CommitComplete(); | 987 layer_tree_host_->CommitComplete(); |
| 987 | 988 |
| 988 // Partial update of 6 tiles. | 989 // Partial update of 6 tiles. |
| 989 layer->InvalidateContentRect(gfx::Rect(50, 50, 200, 100)); | 990 layer->InvalidateContentRect(gfx::Rect(50, 50, 200, 100)); |
| 990 { | 991 { |
| 991 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 992 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
| 992 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 993 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
| 993 layer_tree_host_->UpdateLayers(queue_.get(), | 994 layer_tree_host_->UpdateLayers(queue_.get(), |
| 994 std::numeric_limits<size_t>::max()); | 995 std::numeric_limits<size_t>::max()); |
| 995 EXPECT_EQ(2, queue_->FullUploadSize()); | 996 EXPECT_EQ(2u, queue_->FullUploadSize()); |
| 996 EXPECT_EQ(4, queue_->PartialUploadSize()); | 997 EXPECT_EQ(4u, queue_->PartialUploadSize()); |
| 997 UpdateTextures(); | 998 UpdateTextures(); |
| 998 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); | 999 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); |
| 999 EXPECT_FALSE(queue_->HasMoreUpdates()); | 1000 EXPECT_FALSE(queue_->HasMoreUpdates()); |
| 1000 layer->fake_layer_updater()->ClearUpdateCount(); | 1001 layer->fake_layer_updater()->ClearUpdateCount(); |
| 1001 LayerPushPropertiesTo(layer.get(), layer_impl.get()); | 1002 LayerPushPropertiesTo(layer.get(), layer_impl.get()); |
| 1002 } | 1003 } |
| 1003 layer_tree_host_->CommitComplete(); | 1004 layer_tree_host_->CommitComplete(); |
| 1004 | 1005 |
| 1005 // Checkerboard all tiles. | 1006 // Checkerboard all tiles. |
| 1006 layer->InvalidateContentRect(gfx::Rect(0, 0, 300, 200)); | 1007 layer->InvalidateContentRect(gfx::Rect(0, 0, 300, 200)); |
| 1007 { | 1008 { |
| 1008 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 1009 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
| 1009 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 1010 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
| 1010 LayerPushPropertiesTo(layer.get(), layer_impl.get()); | 1011 LayerPushPropertiesTo(layer.get(), layer_impl.get()); |
| 1011 } | 1012 } |
| 1012 layer_tree_host_->CommitComplete(); | 1013 layer_tree_host_->CommitComplete(); |
| 1013 | 1014 |
| 1014 // Partial update of 6 checkerboard tiles. | 1015 // Partial update of 6 checkerboard tiles. |
| 1015 layer->InvalidateContentRect(gfx::Rect(50, 50, 200, 100)); | 1016 layer->InvalidateContentRect(gfx::Rect(50, 50, 200, 100)); |
| 1016 { | 1017 { |
| 1017 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 1018 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
| 1018 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 1019 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
| 1019 layer_tree_host_->UpdateLayers(queue_.get(), | 1020 layer_tree_host_->UpdateLayers(queue_.get(), |
| 1020 std::numeric_limits<size_t>::max()); | 1021 std::numeric_limits<size_t>::max()); |
| 1021 EXPECT_EQ(6, queue_->FullUploadSize()); | 1022 EXPECT_EQ(6u, queue_->FullUploadSize()); |
| 1022 EXPECT_EQ(0, queue_->PartialUploadSize()); | 1023 EXPECT_EQ(0u, queue_->PartialUploadSize()); |
| 1023 UpdateTextures(); | 1024 UpdateTextures(); |
| 1024 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); | 1025 EXPECT_EQ(6, layer->fake_layer_updater()->update_count()); |
| 1025 EXPECT_FALSE(queue_->HasMoreUpdates()); | 1026 EXPECT_FALSE(queue_->HasMoreUpdates()); |
| 1026 layer->fake_layer_updater()->ClearUpdateCount(); | 1027 layer->fake_layer_updater()->ClearUpdateCount(); |
| 1027 LayerPushPropertiesTo(layer.get(), layer_impl.get()); | 1028 LayerPushPropertiesTo(layer.get(), layer_impl.get()); |
| 1028 } | 1029 } |
| 1029 layer_tree_host_->CommitComplete(); | 1030 layer_tree_host_->CommitComplete(); |
| 1030 | 1031 |
| 1031 // Partial update of 4 tiles. | 1032 // Partial update of 4 tiles. |
| 1032 layer->InvalidateContentRect(gfx::Rect(50, 50, 100, 100)); | 1033 layer->InvalidateContentRect(gfx::Rect(50, 50, 100, 100)); |
| 1033 { | 1034 { |
| 1034 scoped_ptr<FakeTiledLayerImpl> layer_impl = | 1035 scoped_ptr<FakeTiledLayerImpl> layer_impl = |
| 1035 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); | 1036 make_scoped_ptr(new FakeTiledLayerImpl(host_impl_->active_tree(), 1)); |
| 1036 layer_tree_host_->UpdateLayers(queue_.get(), | 1037 layer_tree_host_->UpdateLayers(queue_.get(), |
| 1037 std::numeric_limits<size_t>::max()); | 1038 std::numeric_limits<size_t>::max()); |
| 1038 EXPECT_EQ(0, queue_->FullUploadSize()); | 1039 EXPECT_EQ(0u, queue_->FullUploadSize()); |
| 1039 EXPECT_EQ(4, queue_->PartialUploadSize()); | 1040 EXPECT_EQ(4u, queue_->PartialUploadSize()); |
| 1040 UpdateTextures(); | 1041 UpdateTextures(); |
| 1041 EXPECT_EQ(4, layer->fake_layer_updater()->update_count()); | 1042 EXPECT_EQ(4, layer->fake_layer_updater()->update_count()); |
| 1042 EXPECT_FALSE(queue_->HasMoreUpdates()); | 1043 EXPECT_FALSE(queue_->HasMoreUpdates()); |
| 1043 layer->fake_layer_updater()->ClearUpdateCount(); | 1044 layer->fake_layer_updater()->ClearUpdateCount(); |
| 1044 LayerPushPropertiesTo(layer.get(), layer_impl.get()); | 1045 LayerPushPropertiesTo(layer.get(), layer_impl.get()); |
| 1045 } | 1046 } |
| 1046 layer_tree_host_->CommitComplete(); | 1047 layer_tree_host_->CommitComplete(); |
| 1047 | 1048 |
| 1048 ResourceManagerClearAllMemory(layer_tree_host_->contents_texture_manager(), | 1049 ResourceManagerClearAllMemory(layer_tree_host_->contents_texture_manager(), |
| 1049 resource_provider_.get()); | 1050 resource_provider_.get()); |
| (...skipping 748 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1798 // Invalidate the entire layer in layer space. When painting, the rect given | 1799 // Invalidate the entire layer in layer space. When painting, the rect given |
| 1799 // to webkit should match the layer's bounds. | 1800 // to webkit should match the layer's bounds. |
| 1800 layer->SetNeedsDisplayRect(layer_rect); | 1801 layer->SetNeedsDisplayRect(layer_rect); |
| 1801 layer->Update(queue_.get(), 0, NULL); | 1802 layer->Update(queue_.get(), 0, NULL); |
| 1802 | 1803 |
| 1803 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect()); | 1804 EXPECT_RECT_EQ(layer_rect, layer->tracking_layer_painter()->PaintedRect()); |
| 1804 } | 1805 } |
| 1805 | 1806 |
| 1806 } // namespace | 1807 } // namespace |
| 1807 } // namespace cc | 1808 } // namespace cc |
| OLD | NEW |