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 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
152 ReturnedResourceArray returned; | 152 ReturnedResourceArray returned; |
153 TransferableResource::ReturnResources(reffed, &returned); | 153 TransferableResource::ReturnResources(reffed, &returned); |
154 | 154 |
155 SetFrameProvider(frame.Pass()); | 155 SetFrameProvider(frame.Pass()); |
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::RectF 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::RectF(5.f, 5.f).ToString(), damage.ToString()); | 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::RectF(5.f, 5.f).ToString(), damage.ToString()); | 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::RectF().ToString(), damage.ToString()); | 173 EXPECT_EQ(gfx::Rect(), damage); |
174 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 174 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
175 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 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(frame.Pass()); |
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()); |
(...skipping 24 matching lines...) Expand all Loading... |
210 ReturnedResourceArray returned; | 210 ReturnedResourceArray returned; |
211 TransferableResource::ReturnResources(reffed, &returned); | 211 TransferableResource::ReturnResources(reffed, &returned); |
212 | 212 |
213 SetFrameProvider(frame.Pass()); | 213 SetFrameProvider(frame.Pass()); |
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::RectF 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); |
(...skipping 21 matching lines...) Expand all Loading... |
252 ReturnedResourceArray returned; | 252 ReturnedResourceArray returned; |
253 TransferableResource::ReturnResources(reffed, &returned); | 253 TransferableResource::ReturnResources(reffed, &returned); |
254 | 254 |
255 SetFrameProvider(frame.Pass()); | 255 SetFrameProvider(frame.Pass()); |
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::RectF 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); |
266 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 266 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
267 | 267 |
268 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 268 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
269 | 269 |
270 // Release both refs. But there's still a ref held in the frame | 270 // Release both refs. But there's still a ref held in the frame |
271 // provider itself. | 271 // provider itself. |
272 frame_provider_->UnrefResourcesOnMainThread(returned); | 272 frame_provider_->UnrefResourcesOnMainThread(returned); |
(...skipping 23 matching lines...) Expand all Loading... |
296 ReturnedResourceArray returned; | 296 ReturnedResourceArray returned; |
297 TransferableResource::ReturnResources(reffed, &returned); | 297 TransferableResource::ReturnResources(reffed, &returned); |
298 | 298 |
299 SetFrameProvider(frame.Pass()); | 299 SetFrameProvider(frame.Pass()); |
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::RectF 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::RectF(5.f, 5.f).ToString(), damage.ToString()); | 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::RectF(5.f, 5.f).ToString(), damage.ToString()); | 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::RectF().ToString(), damage.ToString()); | 316 EXPECT_EQ(gfx::Rect(), damage); |
317 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 317 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
318 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 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(frame.Pass()); |
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::RectF(2.f, 2.f).ToString(), damage.ToString()); | 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::RectF(2.f, 2.f).ToString(), damage.ToString()); | 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::RectF().ToString(), damage.ToString()); | 333 EXPECT_EQ(gfx::Rect(), damage); |
334 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 334 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
335 EXPECT_EQ(gfx::RectF().ToString(), damage.ToString()); | 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(frame.Pass()); |
345 | 345 |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
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 |