| 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" |
| 11 #include "cc/resources/transferable_resource.h" | 11 #include "cc/resources/transferable_resource.h" |
| 12 #include "cc/trees/layer_tree_settings.h" |
| 12 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
| 13 | 14 |
| 14 namespace cc { | 15 namespace cc { |
| 15 namespace { | 16 namespace { |
| 16 | 17 |
| 17 class DelegatedFrameProviderTest | 18 class DelegatedFrameProviderTest |
| 18 : public testing::Test, | 19 : public testing::Test, |
| 19 public DelegatedFrameResourceCollectionClient { | 20 public DelegatedFrameResourceCollectionClient { |
| 20 protected: | 21 protected: |
| 21 DelegatedFrameProviderTest() : resources_available_(false) {} | 22 DelegatedFrameProviderTest() : resources_available_(false) {} |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 | 84 |
| 84 void SetFrameProvider(scoped_ptr<DelegatedFrameData> frame_data) { | 85 void SetFrameProvider(scoped_ptr<DelegatedFrameData> frame_data) { |
| 85 frame_provider_ = | 86 frame_provider_ = |
| 86 new DelegatedFrameProvider(resource_collection_, frame_data.Pass()); | 87 new DelegatedFrameProvider(resource_collection_, frame_data.Pass()); |
| 87 } | 88 } |
| 88 | 89 |
| 89 scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; | 90 scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; |
| 90 scoped_refptr<DelegatedFrameProvider> frame_provider_; | 91 scoped_refptr<DelegatedFrameProvider> frame_provider_; |
| 91 bool resources_available_; | 92 bool resources_available_; |
| 92 ReturnedResourceArray resources_; | 93 ReturnedResourceArray resources_; |
| 94 LayerSettings layer_settings_; |
| 93 }; | 95 }; |
| 94 | 96 |
| 95 TEST_F(DelegatedFrameProviderTest, SameResources) { | 97 TEST_F(DelegatedFrameProviderTest, SameResources) { |
| 96 scoped_ptr<DelegatedFrameData> frame = | 98 scoped_ptr<DelegatedFrameData> frame = |
| 97 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 99 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
| 98 AddTextureQuad(frame.get(), 444); | 100 AddTextureQuad(frame.get(), 444); |
| 99 AddTransferableResource(frame.get(), 444); | 101 AddTransferableResource(frame.get(), 444); |
| 100 SetFrameProvider(frame.Pass()); | 102 SetFrameProvider(frame.Pass()); |
| 101 | 103 |
| 102 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 104 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 AddTextureQuad(frame.get(), 444); | 148 AddTextureQuad(frame.get(), 444); |
| 147 AddTransferableResource(frame.get(), 444); | 149 AddTransferableResource(frame.get(), 444); |
| 148 | 150 |
| 149 TransferableResourceArray reffed = frame->resource_list; | 151 TransferableResourceArray reffed = frame->resource_list; |
| 150 ReturnedResourceArray returned; | 152 ReturnedResourceArray returned; |
| 151 TransferableResource::ReturnResources(reffed, &returned); | 153 TransferableResource::ReturnResources(reffed, &returned); |
| 152 | 154 |
| 153 SetFrameProvider(frame.Pass()); | 155 SetFrameProvider(frame.Pass()); |
| 154 | 156 |
| 155 scoped_refptr<DelegatedRendererLayer> observer1 = | 157 scoped_refptr<DelegatedRendererLayer> observer1 = |
| 156 DelegatedRendererLayer::Create(frame_provider_); | 158 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 157 scoped_refptr<DelegatedRendererLayer> observer2 = | 159 scoped_refptr<DelegatedRendererLayer> observer2 = |
| 158 DelegatedRendererLayer::Create(frame_provider_); | 160 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 159 | 161 |
| 160 gfx::RectF damage; | 162 gfx::RectF damage; |
| 161 | 163 |
| 162 // 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. |
| 163 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 165 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
| 164 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 166 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
| 165 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 167 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
| 166 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 168 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
| 167 | 169 |
| 168 // 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 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 204 AddTextureQuad(frame.get(), 444); | 206 AddTextureQuad(frame.get(), 444); |
| 205 AddTransferableResource(frame.get(), 444); | 207 AddTransferableResource(frame.get(), 444); |
| 206 | 208 |
| 207 TransferableResourceArray reffed = frame->resource_list; | 209 TransferableResourceArray reffed = frame->resource_list; |
| 208 ReturnedResourceArray returned; | 210 ReturnedResourceArray returned; |
| 209 TransferableResource::ReturnResources(reffed, &returned); | 211 TransferableResource::ReturnResources(reffed, &returned); |
| 210 | 212 |
| 211 SetFrameProvider(frame.Pass()); | 213 SetFrameProvider(frame.Pass()); |
| 212 | 214 |
| 213 scoped_refptr<DelegatedRendererLayer> observer1 = | 215 scoped_refptr<DelegatedRendererLayer> observer1 = |
| 214 DelegatedRendererLayer::Create(frame_provider_); | 216 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 215 scoped_refptr<DelegatedRendererLayer> observer2 = | 217 scoped_refptr<DelegatedRendererLayer> observer2 = |
| 216 DelegatedRendererLayer::Create(frame_provider_); | 218 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 217 | 219 |
| 218 gfx::RectF damage; | 220 gfx::RectF damage; |
| 219 | 221 |
| 220 // Take a ref on each observer. | 222 // Take a ref on each observer. |
| 221 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 223 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
| 222 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 224 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
| 223 | 225 |
| 224 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 226 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 225 | 227 |
| 226 // 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 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 246 AddTextureQuad(frame.get(), 444); | 248 AddTextureQuad(frame.get(), 444); |
| 247 AddTransferableResource(frame.get(), 444); | 249 AddTransferableResource(frame.get(), 444); |
| 248 | 250 |
| 249 TransferableResourceArray reffed = frame->resource_list; | 251 TransferableResourceArray reffed = frame->resource_list; |
| 250 ReturnedResourceArray returned; | 252 ReturnedResourceArray returned; |
| 251 TransferableResource::ReturnResources(reffed, &returned); | 253 TransferableResource::ReturnResources(reffed, &returned); |
| 252 | 254 |
| 253 SetFrameProvider(frame.Pass()); | 255 SetFrameProvider(frame.Pass()); |
| 254 | 256 |
| 255 scoped_refptr<DelegatedRendererLayer> observer1 = | 257 scoped_refptr<DelegatedRendererLayer> observer1 = |
| 256 DelegatedRendererLayer::Create(frame_provider_); | 258 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 257 scoped_refptr<DelegatedRendererLayer> observer2 = | 259 scoped_refptr<DelegatedRendererLayer> observer2 = |
| 258 DelegatedRendererLayer::Create(frame_provider_); | 260 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 259 | 261 |
| 260 gfx::RectF damage; | 262 gfx::RectF damage; |
| 261 | 263 |
| 262 // Take a ref on each observer. | 264 // Take a ref on each observer. |
| 263 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 265 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
| 264 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 266 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
| 265 | 267 |
| 266 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 268 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 267 | 269 |
| 268 // 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 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 290 AddTextureQuad(frame.get(), 444); | 292 AddTextureQuad(frame.get(), 444); |
| 291 AddTransferableResource(frame.get(), 444); | 293 AddTransferableResource(frame.get(), 444); |
| 292 | 294 |
| 293 TransferableResourceArray reffed = frame->resource_list; | 295 TransferableResourceArray reffed = frame->resource_list; |
| 294 ReturnedResourceArray returned; | 296 ReturnedResourceArray returned; |
| 295 TransferableResource::ReturnResources(reffed, &returned); | 297 TransferableResource::ReturnResources(reffed, &returned); |
| 296 | 298 |
| 297 SetFrameProvider(frame.Pass()); | 299 SetFrameProvider(frame.Pass()); |
| 298 | 300 |
| 299 scoped_refptr<DelegatedRendererLayer> observer1 = | 301 scoped_refptr<DelegatedRendererLayer> observer1 = |
| 300 DelegatedRendererLayer::Create(frame_provider_); | 302 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 301 scoped_refptr<DelegatedRendererLayer> observer2 = | 303 scoped_refptr<DelegatedRendererLayer> observer2 = |
| 302 DelegatedRendererLayer::Create(frame_provider_); | 304 DelegatedRendererLayer::Create(layer_settings_, frame_provider_); |
| 303 | 305 |
| 304 gfx::RectF damage; | 306 gfx::RectF damage; |
| 305 | 307 |
| 306 // 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. |
| 307 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); | 309 frame_provider_->GetFrameDataAndRefResources(observer1.get(), &damage); |
| 308 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 310 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
| 309 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 311 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
| 310 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); | 312 EXPECT_EQ(gfx::RectF(5.f, 5.f).ToString(), damage.ToString()); |
| 311 | 313 |
| 312 // And both get no damage on the 2nd request. | 314 // And both get no damage on the 2nd request. |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 389 | 391 |
| 390 frame_provider_ = nullptr; | 392 frame_provider_ = nullptr; |
| 391 | 393 |
| 392 // Nothing is returned twice. | 394 // Nothing is returned twice. |
| 393 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 395 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 394 EXPECT_EQ(0u, resources_.size()); | 396 EXPECT_EQ(0u, resources_.size()); |
| 395 } | 397 } |
| 396 | 398 |
| 397 } // namespace | 399 } // namespace |
| 398 } // namespace cc | 400 } // namespace cc |
| OLD | NEW |