| 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 14 matching lines...) Expand all Loading... |
| 25 scoped_ptr<DelegatedFrameData> CreateFrameData( | 25 scoped_ptr<DelegatedFrameData> CreateFrameData( |
| 26 const gfx::Rect& root_output_rect, | 26 const gfx::Rect& root_output_rect, |
| 27 const gfx::Rect& root_damage_rect) { | 27 const gfx::Rect& root_damage_rect) { |
| 28 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); | 28 scoped_ptr<DelegatedFrameData> frame(new DelegatedFrameData); |
| 29 | 29 |
| 30 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); | 30 scoped_ptr<RenderPass> root_pass(RenderPass::Create()); |
| 31 root_pass->SetNew(RenderPassId(1, 1), | 31 root_pass->SetNew(RenderPassId(1, 1), |
| 32 root_output_rect, | 32 root_output_rect, |
| 33 root_damage_rect, | 33 root_damage_rect, |
| 34 gfx::Transform()); | 34 gfx::Transform()); |
| 35 frame->render_pass_list.push_back(root_pass.Pass()); | 35 frame->render_pass_list.push_back(std::move(root_pass)); |
| 36 return frame.Pass(); | 36 return frame; |
| 37 } | 37 } |
| 38 | 38 |
| 39 void AddTransferableResource(DelegatedFrameData* frame, | 39 void AddTransferableResource(DelegatedFrameData* frame, |
| 40 ResourceId resource_id) { | 40 ResourceId resource_id) { |
| 41 TransferableResource resource; | 41 TransferableResource resource; |
| 42 resource.id = resource_id; | 42 resource.id = resource_id; |
| 43 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; | 43 resource.mailbox_holder.texture_target = GL_TEXTURE_2D; |
| 44 frame->resource_list.push_back(resource); | 44 frame->resource_list.push_back(resource); |
| 45 } | 45 } |
| 46 | 46 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 77 } | 77 } |
| 78 | 78 |
| 79 bool ReturnAndResetResourcesAvailable() { | 79 bool ReturnAndResetResourcesAvailable() { |
| 80 bool r = resources_available_; | 80 bool r = resources_available_; |
| 81 resources_available_ = false; | 81 resources_available_ = false; |
| 82 return r; | 82 return r; |
| 83 } | 83 } |
| 84 | 84 |
| 85 void SetFrameProvider(scoped_ptr<DelegatedFrameData> frame_data) { | 85 void SetFrameProvider(scoped_ptr<DelegatedFrameData> frame_data) { |
| 86 frame_provider_ = | 86 frame_provider_ = |
| 87 new DelegatedFrameProvider(resource_collection_, frame_data.Pass()); | 87 new DelegatedFrameProvider(resource_collection_, std::move(frame_data)); |
| 88 } | 88 } |
| 89 | 89 |
| 90 scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; | 90 scoped_refptr<DelegatedFrameResourceCollection> resource_collection_; |
| 91 scoped_refptr<DelegatedFrameProvider> frame_provider_; | 91 scoped_refptr<DelegatedFrameProvider> frame_provider_; |
| 92 bool resources_available_; | 92 bool resources_available_; |
| 93 ReturnedResourceArray resources_; | 93 ReturnedResourceArray resources_; |
| 94 LayerSettings layer_settings_; | 94 LayerSettings layer_settings_; |
| 95 }; | 95 }; |
| 96 | 96 |
| 97 TEST_F(DelegatedFrameProviderTest, SameResources) { | 97 TEST_F(DelegatedFrameProviderTest, SameResources) { |
| 98 scoped_ptr<DelegatedFrameData> frame = | 98 scoped_ptr<DelegatedFrameData> frame = |
| 99 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 99 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
| 100 AddTextureQuad(frame.get(), 444); | 100 AddTextureQuad(frame.get(), 444); |
| 101 AddTransferableResource(frame.get(), 444); | 101 AddTransferableResource(frame.get(), 444); |
| 102 SetFrameProvider(frame.Pass()); | 102 SetFrameProvider(std::move(frame)); |
| 103 | 103 |
| 104 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 104 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
| 105 AddTextureQuad(frame.get(), 444); | 105 AddTextureQuad(frame.get(), 444); |
| 106 AddTransferableResource(frame.get(), 444); | 106 AddTransferableResource(frame.get(), 444); |
| 107 SetFrameProvider(frame.Pass()); | 107 SetFrameProvider(std::move(frame)); |
| 108 | 108 |
| 109 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 109 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 110 EXPECT_EQ(0u, resources_.size()); | 110 EXPECT_EQ(0u, resources_.size()); |
| 111 | 111 |
| 112 frame_provider_ = nullptr; | 112 frame_provider_ = nullptr; |
| 113 | 113 |
| 114 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 114 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
| 115 EXPECT_EQ(1u, resources_.size()); | 115 EXPECT_EQ(1u, resources_.size()); |
| 116 EXPECT_EQ(444u, resources_[0].id); | 116 EXPECT_EQ(444u, resources_[0].id); |
| 117 } | 117 } |
| 118 | 118 |
| 119 TEST_F(DelegatedFrameProviderTest, ReplaceResources) { | 119 TEST_F(DelegatedFrameProviderTest, ReplaceResources) { |
| 120 scoped_ptr<DelegatedFrameData> frame = | 120 scoped_ptr<DelegatedFrameData> frame = |
| 121 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 121 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
| 122 AddTextureQuad(frame.get(), 444); | 122 AddTextureQuad(frame.get(), 444); |
| 123 AddTransferableResource(frame.get(), 444); | 123 AddTransferableResource(frame.get(), 444); |
| 124 SetFrameProvider(frame.Pass()); | 124 SetFrameProvider(std::move(frame)); |
| 125 | 125 |
| 126 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 126 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 127 | 127 |
| 128 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 128 frame = CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
| 129 AddTextureQuad(frame.get(), 555); | 129 AddTextureQuad(frame.get(), 555); |
| 130 AddTransferableResource(frame.get(), 555); | 130 AddTransferableResource(frame.get(), 555); |
| 131 SetFrameProvider(frame.Pass()); | 131 SetFrameProvider(std::move(frame)); |
| 132 | 132 |
| 133 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 133 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
| 134 EXPECT_EQ(1u, resources_.size()); | 134 EXPECT_EQ(1u, resources_.size()); |
| 135 EXPECT_EQ(444u, resources_[0].id); | 135 EXPECT_EQ(444u, resources_[0].id); |
| 136 resources_.clear(); | 136 resources_.clear(); |
| 137 | 137 |
| 138 frame_provider_ = nullptr; | 138 frame_provider_ = nullptr; |
| 139 | 139 |
| 140 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 140 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
| 141 EXPECT_EQ(1u, resources_.size()); | 141 EXPECT_EQ(1u, resources_.size()); |
| 142 EXPECT_EQ(555u, resources_[0].id); | 142 EXPECT_EQ(555u, resources_[0].id); |
| 143 } | 143 } |
| 144 | 144 |
| 145 TEST_F(DelegatedFrameProviderTest, RefResources) { | 145 TEST_F(DelegatedFrameProviderTest, RefResources) { |
| 146 scoped_ptr<DelegatedFrameData> frame = | 146 scoped_ptr<DelegatedFrameData> frame = |
| 147 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 147 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
| 148 AddTextureQuad(frame.get(), 444); | 148 AddTextureQuad(frame.get(), 444); |
| 149 AddTransferableResource(frame.get(), 444); | 149 AddTransferableResource(frame.get(), 444); |
| 150 | 150 |
| 151 TransferableResourceArray reffed = frame->resource_list; | 151 TransferableResourceArray reffed = frame->resource_list; |
| 152 ReturnedResourceArray returned; | 152 ReturnedResourceArray returned; |
| 153 TransferableResource::ReturnResources(reffed, &returned); | 153 TransferableResource::ReturnResources(reffed, &returned); |
| 154 | 154 |
| 155 SetFrameProvider(frame.Pass()); | 155 SetFrameProvider(std::move(frame)); |
| 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::Rect 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::Rect(5, 5), damage); | 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::Rect(5, 5), damage); | 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::Rect(), damage); | 173 EXPECT_EQ(gfx::Rect(), damage); |
| 174 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 174 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
| 175 EXPECT_EQ(gfx::Rect(), damage); | 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(std::move(frame)); |
| 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()); |
| 186 | 186 |
| 187 // There are 4 refs taken. | 187 // There are 4 refs taken. |
| 188 frame_provider_->UnrefResourcesOnMainThread(returned); | 188 frame_provider_->UnrefResourcesOnMainThread(returned); |
| 189 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 189 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 190 frame_provider_->UnrefResourcesOnMainThread(returned); | 190 frame_provider_->UnrefResourcesOnMainThread(returned); |
| 191 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 191 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 192 frame_provider_->UnrefResourcesOnMainThread(returned); | 192 frame_provider_->UnrefResourcesOnMainThread(returned); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 203 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProvider) { | 203 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProvider) { |
| 204 scoped_ptr<DelegatedFrameData> frame = | 204 scoped_ptr<DelegatedFrameData> frame = |
| 205 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 205 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
| 206 AddTextureQuad(frame.get(), 444); | 206 AddTextureQuad(frame.get(), 444); |
| 207 AddTransferableResource(frame.get(), 444); | 207 AddTransferableResource(frame.get(), 444); |
| 208 | 208 |
| 209 TransferableResourceArray reffed = frame->resource_list; | 209 TransferableResourceArray reffed = frame->resource_list; |
| 210 ReturnedResourceArray returned; | 210 ReturnedResourceArray returned; |
| 211 TransferableResource::ReturnResources(reffed, &returned); | 211 TransferableResource::ReturnResources(reffed, &returned); |
| 212 | 212 |
| 213 SetFrameProvider(frame.Pass()); | 213 SetFrameProvider(std::move(frame)); |
| 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::Rect 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); |
| 231 frame_provider_->UnrefResourcesOnMainThread(returned); | 231 frame_provider_->UnrefResourcesOnMainThread(returned); |
| 232 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 232 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 233 | 233 |
| 234 // Setting a new frame will release it. | 234 // Setting a new frame will release it. |
| 235 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 235 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
| 236 AddTextureQuad(frame.get(), 555); | 236 AddTextureQuad(frame.get(), 555); |
| 237 AddTransferableResource(frame.get(), 555); | 237 AddTransferableResource(frame.get(), 555); |
| 238 frame_provider_->SetFrameData(frame.Pass()); | 238 frame_provider_->SetFrameData(std::move(frame)); |
| 239 | 239 |
| 240 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 240 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
| 241 EXPECT_EQ(1u, resources_.size()); | 241 EXPECT_EQ(1u, resources_.size()); |
| 242 EXPECT_EQ(444u, resources_[0].id); | 242 EXPECT_EQ(444u, resources_[0].id); |
| 243 } | 243 } |
| 244 | 244 |
| 245 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProviderUntilDestroy) { | 245 TEST_F(DelegatedFrameProviderTest, RefResourcesInFrameProviderUntilDestroy) { |
| 246 scoped_ptr<DelegatedFrameData> frame = | 246 scoped_ptr<DelegatedFrameData> frame = |
| 247 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 247 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
| 248 AddTextureQuad(frame.get(), 444); | 248 AddTextureQuad(frame.get(), 444); |
| 249 AddTransferableResource(frame.get(), 444); | 249 AddTransferableResource(frame.get(), 444); |
| 250 | 250 |
| 251 TransferableResourceArray reffed = frame->resource_list; | 251 TransferableResourceArray reffed = frame->resource_list; |
| 252 ReturnedResourceArray returned; | 252 ReturnedResourceArray returned; |
| 253 TransferableResource::ReturnResources(reffed, &returned); | 253 TransferableResource::ReturnResources(reffed, &returned); |
| 254 | 254 |
| 255 SetFrameProvider(frame.Pass()); | 255 SetFrameProvider(std::move(frame)); |
| 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::Rect 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); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 289 TEST_F(DelegatedFrameProviderTest, Damage) { | 289 TEST_F(DelegatedFrameProviderTest, Damage) { |
| 290 scoped_ptr<DelegatedFrameData> frame = | 290 scoped_ptr<DelegatedFrameData> frame = |
| 291 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); | 291 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(2, 2)); |
| 292 AddTextureQuad(frame.get(), 444); | 292 AddTextureQuad(frame.get(), 444); |
| 293 AddTransferableResource(frame.get(), 444); | 293 AddTransferableResource(frame.get(), 444); |
| 294 | 294 |
| 295 TransferableResourceArray reffed = frame->resource_list; | 295 TransferableResourceArray reffed = frame->resource_list; |
| 296 ReturnedResourceArray returned; | 296 ReturnedResourceArray returned; |
| 297 TransferableResource::ReturnResources(reffed, &returned); | 297 TransferableResource::ReturnResources(reffed, &returned); |
| 298 | 298 |
| 299 SetFrameProvider(frame.Pass()); | 299 SetFrameProvider(std::move(frame)); |
| 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::Rect 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::Rect(5, 5), damage); | 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::Rect(5, 5), damage); | 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::Rect(), damage); | 316 EXPECT_EQ(gfx::Rect(), damage); |
| 317 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 317 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
| 318 EXPECT_EQ(gfx::Rect(), damage); | 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(std::move(frame)); |
| 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::Rect(2, 2), damage); | 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::Rect(2, 2), damage); | 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::Rect(), damage); | 333 EXPECT_EQ(gfx::Rect(), damage); |
| 334 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); | 334 frame_provider_->GetFrameDataAndRefResources(observer2.get(), &damage); |
| 335 EXPECT_EQ(gfx::Rect(), damage); | 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(std::move(frame)); |
| 345 | 345 |
| 346 // There is nothing to lose. | 346 // There is nothing to lose. |
| 347 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 347 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 348 EXPECT_FALSE(resource_collection_->LoseAllResources()); | 348 EXPECT_FALSE(resource_collection_->LoseAllResources()); |
| 349 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 349 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 350 EXPECT_EQ(0u, resources_.size()); | 350 EXPECT_EQ(0u, resources_.size()); |
| 351 } | 351 } |
| 352 | 352 |
| 353 TEST_F(DelegatedFrameProviderTest, LostSomething) { | 353 TEST_F(DelegatedFrameProviderTest, LostSomething) { |
| 354 scoped_ptr<DelegatedFrameData> frame = | 354 scoped_ptr<DelegatedFrameData> frame = |
| 355 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); | 355 CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); |
| 356 AddTextureQuad(frame.get(), 444); | 356 AddTextureQuad(frame.get(), 444); |
| 357 AddTransferableResource(frame.get(), 444); | 357 AddTransferableResource(frame.get(), 444); |
| 358 | 358 |
| 359 SetFrameProvider(frame.Pass()); | 359 SetFrameProvider(std::move(frame)); |
| 360 | 360 |
| 361 // Add a second reference on the resource. | 361 // Add a second reference on the resource. |
| 362 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); | 362 frame = CreateFrameData(gfx::Rect(5, 5), gfx::Rect(5, 5)); |
| 363 AddTextureQuad(frame.get(), 444); | 363 AddTextureQuad(frame.get(), 444); |
| 364 AddTransferableResource(frame.get(), 444); | 364 AddTransferableResource(frame.get(), 444); |
| 365 | 365 |
| 366 SetFrameProvider(frame.Pass()); | 366 SetFrameProvider(std::move(frame)); |
| 367 | 367 |
| 368 // There is something to lose. | 368 // There is something to lose. |
| 369 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 369 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 370 EXPECT_TRUE(resource_collection_->LoseAllResources()); | 370 EXPECT_TRUE(resource_collection_->LoseAllResources()); |
| 371 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 371 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
| 372 | 372 |
| 373 EXPECT_EQ(1u, resources_.size()); | 373 EXPECT_EQ(1u, resources_.size()); |
| 374 EXPECT_EQ(444u, resources_[0].id); | 374 EXPECT_EQ(444u, resources_[0].id); |
| 375 EXPECT_EQ(2, resources_[0].count); | 375 EXPECT_EQ(2, resources_[0].count); |
| 376 } | 376 } |
| 377 | 377 |
| 378 TEST_F(DelegatedFrameProviderTest, NothingReturnedAfterLoss) { | 378 TEST_F(DelegatedFrameProviderTest, NothingReturnedAfterLoss) { |
| 379 scoped_ptr<DelegatedFrameData> frame = | 379 scoped_ptr<DelegatedFrameData> frame = |
| 380 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); | 380 CreateFrameData(gfx::Rect(1, 1), gfx::Rect(1, 1)); |
| 381 AddTextureQuad(frame.get(), 444); | 381 AddTextureQuad(frame.get(), 444); |
| 382 AddTransferableResource(frame.get(), 444); | 382 AddTransferableResource(frame.get(), 444); |
| 383 SetFrameProvider(frame.Pass()); | 383 SetFrameProvider(std::move(frame)); |
| 384 | 384 |
| 385 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); | 385 EXPECT_FALSE(ReturnAndResetResourcesAvailable()); |
| 386 | 386 |
| 387 // Lose all the resources. | 387 // Lose all the resources. |
| 388 EXPECT_TRUE(resource_collection_->LoseAllResources()); | 388 EXPECT_TRUE(resource_collection_->LoseAllResources()); |
| 389 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); | 389 EXPECT_TRUE(ReturnAndResetResourcesAvailable()); |
| 390 resources_.clear(); | 390 resources_.clear(); |
| 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 |