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