OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/delegated_frame_provider.h" | 5 #include "cc/layers/delegated_frame_provider.h" |
6 #include "cc/layers/delegated_frame_resource_collection.h" | 6 #include "cc/layers/delegated_frame_resource_collection.h" |
7 #include "cc/layers/delegated_renderer_layer.h" | 7 #include "cc/layers/delegated_renderer_layer.h" |
8 #include "cc/output/delegated_frame_data.h" | 8 #include "cc/output/delegated_frame_data.h" |
9 #include "cc/quads/texture_draw_quad.h" | 9 #include "cc/quads/texture_draw_quad.h" |
10 #include "cc/resources/resource_provider.h" | 10 #include "cc/resources/resource_provider.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 scoped_ptr<DelegatedFrameData> CreateFrameData( | 25 scoped_ptr<DelegatedFrameData> CreateFrameData( |
26 const gfx::Rect& root_output_rect, | 26 const gfx::Rect& root_output_rect, |
27 const gfx::Rect& root_damage_rect) { | 27 const gfx::Rect& root_damage_rect) { |
28 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); | 28 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); |
29 | 29 |
30 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); | 30 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); |
31 root_pass->SetNew(RenderPassId(1, 1), | 31 root_pass->SetNew(RenderPassId(1, 1), |
32 root_output_rect, | 32 root_output_rect, |
33 root_damage_rect, | 33 root_damage_rect, |
34 gfx::Transform()); | 34 gfx::Transform()); |
35 frame->render_pass_list.push_back(root_pass.Pass()); | 35 frame->render_pass_list.push_back(std::move(root_pass)); |
36 return frame.Pass(); | 36 return frame; |
37 } | 37 } |
38 | 38 |
39 void AddTransferableResource(DelegatedFrameData* frame, | 39 void AddTransferableResource(DelegatedFrameData* frame, |
40 ResourceId resource_id) { | 40 ResourceId resource_id) { |
41 TransferableResource resource; | 41 TransferableResource resource; |
42 resource.id = resource_id; | 42 resource.id = resource_id; |
43 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; | 43 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; |
44 frame->resource_list.push_back(resource); | 44 frame->resource_list.push_back(resource); |
45 } | 45 } |
46 | 46 |
(...skipping 30 matching lines...) Expand all Loading... |
77 } | 77 } |
78 | 78 |
79 bool ReturnAndResetResourcesAvailable() { | 79 bool ReturnAndResetResourcesAvailable() { |
80 bool r = resources_available_; | 80 bool r = resources_available_; |
81 resources_available_ = false; | 81 resources_available_ = false; |
82 return r; | 82 return r; |
83 } | 83 } |
84 | 84 |
85 void SetFrameProvider(scoped_ptr<DelegatedFrameData> frame_data) { | 85 void SetFrameProvider(scoped_ptr<DelegatedFrameData> frame_data) { |
86 frame_provider_ = | 86 frame_provider_ = |
87 new DelegatedFrameProvider(resource_collection_, frame_data.Pass()); | 87 new DelegatedFrameProvider(resource_collection_, std::move(frame_data)); |
88 } | 88 } |
89 | 89 |
90 scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; | 90 scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; |
91 scoped_refptr<DelegatedFrameProvider> frame_provider_; | 91 scoped_refptr<DelegatedFrameProvider> frame_provider_; |
92 bool resources_available_; | 92 bool resources_available_; |
93 ReturnedResourceArray resources_; | 93 ReturnedResourceArray resources_; |
94 LayerSettings layer_settings_; | 94 LayerSettings layer_settings_; |
95 }; | 95 }; |
96 | 96 |
97 TEST_F(DelegatedFrameProviderTest, SameResources) { | 97 TEST_F(DelegatedFrameProviderTest, SameResources) { |
98 scoped_ptr<DelegatedFrameData> frame = | 98 scoped_ptr<DelegatedFrameData> frame = |
99 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 99 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
100 AddTextureQuad(frame.get(), 444); | 100 AddTextureQuad(frame.get(), 444); |
101 AddTransferableResource(frame.get(), 444); | 101 AddTransferableResource(frame.get(), 444); |
102 SetFrameProvider(frame.Pass()); | 102 SetFrameProvider(std::move(frame)); |
103 | 103 |
104 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 104 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
105 AddTextureQuad(frame.get(), 444); | 105 AddTextureQuad(frame.get(), 444); |
106 AddTransferableResource(frame.get(), 444); | 106 AddTransferableResource(frame.get(), 444); |
107 SetFrameProvider(frame.Pass()); | 107 SetFrameProvider(std::move(frame)); |
108 | 108 |
109 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 109 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
110 EXPECT_EQ(0u, resources_.size()); | 110 EXPECT_EQ(0u, resources_.size()); |
111 | 111 |
112 frame_provider_ = nullptr; | 112 frame_provider_ = nullptr; |
113 | 113 |
114 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 114 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
115 EXPECT_EQ(1u, resources_.size()); | 115 EXPECT_EQ(1u, resources_.size()); |
116 EXPECT_EQ(444u, resources_[0].id); | 116 EXPECT_EQ(444u, resources_[0].id); |
117 } | 117 } |
118 | 118 |
119 TEST_F(DelegatedFrameProviderTest, ReplaceResources) { | 119 TEST_F(DelegatedFrameProviderTest, ReplaceResources) { |
120 scoped_ptr<DelegatedFrameData> frame = | 120 scoped_ptr<DelegatedFrameData> frame = |
121 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 121 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
122 AddTextureQuad(frame.get(), 444); | 122 AddTextureQuad(frame.get(), 444); |
123 AddTransferableResource(frame.get(), 444); | 123 AddTransferableResource(frame.get(), 444); |
124 SetFrameProvider(frame.Pass()); | 124 SetFrameProvider(std::move(frame)); |
125 | 125 |
126 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 126 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
127 | 127 |
128 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 128 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
129 AddTextureQuad(frame.get(), 555); | 129 AddTextureQuad(frame.get(), 555); |
130 AddTransferableResource(frame.get(), 555); | 130 AddTransferableResource(frame.get(), 555); |
131 SetFrameProvider(frame.Pass()); | 131 SetFrameProvider(std::move(frame)); |
132 | 132 |
133 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 133 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
134 EXPECT_EQ(1u, resources_.size()); | 134 EXPECT_EQ(1u, resources_.size()); |
135 EXPECT_EQ(444u, resources_[0].id); | 135 EXPECT_EQ(444u, resources_[0].id); |
136 resources_.clear(); | 136 resources_.clear(); |
137 | 137 |
138 frame_provider_ = nullptr; | 138 frame_provider_ = nullptr; |
139 | 139 |
140 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 140 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
141 EXPECT_EQ(1u, resources_.size()); | 141 EXPECT_EQ(1u, resources_.size()); |
142 EXPECT_EQ(555u, resources_[0].id); | 142 EXPECT_EQ(555u, resources_[0].id); |
143 } | 143 } |
144 | 144 |
145 TEST_F(DelegatedFrameProviderTest, RefResources) { | 145 TEST_F(DelegatedFrameProviderTest, RefResources) { |
146 scoped_ptr<DelegatedFrameData> frame = | 146 scoped_ptr<DelegatedFrameData> frame = |
147 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 147 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
148 AddTextureQuad(frame.get(), 444); | 148 AddTextureQuad(frame.get(), 444); |
149 AddTransferableResource(frame.get(), 444); | 149 AddTransferableResource(frame.get(), 444); |
150 | 150 |
151 TransferableResourceArray reffed = frame->resource_list; | 151 TransferableResourceArray reffed = frame->resource_list; |
152 ReturnedResourceArray returned; | 152 ReturnedResourceArray returned; |
153 TransferableResource::ReturnResources(reffed, &returned); | 153 TransferableResource::ReturnResources(reffed, &returned); |
154 | 154 |
155 SetFrameProvider(frame.Pass()); | 155 SetFrameProvider(std::move(frame)); |
156 | 156 |
157 scoped_refptr<DelegatedRendererLayer> observer1 = | 157 scoped_refptr<DelegatedRendererLayer> observer1 = |
158 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 158 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
159 scoped_refptr<DelegatedRendererLayer> observer2 = | 159 scoped_refptr<DelegatedRendererLayer> observer2 = |
160 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 160 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
161 | 161 |
162 gfx::Rect damage; | 162 gfx::Rect damage; |
163 | 163 |
164 // Both observers get a full frame of damage on the first request. | 164 // Both observers get a full frame of damage on the first request. |
165 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 165 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
166 EXPECT_EQ(gfx::Rect(5, 5), damage); | 166 EXPECT_EQ(gfx::Rect(5, 5), damage); |
167 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 167 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
168 EXPECT_EQ(gfx::Rect(5, 5), damage); | 168 EXPECT_EQ(gfx::Rect(5, 5), damage); |
169 | 169 |
170 // And both get no damage on the 2nd request. This adds a second ref to the | 170 // And both get no damage on the 2nd request. This adds a second ref to the |
171 // resources. | 171 // resources. |
172 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 172 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
173 EXPECT_EQ(gfx::Rect(), damage); | 173 EXPECT_EQ(gfx::Rect(), damage); |
174 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 174 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
175 EXPECT_EQ(gfx::Rect(), damage); | 175 EXPECT_EQ(gfx::Rect(), damage); |
176 | 176 |
177 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 177 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
178 | 178 |
179 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 179 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
180 AddTextureQuad(frame.get(), 555); | 180 AddTextureQuad(frame.get(), 555); |
181 AddTransferableResource(frame.get(), 555); | 181 AddTransferableResource(frame.get(), 555); |
182 frame_provider_->SetFrameData(frame.Pass()); | 182 frame_provider_->SetFrameData(std::move(frame)); |
183 | 183 |
184 // The resources from the first frame are still reffed by the observers. | 184 // The resources from the first frame are still reffed by the observers. |
185 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 185 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
186 | 186 |
187 // There are 4 refs taken. | 187 // There are 4 refs taken. |
188 frame_provider_->UnrefResourcesOnMainThread(returned); | 188 frame_provider_->UnrefResourcesOnMainThread(returned); |
189 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 189 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
190 frame_provider_->UnrefResourcesOnMainThread(returned); | 190 frame_provider_->UnrefResourcesOnMainThread(returned); |
191 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 191 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
192 frame_provider_->UnrefResourcesOnMainThread(returned); | 192 frame_provider_->UnrefResourcesOnMainThread(returned); |
(...skipping 10 matching lines...) Expand all Loading... |
203 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProvider) { | 203 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProvider) { |
204 scoped_ptr<DelegatedFrameData> frame = | 204 scoped_ptr<DelegatedFrameData> frame = |
205 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 205 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
206 AddTextureQuad(frame.get(), 444); | 206 AddTextureQuad(frame.get(), 444); |
207 AddTransferableResource(frame.get(), 444); | 207 AddTransferableResource(frame.get(), 444); |
208 | 208 |
209 TransferableResourceArray reffed = frame->resource_list; | 209 TransferableResourceArray reffed = frame->resource_list; |
210 ReturnedResourceArray returned; | 210 ReturnedResourceArray returned; |
211 TransferableResource::ReturnResources(reffed, &returned); | 211 TransferableResource::ReturnResources(reffed, &returned); |
212 | 212 |
213 SetFrameProvider(frame.Pass()); | 213 SetFrameProvider(std::move(frame)); |
214 | 214 |
215 scoped_refptr<DelegatedRendererLayer> observer1 = | 215 scoped_refptr<DelegatedRendererLayer> observer1 = |
216 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 216 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
217 scoped_refptr<DelegatedRendererLayer> observer2 = | 217 scoped_refptr<DelegatedRendererLayer> observer2 = |
218 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 218 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
219 | 219 |
220 gfx::Rect damage; | 220 gfx::Rect damage; |
221 | 221 |
222 // Take a ref on each observer. | 222 // Take a ref on each observer. |
223 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 223 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
224 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 224 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
225 | 225 |
226 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 226 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
227 | 227 |
228 // Release both refs. But there's still a ref held in the frame | 228 // Release both refs. But there's still a ref held in the frame |
229 // provider itself. | 229 // provider itself. |
230 frame_provider_->UnrefResourcesOnMainThread(returned); | 230 frame_provider_->UnrefResourcesOnMainThread(returned); |
231 frame_provider_->UnrefResourcesOnMainThread(returned); | 231 frame_provider_->UnrefResourcesOnMainThread(returned); |
232 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 232 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
233 | 233 |
234 // Setting a new frame will release it. | 234 // Setting a new frame will release it. |
235 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 235 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
236 AddTextureQuad(frame.get(), 555); | 236 AddTextureQuad(frame.get(), 555); |
237 AddTransferableResource(frame.get(), 555); | 237 AddTransferableResource(frame.get(), 555); |
238 frame_provider_->SetFrameData(frame.Pass()); | 238 frame_provider_->SetFrameData(std::move(frame)); |
239 | 239 |
240 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 240 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
241 EXPECT_EQ(1u, resources_.size()); | 241 EXPECT_EQ(1u, resources_.size()); |
242 EXPECT_EQ(444u, resources_[0].id); | 242 EXPECT_EQ(444u, resources_[0].id); |
243 } | 243 } |
244 | 244 |
245 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProviderUntilDestroy) { | 245 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProviderUntilDestroy) { |
246 scoped_ptr<DelegatedFrameData> frame = | 246 scoped_ptr<DelegatedFrameData> frame = |
247 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 247 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
248 AddTextureQuad(frame.get(), 444); | 248 AddTextureQuad(frame.get(), 444); |
249 AddTransferableResource(frame.get(), 444); | 249 AddTransferableResource(frame.get(), 444); |
250 | 250 |
251 TransferableResourceArray reffed = frame->resource_list; | 251 TransferableResourceArray reffed = frame->resource_list; |
252 ReturnedResourceArray returned; | 252 ReturnedResourceArray returned; |
253 TransferableResource::ReturnResources(reffed, &returned); | 253 TransferableResource::ReturnResources(reffed, &returned); |
254 | 254 |
255 SetFrameProvider(frame.Pass()); | 255 SetFrameProvider(std::move(frame)); |
256 | 256 |
257 scoped_refptr<DelegatedRendererLayer> observer1 = | 257 scoped_refptr<DelegatedRendererLayer> observer1 = |
258 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 258 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
259 scoped_refptr<DelegatedRendererLayer> observer2 = | 259 scoped_refptr<DelegatedRendererLayer> observer2 = |
260 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 260 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
261 | 261 |
262 gfx::Rect damage; | 262 gfx::Rect damage; |
263 | 263 |
264 // Take a ref on each observer. | 264 // Take a ref on each observer. |
265 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 265 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
(...skipping 23 matching lines...) Expand all Loading... |
289 TEST_F(DelegatedFrameProviderTest, Damage) { | 289 TEST_F(DelegatedFrameProviderTest, Damage) { |
290 scoped_ptr<DelegatedFrameData> frame = | 290 scoped_ptr<DelegatedFrameData> frame = |
291 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 291 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
292 AddTextureQuad(frame.get(), 444); | 292 AddTextureQuad(frame.get(), 444); |
293 AddTransferableResource(frame.get(), 444); | 293 AddTransferableResource(frame.get(), 444); |
294 | 294 |
295 TransferableResourceArray reffed = frame->resource_list; | 295 TransferableResourceArray reffed = frame->resource_list; |
296 ReturnedResourceArray returned; | 296 ReturnedResourceArray returned; |
297 TransferableResource::ReturnResources(reffed, &returned); | 297 TransferableResource::ReturnResources(reffed, &returned); |
298 | 298 |
299 SetFrameProvider(frame.Pass()); | 299 SetFrameProvider(std::move(frame)); |
300 | 300 |
301 scoped_refptr<DelegatedRendererLayer> observer1 = | 301 scoped_refptr<DelegatedRendererLayer> observer1 = |
302 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 302 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
303 scoped_refptr<DelegatedRendererLayer> observer2 = | 303 scoped_refptr<DelegatedRendererLayer> observer2 = |
304 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); | 304 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
305 | 305 |
306 gfx::Rect damage; | 306 gfx::Rect damage; |
307 | 307 |
308 // Both observers get a full frame of damage on the first request. | 308 // Both observers get a full frame of damage on the first request. |
309 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 309 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
310 EXPECT_EQ(gfx::Rect(5, 5), damage); | 310 EXPECT_EQ(gfx::Rect(5, 5), damage); |
311 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 311 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
312 EXPECT_EQ(gfx::Rect(5, 5), damage); | 312 EXPECT_EQ(gfx::Rect(5, 5), damage); |
313 | 313 |
314 // And both get no damage on the 2nd request. | 314 // And both get no damage on the 2nd request. |
315 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 315 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
316 EXPECT_EQ(gfx::Rect(), damage); | 316 EXPECT_EQ(gfx::Rect(), damage); |
317 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 317 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
318 EXPECT_EQ(gfx::Rect(), damage); | 318 EXPECT_EQ(gfx::Rect(), damage); |
319 | 319 |
320 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 320 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
321 AddTextureQuad(frame.get(), 555); | 321 AddTextureQuad(frame.get(), 555); |
322 AddTransferableResource(frame.get(), 555); | 322 AddTransferableResource(frame.get(), 555); |
323 frame_provider_->SetFrameData(frame.Pass()); | 323 frame_provider_->SetFrameData(std::move(frame)); |
324 | 324 |
325 // Both observers get the damage for the new frame. | 325 // Both observers get the damage for the new frame. |
326 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 326 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
327 EXPECT_EQ(gfx::Rect(2, 2), damage); | 327 EXPECT_EQ(gfx::Rect(2, 2), damage); |
328 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 328 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
329 EXPECT_EQ(gfx::Rect(2, 2), damage); | 329 EXPECT_EQ(gfx::Rect(2, 2), damage); |
330 | 330 |
331 // And both get no damage on the 2nd request. | 331 // And both get no damage on the 2nd request. |
332 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 332 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
333 EXPECT_EQ(gfx::Rect(), damage); | 333 EXPECT_EQ(gfx::Rect(), damage); |
334 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 334 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
335 EXPECT_EQ(gfx::Rect(), damage); | 335 EXPECT_EQ(gfx::Rect(), damage); |
336 } | 336 } |
337 | 337 |
338 TEST_F(DelegatedFrameProviderTest, LostNothing) { | 338 TEST_F(DelegatedFrameProviderTest, LostNothing) { |
339 scoped_ptr<DelegatedFrameData> frame = | 339 scoped_ptr<DelegatedFrameData> frame = |
340 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); | 340 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); |
341 | 341 |
342 TransferableResourceArray reffed = frame->resource_list; | 342 TransferableResourceArray reffed = frame->resource_list; |
343 | 343 |
344 SetFrameProvider(frame.Pass()); | 344 SetFrameProvider(std::move(frame)); |
345 | 345 |
346 // There is nothing to lose. | 346 // There is nothing to lose. |
347 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 347 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
348 EXPECT_FALSE(resource_collection_->LoseAllResources()); | 348 EXPECT_FALSE(resource_collection_->LoseAllResources()); |
349 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 349 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
350 EXPECT_EQ(0u, resources_.size()); | 350 EXPECT_EQ(0u, resources_.size()); |
351 } | 351 } |
352 | 352 |
353 TEST_F(DelegatedFrameProviderTest, LostSomething) { | 353 TEST_F(DelegatedFrameProviderTest, LostSomething) { |
354 scoped_ptr<DelegatedFrameData> frame = | 354 scoped_ptr<DelegatedFrameData> frame = |
355 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); | 355 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); |
356 AddTextureQuad(frame.get(), 444); | 356 AddTextureQuad(frame.get(), 444); |
357 AddTransferableResource(frame.get(), 444); | 357 AddTransferableResource(frame.get(), 444); |
358 | 358 |
359 SetFrameProvider(frame.Pass()); | 359 SetFrameProvider(std::move(frame)); |
360 | 360 |
361 // Add a second reference on the resource. | 361 // Add a second reference on the resource. |
362 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); | 362 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); |
363 AddTextureQuad(frame.get(), 444); | 363 AddTextureQuad(frame.get(), 444); |
364 AddTransferableResource(frame.get(), 444); | 364 AddTransferableResource(frame.get(), 444); |
365 | 365 |
366 SetFrameProvider(frame.Pass()); | 366 SetFrameProvider(std::move(frame)); |
367 | 367 |
368 // There is something to lose. | 368 // There is something to lose. |
369 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 369 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
370 EXPECT_TRUE(resource_collection_->LoseAllResources()); | 370 EXPECT_TRUE(resource_collection_->LoseAllResources()); |
371 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 371 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
372 | 372 |
373 EXPECT_EQ(1u, resources_.size()); | 373 EXPECT_EQ(1u, resources_.size()); |
374 EXPECT_EQ(444u, resources_[0].id); | 374 EXPECT_EQ(444u, resources_[0].id); |
375 EXPECT_EQ(2, resources_[0].count); | 375 EXPECT_EQ(2, resources_[0].count); |
376 } | 376 } |
377 | 377 |
378 TEST_F(DelegatedFrameProviderTest, NothingReturnedAfterLoss) { | 378 TEST_F(DelegatedFrameProviderTest, NothingReturnedAfterLoss) { |
379 scoped_ptr<DelegatedFrameData> frame = | 379 scoped_ptr<DelegatedFrameData> frame = |
380 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 380 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
381 AddTextureQuad(frame.get(), 444); | 381 AddTextureQuad(frame.get(), 444); |
382 AddTransferableResource(frame.get(), 444); | 382 AddTransferableResource(frame.get(), 444); |
383 SetFrameProvider(frame.Pass()); | 383 SetFrameProvider(std::move(frame)); |
384 | 384 |
385 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 385 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
386 | 386 |
387 // Lose all the resources. | 387 // Lose all the resources. |
388 EXPECT_TRUE(resource_collection_->LoseAllResources()); | 388 EXPECT_TRUE(resource_collection_->LoseAllResources()); |
389 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 389 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
390 resources_.clear(); | 390 resources_.clear(); |
391 | 391 |
392 frame_provider_ = nullptr; | 392 frame_provider_ = nullptr; |
393 | 393 |
394 // Nothing is returned twice. | 394 // Nothing is returned twice. |
395 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 395 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
396 EXPECT_EQ(0u, resources_.size()); | 396 EXPECT_EQ(0u, resources_.size()); |
397 } | 397 } |
398 | 398 |
399 } // namespace | 399 } // namespace |
400 } // namespace cc | 400 } // namespace cc |
OLD | NEW |