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