OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "cc/nine_patch_layer.h" | |
6 | |
7 #include "cc/debug/overdraw_metrics.h" | |
8 #include "cc/resources/prioritized_resource_manager.h" | |
9 #include "cc/resources/resource_provider.h" | |
10 #include "cc/resources/resource_update_queue.h" | |
11 #include "cc/scheduler/texture_uploader.h" | |
12 #include "cc/test/fake_layer_tree_host_client.h" | |
13 #include "cc/test/fake_output_surface.h" | |
14 #include "cc/test/geometry_test_utils.h" | |
15 #include "cc/test/layer_tree_test_common.h" | |
16 #include "cc/trees/layer_tree_host.h" | |
17 #include "cc/trees/occlusion_tracker.h" | |
18 #include "cc/trees/single_thread_proxy.h" | |
19 #include "testing/gmock/include/gmock/gmock.h" | |
20 #include "testing/gtest/include/gtest/gtest.h" | |
21 #include "third_party/skia/include/core/SkBitmap.h" | |
22 | |
23 using ::testing::Mock; | |
24 using ::testing::_; | |
25 using ::testing::AtLeast; | |
26 using ::testing::AnyNumber; | |
27 | |
28 namespace cc { | |
29 namespace { | |
30 | |
31 class MockLayerTreeHost : public LayerTreeHost { | |
32 public: | |
33 MockLayerTreeHost() | |
34 : LayerTreeHost(&m_fakeClient, LayerTreeSettings()) | |
35 { | |
36 Initialize(scoped_ptr<Thread>(NULL)); | |
37 } | |
38 | |
39 private: | |
40 FakeLayerImplTreeHostClient m_fakeClient; | |
41 }; | |
42 | |
43 | |
44 class NinePatchLayerTest : public testing::Test { | |
45 public: | |
46 NinePatchLayerTest() | |
47 { | |
48 } | |
49 | |
50 Proxy* proxy() const { return layer_tree_host_->proxy(); } | |
51 | |
52 protected: | |
53 virtual void SetUp() | |
54 { | |
55 layer_tree_host_.reset(new MockLayerTreeHost); | |
56 } | |
57 | |
58 virtual void TearDown() | |
59 { | |
60 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | |
61 } | |
62 | |
63 scoped_ptr<MockLayerTreeHost> layer_tree_host_; | |
64 }; | |
65 | |
66 TEST_F(NinePatchLayerTest, triggerFullUploadOnceWhenChangingBitmap) | |
67 { | |
68 scoped_refptr<NinePatchLayer> testLayer = NinePatchLayer::Create(); | |
69 ASSERT_TRUE(testLayer); | |
70 testLayer->SetIsDrawable(true); | |
71 testLayer->SetBounds(gfx::Size(100, 100)); | |
72 | |
73 layer_tree_host_->SetRootLayer(testLayer); | |
74 Mock::VerifyAndClearExpectations(layer_tree_host_.get()); | |
75 EXPECT_EQ(testLayer->layer_tree_host(), layer_tree_host_.get()); | |
76 | |
77 layer_tree_host_->InitializeRendererIfNeeded(); | |
78 | |
79 PriorityCalculator calculator; | |
80 ResourceUpdateQueue queue; | |
81 OcclusionTracker occlusionTracker(gfx::Rect(), false); | |
82 | |
83 // No bitmap set should not trigger any uploads. | |
84 testLayer->SetTexturePriorities(calculator); | |
85 testLayer->Update(&queue, &occlusionTracker, NULL); | |
86 EXPECT_EQ(queue.fullUploadSize(), 0); | |
87 EXPECT_EQ(queue.partialUploadSize(), 0); | |
88 | |
89 // Setting a bitmap set should trigger a single full upload. | |
90 SkBitmap bitmap; | |
91 bitmap.setConfig(SkBitmap::kARGB_8888_Config, 10, 10); | |
92 bitmap.allocPixels(); | |
93 testLayer->SetBitmap(bitmap, gfx::Rect(5, 5, 1, 1)); | |
94 testLayer->SetTexturePriorities(calculator); | |
95 testLayer->Update(&queue, &occlusionTracker, NULL); | |
96 EXPECT_EQ(queue.fullUploadSize(), 1); | |
97 EXPECT_EQ(queue.partialUploadSize(), 0); | |
98 ResourceUpdate params = queue.takeFirstFullUpload(); | |
99 EXPECT_TRUE(params.texture != NULL); | |
100 | |
101 // Upload the texture. | |
102 layer_tree_host_->contents_texture_manager()->setMaxMemoryLimitBytes(1024 *
1024); | |
103 layer_tree_host_->contents_texture_manager()->prioritizeTextures(); | |
104 | |
105 scoped_ptr<OutputSurface> outputSurface; | |
106 scoped_ptr<ResourceProvider> resourceProvider; | |
107 { | |
108 DebugScopedSetImplThread implThread(proxy()); | |
109 DebugScopedSetMainThreadBlocked mainThreadBlocked(proxy()); | |
110 outputSurface = createFakeOutputSurface(); | |
111 resourceProvider = ResourceProvider::Create(outputSurface.get()); | |
112 params.texture->acquireBackingTexture(resourceProvider.get()); | |
113 ASSERT_TRUE(params.texture->haveBackingTexture()); | |
114 } | |
115 | |
116 // Nothing changed, so no repeated upload. | |
117 testLayer->SetTexturePriorities(calculator); | |
118 testLayer->Update(&queue, &occlusionTracker, NULL); | |
119 EXPECT_EQ(queue.fullUploadSize(), 0); | |
120 EXPECT_EQ(queue.partialUploadSize(), 0); | |
121 | |
122 { | |
123 DebugScopedSetImplThread implThread(proxy()); | |
124 DebugScopedSetMainThreadBlocked mainThreadBlocked(proxy()); | |
125 layer_tree_host_->contents_texture_manager()->clearAllMemory(resourcePro
vider.get()); | |
126 } | |
127 | |
128 // Reupload after eviction | |
129 testLayer->SetTexturePriorities(calculator); | |
130 testLayer->Update(&queue, &occlusionTracker, NULL); | |
131 EXPECT_EQ(queue.fullUploadSize(), 1); | |
132 EXPECT_EQ(queue.partialUploadSize(), 0); | |
133 | |
134 // PrioritizedResourceManager clearing | |
135 layer_tree_host_->contents_texture_manager()->unregisterTexture(params.textu
re); | |
136 EXPECT_EQ(NULL, params.texture->resourceManager()); | |
137 testLayer->SetTexturePriorities(calculator); | |
138 ResourceUpdateQueue queue2; | |
139 testLayer->Update(&queue2, &occlusionTracker, NULL); | |
140 EXPECT_EQ(queue2.fullUploadSize(), 1); | |
141 EXPECT_EQ(queue2.partialUploadSize(), 0); | |
142 params = queue2.takeFirstFullUpload(); | |
143 EXPECT_TRUE(params.texture != NULL); | |
144 EXPECT_EQ(params.texture->resourceManager(), layer_tree_host_->contents_text
ure_manager()); | |
145 } | |
146 | |
147 } // namespace | |
148 } // namespace cc | |
OLD | NEW |