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

Side by Side Diff: cc/layers/nine_patch_layer_unittest.cc

Issue 22870016: Update the nine patch layer to use UI resources (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: updated dchecks in ui_resource_bitmap Created 7 years, 3 months 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
OLDNEW
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
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, SetSharedBitmap) {
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 = ResourceProvider::Create(output_surface.get(), 0);
108 params.texture->AcquireBackingTexture(resource_provider.get());
109 ASSERT_TRUE(params.texture->have_backing_texture());
110 }
111 115
112 // Nothing changed, so no repeated upload. 116 scoped_ptr<ScopedUIResource> resource = ScopedUIResource::Create(
113 test_layer->SavePaintProperties(); 117 layer_tree_host_.get(), UIResourceBitmap(bitmap));
114 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);
115 test_layer->Update(&queue, &occlusion_tracker); 122 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 }
124 123
125 // Reupload after eviction 124 EXPECT_TRUE(test_layer->DrawsContent());
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());
131
132 // PrioritizedResourceManager clearing
133 layer_tree_host_->contents_texture_manager()->UnregisterTexture(
134 params.texture);
135 EXPECT_EQ(NULL, params.texture->resource_manager());
136 test_layer->SavePaintProperties();
137 test_layer->SetTexturePriorities(calculator);
138 ResourceUpdateQueue queue2;
139 test_layer->Update(&queue2, &occlusion_tracker);
140 EXPECT_EQ(1u, queue2.FullUploadSize());
141 EXPECT_EQ(0u, queue2.PartialUploadSize());
142 params = queue2.TakeFirstFullUpload();
143 EXPECT_TRUE(params.texture != NULL);
144 EXPECT_EQ(params.texture->resource_manager(),
145 layer_tree_host_->contents_texture_manager());
146 } 125 }
147 126
148 } // namespace 127 } // namespace
149 } // namespace cc 128 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698