| 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 |