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