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/returned_resource.h" | 10 #include "cc/resources/returned_resource.h" |
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 SetFrameProvider(frame.Pass()); | 152 SetFrameProvider(frame.Pass()); |
153 | 153 |
154 scoped_refptr<DelegatedRendererLayer> observer1 = | 154 scoped_refptr<DelegatedRendererLayer> observer1 = |
155 DelegatedRendererLayer::Create(frame_provider_); | 155 DelegatedRendererLayer::Create(frame_provider_); |
156 scoped_refptr<DelegatedRendererLayer> observer2 = | 156 scoped_refptr<DelegatedRendererLayer> observer2 = |
157 DelegatedRendererLayer::Create(frame_provider_); | 157 DelegatedRendererLayer::Create(frame_provider_); |
158 | 158 |
159 gfx::RectF damage; | 159 gfx::RectF damage; |
160 | 160 |
161 // Both observers get a full frame of damage on the first request. | 161 // Both observers get a full frame of damage on the first request. |
162 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 162 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
163 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 163 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
164 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 164 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
165 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 165 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
166 | 166 |
167 // And both get no damage on the 2nd request. This adds a second ref to the | 167 // And both get no damage on the 2nd request. This adds a second ref to the |
168 // resources. | 168 // resources. |
169 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 169 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
170 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 170 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); |
171 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 171 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
172 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 172 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); |
173 | 173 |
174 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 174 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
175 | 175 |
176 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 176 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
177 AddTextureQuad(frame.get(), 555); | 177 AddTextureQuad(frame.get(), 555); |
178 AddTransferableResource(frame.get(), 555); | 178 AddTransferableResource(frame.get(), 555); |
179 frame_provider_->SetFrameData(frame.Pass()); | 179 frame_provider_->SetFrameData(frame.Pass()); |
180 | 180 |
181 // The resources from the first frame are still reffed by the observers. | 181 // The resources from the first frame are still reffed by the observers. |
(...skipping 28 matching lines...) Expand all Loading... |
210 SetFrameProvider(frame.Pass()); | 210 SetFrameProvider(frame.Pass()); |
211 | 211 |
212 scoped_refptr<DelegatedRendererLayer> observer1 = | 212 scoped_refptr<DelegatedRendererLayer> observer1 = |
213 DelegatedRendererLayer::Create(frame_provider_); | 213 DelegatedRendererLayer::Create(frame_provider_); |
214 scoped_refptr<DelegatedRendererLayer> observer2 = | 214 scoped_refptr<DelegatedRendererLayer> observer2 = |
215 DelegatedRendererLayer::Create(frame_provider_); | 215 DelegatedRendererLayer::Create(frame_provider_); |
216 | 216 |
217 gfx::RectF damage; | 217 gfx::RectF damage; |
218 | 218 |
219 // Take a ref on each observer. | 219 // Take a ref on each observer. |
220 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 220 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
221 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 221 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
222 | 222 |
223 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 223 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
224 | 224 |
225 // Release both refs. But there's still a ref held in the frame | 225 // Release both refs. But there's still a ref held in the frame |
226 // provider itself. | 226 // provider itself. |
227 frame_provider_->UnrefResourcesOnMainThread(returned); | 227 frame_provider_->UnrefResourcesOnMainThread(returned); |
228 frame_provider_->UnrefResourcesOnMainThread(returned); | 228 frame_provider_->UnrefResourcesOnMainThread(returned); |
229 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 229 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
230 | 230 |
231 // Setting a new frame will release it. | 231 // Setting a new frame will release it. |
(...skipping 20 matching lines...) Expand all Loading... |
252 SetFrameProvider(frame.Pass()); | 252 SetFrameProvider(frame.Pass()); |
253 | 253 |
254 scoped_refptr<DelegatedRendererLayer> observer1 = | 254 scoped_refptr<DelegatedRendererLayer> observer1 = |
255 DelegatedRendererLayer::Create(frame_provider_); | 255 DelegatedRendererLayer::Create(frame_provider_); |
256 scoped_refptr<DelegatedRendererLayer> observer2 = | 256 scoped_refptr<DelegatedRendererLayer> observer2 = |
257 DelegatedRendererLayer::Create(frame_provider_); | 257 DelegatedRendererLayer::Create(frame_provider_); |
258 | 258 |
259 gfx::RectF damage; | 259 gfx::RectF damage; |
260 | 260 |
261 // Take a ref on each observer. | 261 // Take a ref on each observer. |
262 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 262 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
263 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 263 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
264 | 264 |
265 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 265 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
266 | 266 |
267 // Release both refs. But there's still a ref held in the frame | 267 // Release both refs. But there's still a ref held in the frame |
268 // provider itself. | 268 // provider itself. |
269 frame_provider_->UnrefResourcesOnMainThread(returned); | 269 frame_provider_->UnrefResourcesOnMainThread(returned); |
270 frame_provider_->UnrefResourcesOnMainThread(returned); | 270 frame_provider_->UnrefResourcesOnMainThread(returned); |
271 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 271 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
272 | 272 |
273 // Releasing all references to the frame provider will release | 273 // Releasing all references to the frame provider will release |
(...skipping 22 matching lines...) Expand all Loading... |
296 SetFrameProvider(frame.Pass()); | 296 SetFrameProvider(frame.Pass()); |
297 | 297 |
298 scoped_refptr<DelegatedRendererLayer> observer1 = | 298 scoped_refptr<DelegatedRendererLayer> observer1 = |
299 DelegatedRendererLayer::Create(frame_provider_); | 299 DelegatedRendererLayer::Create(frame_provider_); |
300 scoped_refptr<DelegatedRendererLayer> observer2 = | 300 scoped_refptr<DelegatedRendererLayer> observer2 = |
301 DelegatedRendererLayer::Create(frame_provider_); | 301 DelegatedRendererLayer::Create(frame_provider_); |
302 | 302 |
303 gfx::RectF damage; | 303 gfx::RectF damage; |
304 | 304 |
305 // Both observers get a full frame of damage on the first request. | 305 // Both observers get a full frame of damage on the first request. |
306 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 306 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
307 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 307 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
308 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 308 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
309 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 309 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
310 | 310 |
311 // And both get no damage on the 2nd request. | 311 // And both get no damage on the 2nd request. |
312 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 312 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
313 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 313 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); |
314 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 314 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
315 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 315 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); |
316 | 316 |
317 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 317 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
318 AddTextureQuad(frame.get(), 555); | 318 AddTextureQuad(frame.get(), 555); |
319 AddTransferableResource(frame.get(), 555); | 319 AddTransferableResource(frame.get(), 555); |
320 frame_provider_->SetFrameData(frame.Pass()); | 320 frame_provider_->SetFrameData(frame.Pass()); |
321 | 321 |
322 // Both observers get the damage for the new frame. | 322 // Both observers get the damage for the new frame. |
323 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 323 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
324 EXPECT_EQ(gfx::RectF(2.f, 2.f).ToString(), damage.ToString()); | 324 EXPECT_EQ(gfx::RectF(2.f, 2.f).ToString(), damage.ToString()); |
325 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 325 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
326 EXPECT_EQ(gfx::RectF(2.f, 2.f).ToString(), damage.ToString()); | 326 EXPECT_EQ(gfx::RectF(2.f, 2.f).ToString(), damage.ToString()); |
327 | 327 |
328 // And both get no damage on the 2nd request. | 328 // And both get no damage on the 2nd request. |
329 frame_provider_->GetFrameDataAndRefResources(observer1, &damage); | 329 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
330 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 330 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); |
331 frame_provider_->GetFrameDataAndRefResources(observer2, &damage); | 331 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
332 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 332 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); |
333 } | 333 } |
334 | 334 |
335 TEST_F(DelegatedFrameProviderTest, LostNothing) { | 335 TEST_F(DelegatedFrameProviderTest, LostNothing) { |
336 scoped_ptr<DelegatedFrameData> frame = | 336 scoped_ptr<DelegatedFrameData> frame = |
337 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); | 337 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); |
338 | 338 |
339 TransferableResourceArray reffed = frame->resource_list; | 339 TransferableResourceArray reffed = frame->resource_list; |
340 | 340 |
341 SetFrameProvider(frame.Pass()); | 341 SetFrameProvider(frame.Pass()); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 | 388 |
389 frame_provider_ = NULL; | 389 frame_provider_ = NULL; |
390 | 390 |
391 // Nothing is returned twice. | 391 // Nothing is returned twice. |
392 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 392 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
393 EXPECT_EQ(0u, resources_.size()); | 393 EXPECT_EQ(0u, resources_.size()); |
394 } | 394 } |
395 | 395 |
396 } // namespace | 396 } // namespace |
397 } // namespace cc | 397 } // namespace cc |
OLD | NEW |