| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "cc/layers/nine_patch_layer.h" | 5 #include "cc/layers/nine_patch_layer.h" |
| 6 | 6 |
| 7 #include "cc/debug/overdraw_metrics.h" | 7 #include "cc/debug/overdraw_metrics.h" |
| 8 #include "cc/resources/prioritized_resource_manager.h" | 8 #include "cc/resources/prioritized_resource_manager.h" |
| 9 #include "cc/resources/resource_provider.h" | 9 #include "cc/resources/resource_provider.h" |
| 10 #include "cc/resources/resource_update_queue.h" | 10 #include "cc/resources/resource_update_queue.h" |
| 11 #include "cc/resources/scoped_ui_resource.h" |
| 11 #include "cc/scheduler/texture_uploader.h" | 12 #include "cc/scheduler/texture_uploader.h" |
| 12 #include "cc/test/fake_layer_tree_host_client.h" | 13 #include "cc/test/fake_layer_tree_host_client.h" |
| 13 #include "cc/test/fake_output_surface.h" | 14 #include "cc/test/fake_output_surface.h" |
| 14 #include "cc/test/fake_output_surface_client.h" | 15 #include "cc/test/fake_output_surface_client.h" |
| 15 #include "cc/test/geometry_test_utils.h" | 16 #include "cc/test/geometry_test_utils.h" |
| 16 #include "cc/trees/layer_tree_host.h" | 17 #include "cc/trees/layer_tree_host.h" |
| 17 #include "cc/trees/occlusion_tracker.h" | 18 #include "cc/trees/occlusion_tracker.h" |
| 18 #include "cc/trees/single_thread_proxy.h" | 19 #include "cc/trees/single_thread_proxy.h" |
| 19 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 20 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 27 matching lines...) Expand all Loading... |
| 48 } | 49 } |
| 49 | 50 |
| 50 virtual void TearDown() { | 51 virtual void TearDown() { |
| 51 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 52 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
| 52 } | 53 } |
| 53 | 54 |
| 54 scoped_ptr<MockLayerTreeHost> layer_tree_host_; | 55 scoped_ptr<MockLayerTreeHost> layer_tree_host_; |
| 55 FakeLayerTreeHostClient fake_client_; | 56 FakeLayerTreeHostClient fake_client_; |
| 56 }; | 57 }; |
| 57 | 58 |
| 58 TEST_F(NinePatchLayerTest, TriggerFullUploadOnceWhenChangingBitmap) { | 59 TEST_F(NinePatchLayerTest, SetBitmap) { |
| 59 scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create(); | 60 scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create(); |
| 60 ASSERT_TRUE(test_layer.get()); | 61 ASSERT_TRUE(test_layer.get()); |
| 61 test_layer->SetIsDrawable(true); | 62 test_layer->SetIsDrawable(true); |
| 62 test_layer->SetBounds(gfx::Size(100, 100)); | 63 test_layer->SetBounds(gfx::Size(100, 100)); |
| 63 | 64 |
| 64 layer_tree_host_->SetRootLayer(test_layer); | 65 layer_tree_host_->SetRootLayer(test_layer); |
| 65 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | 66 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
| 66 EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get()); | 67 EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get()); |
| 67 | 68 |
| 68 layer_tree_host_->InitializeOutputSurfaceIfNeeded(); | 69 layer_tree_host_->InitializeOutputSurfaceIfNeeded(); |
| 69 | 70 |
| 70 PriorityCalculator calculator; | |
| 71 ResourceUpdateQueue queue; | 71 ResourceUpdateQueue queue; |
| 72 OcclusionTracker occlusion_tracker(gfx::Rect(), false); | 72 OcclusionTracker occlusion_tracker(gfx::Rect(), false); |
| 73 test_layer->SavePaintProperties(); |
| 74 test_layer->Update(&queue, &occlusion_tracker); |
| 73 | 75 |
| 74 // No bitmap set should not trigger any uploads. | 76 EXPECT_FALSE(test_layer->DrawsContent()); |
| 75 test_layer->SavePaintProperties(); | |
| 76 test_layer->SetTexturePriorities(calculator); | |
| 77 test_layer->Update(&queue, &occlusion_tracker); | |
| 78 EXPECT_EQ(0u, queue.FullUploadSize()); | |
| 79 EXPECT_EQ(0u, queue.PartialUploadSize()); | |
| 80 | 77 |
| 81 // Setting a bitmap set should trigger a single full upload. | |
| 82 SkBitmap bitmap; | 78 SkBitmap bitmap; |
| 83 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); | 79 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); |
| 84 bitmap.allocPixels(); | 80 bitmap.allocPixels(); |
| 85 test_layer->SetBitmap(bitmap, gfx::Rect(5, 5, 1, 1)); | 81 bitmap.setImmutable(); |
| 82 |
| 83 gfx::Rect aperture(5, 5, 1, 1); |
| 84 bool fill_center = false; |
| 85 test_layer->SetBitmap(bitmap, aperture); |
| 86 test_layer->SetFillCenter(fill_center); |
| 87 test_layer->Update(&queue, &occlusion_tracker); |
| 88 |
| 89 EXPECT_TRUE(test_layer->DrawsContent()); |
| 90 } |
| 91 |
| 92 TEST_F(NinePatchLayerTest, SetUIResourceId) { |
| 93 scoped_refptr<NinePatchLayer> test_layer = NinePatchLayer::Create(); |
| 94 ASSERT_TRUE(test_layer.get()); |
| 95 test_layer->SetIsDrawable(true); |
| 96 test_layer->SetBounds(gfx::Size(100, 100)); |
| 97 |
| 98 layer_tree_host_->SetRootLayer(test_layer); |
| 99 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); |
| 100 EXPECT_EQ(test_layer->layer_tree_host(), layer_tree_host_.get()); |
| 101 |
| 102 layer_tree_host_->InitializeOutputSurfaceIfNeeded(); |
| 103 |
| 104 ResourceUpdateQueue queue; |
| 105 OcclusionTracker occlusion_tracker(gfx::Rect(), false); |
| 86 test_layer->SavePaintProperties(); | 106 test_layer->SavePaintProperties(); |
| 87 test_layer->SetTexturePriorities(calculator); | |
| 88 test_layer->Update(&queue, &occlusion_tracker); | 107 test_layer->Update(&queue, &occlusion_tracker); |
| 89 EXPECT_EQ(1u, queue.FullUploadSize()); | |
| 90 EXPECT_EQ(0u, queue.PartialUploadSize()); | |
| 91 ResourceUpdate params = queue.TakeFirstFullUpload(); | |
| 92 EXPECT_TRUE(params.texture != NULL); | |
| 93 | 108 |
| 94 // Upload the texture. | 109 EXPECT_FALSE(test_layer->DrawsContent()); |
| 95 layer_tree_host_->contents_texture_manager()->SetMaxMemoryLimitBytes( | |
| 96 1024 * 1024); | |
| 97 layer_tree_host_->contents_texture_manager()->PrioritizeTextures(); | |
| 98 | 110 |
| 99 FakeOutputSurfaceClient output_surface_client; | 111 SkBitmap bitmap; |
| 100 scoped_ptr<OutputSurface> output_surface; | 112 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); |
| 101 scoped_ptr<ResourceProvider> resource_provider; | 113 bitmap.allocPixels(); |
| 102 { | 114 bitmap.setImmutable(); |
| 103 DebugScopedSetImplThread impl_thread(Proxy()); | |
| 104 DebugScopedSetMainThreadBlocked main_thread_blocked(Proxy()); | |
| 105 output_surface = FakeOutputSurface::Create3d(); | |
| 106 CHECK(output_surface->BindToClient(&output_surface_client)); | |
| 107 resource_provider = | |
| 108 ResourceProvider::Create(output_surface.get(), 0, false); | |
| 109 params.texture->AcquireBackingTexture(resource_provider.get()); | |
| 110 ASSERT_TRUE(params.texture->have_backing_texture()); | |
| 111 } | |
| 112 | 115 |
| 113 // Nothing changed, so no repeated upload. | 116 scoped_ptr<ScopedUIResource> resource = ScopedUIResource::Create( |
| 114 test_layer->SavePaintProperties(); | 117 layer_tree_host_.get(), UIResourceBitmap(bitmap)); |
| 115 test_layer->SetTexturePriorities(calculator); | 118 gfx::Rect aperture(5, 5, 1, 1); |
| 119 bool fill_center = true; |
| 120 test_layer->SetUIResourceId(resource->id(), aperture); |
| 121 test_layer->SetFillCenter(fill_center); |
| 116 test_layer->Update(&queue, &occlusion_tracker); | 122 test_layer->Update(&queue, &occlusion_tracker); |
| 117 EXPECT_EQ(0u, queue.FullUploadSize()); | |
| 118 EXPECT_EQ(0u, queue.PartialUploadSize()); | |
| 119 { | |
| 120 DebugScopedSetImplThread impl_thread(Proxy()); | |
| 121 DebugScopedSetMainThreadBlocked main_thread_blocked(Proxy()); | |
| 122 layer_tree_host_->contents_texture_manager()->ClearAllMemory( | |
| 123 resource_provider.get()); | |
| 124 } | |
| 125 | 123 |
| 126 // Reupload after eviction | 124 EXPECT_TRUE(test_layer->DrawsContent()); |
| 127 test_layer->SavePaintProperties(); | |
| 128 test_layer->SetTexturePriorities(calculator); | |
| 129 test_layer->Update(&queue, &occlusion_tracker); | |
| 130 EXPECT_EQ(1u, queue.FullUploadSize()); | |
| 131 EXPECT_EQ(0u, queue.PartialUploadSize()); | |
| 132 | |
| 133 // PrioritizedResourceManager clearing | |
| 134 layer_tree_host_->contents_texture_manager()->UnregisterTexture( | |
| 135 params.texture); | |
| 136 EXPECT_EQ(NULL, params.texture->resource_manager()); | |
| 137 test_layer->SavePaintProperties(); | |
| 138 test_layer->SetTexturePriorities(calculator); | |
| 139 ResourceUpdateQueue queue2; | |
| 140 test_layer->Update(&queue2, &occlusion_tracker); | |
| 141 EXPECT_EQ(1u, queue2.FullUploadSize()); | |
| 142 EXPECT_EQ(0u, queue2.PartialUploadSize()); | |
| 143 params = queue2.TakeFirstFullUpload(); | |
| 144 EXPECT_TRUE(params.texture != NULL); | |
| 145 EXPECT_EQ(params.texture->resource_manager(), | |
| 146 layer_tree_host_->contents_texture_manager()); | |
| 147 } | 125 } |
| 148 | 126 |
| 149 } // namespace | 127 } // namespace |
| 150 } // namespace cc | 128 } // namespace cc |
| OLD | NEW |