| 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/resources/video_resource_updater.h" | 5 #include "cc/resources/video_resource_updater.h" | 
| 6 | 6 | 
| 7 #include <stddef.h> | 7 #include <stddef.h> | 
| 8 #include <stdint.h> | 8 #include <stdint.h> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 242   } | 242   } | 
| 243 | 243 | 
| 244   WebGraphicsContext3DUploadCounter* context3d_; | 244   WebGraphicsContext3DUploadCounter* context3d_; | 
| 245   scoped_refptr<TestContextProvider> context_provider_; | 245   scoped_refptr<TestContextProvider> context_provider_; | 
| 246   std::unique_ptr<SharedBitmapManagerAllocationCounter> shared_bitmap_manager_; | 246   std::unique_ptr<SharedBitmapManagerAllocationCounter> shared_bitmap_manager_; | 
| 247   std::unique_ptr<ResourceProvider> resource_provider3d_; | 247   std::unique_ptr<ResourceProvider> resource_provider3d_; | 
| 248   std::unique_ptr<ResourceProvider> resource_provider_software_; | 248   std::unique_ptr<ResourceProvider> resource_provider_software_; | 
| 249 }; | 249 }; | 
| 250 | 250 | 
| 251 TEST_F(VideoResourceUpdaterTest, SoftwareFrame) { | 251 TEST_F(VideoResourceUpdaterTest, SoftwareFrame) { | 
| 252   bool use_stream_video_draw_quad = false; |  | 
| 253   VideoResourceUpdater updater(context_provider_.get(), | 252   VideoResourceUpdater updater(context_provider_.get(), | 
| 254                                resource_provider3d_.get(), | 253                                resource_provider3d_.get()); | 
| 255                                use_stream_video_draw_quad); |  | 
| 256   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 254   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 
| 257 | 255 | 
| 258   VideoFrameExternalResources resources = | 256   VideoFrameExternalResources resources = | 
| 259       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 257       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 260   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 258   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 261 } | 259 } | 
| 262 | 260 | 
| 263 TEST_F(VideoResourceUpdaterTest, HighBitFrameNoF16) { | 261 TEST_F(VideoResourceUpdaterTest, HighBitFrameNoF16) { | 
| 264   bool use_stream_video_draw_quad = false; |  | 
| 265   VideoResourceUpdater updater(context_provider_.get(), | 262   VideoResourceUpdater updater(context_provider_.get(), | 
| 266                                resource_provider3d_.get(), | 263                                resource_provider3d_.get()); | 
| 267                                use_stream_video_draw_quad); |  | 
| 268   scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); | 264   scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); | 
| 269 | 265 | 
| 270   VideoFrameExternalResources resources = | 266   VideoFrameExternalResources resources = | 
| 271       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 267       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 272   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 268   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 273 } | 269 } | 
| 274 | 270 | 
| 275 class VideoResourceUpdaterTestWithF16 : public VideoResourceUpdaterTest { | 271 class VideoResourceUpdaterTestWithF16 : public VideoResourceUpdaterTest { | 
| 276  public: | 272  public: | 
| 277   VideoResourceUpdaterTestWithF16() : VideoResourceUpdaterTest() { | 273   VideoResourceUpdaterTestWithF16() : VideoResourceUpdaterTest() { | 
| 278     context3d_->set_support_texture_half_float_linear(true); | 274     context3d_->set_support_texture_half_float_linear(true); | 
| 279   } | 275   } | 
| 280 }; | 276 }; | 
| 281 | 277 | 
| 282 TEST_F(VideoResourceUpdaterTestWithF16, HighBitFrame) { | 278 TEST_F(VideoResourceUpdaterTestWithF16, HighBitFrame) { | 
| 283   bool use_stream_video_draw_quad = false; |  | 
| 284   VideoResourceUpdater updater(context_provider_.get(), | 279   VideoResourceUpdater updater(context_provider_.get(), | 
| 285                                resource_provider3d_.get(), | 280                                resource_provider3d_.get()); | 
| 286                                use_stream_video_draw_quad); |  | 
| 287   scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); | 281   scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); | 
| 288 | 282 | 
| 289   VideoFrameExternalResources resources = | 283   VideoFrameExternalResources resources = | 
| 290       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 284       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 291   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 285   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 292   EXPECT_NEAR(resources.multiplier, 2.0, 0.1); | 286   EXPECT_NEAR(resources.multiplier, 2.0, 0.1); | 
| 293   EXPECT_NEAR(resources.offset, 0.5, 0.1); | 287   EXPECT_NEAR(resources.offset, 0.5, 0.1); | 
| 294 | 288 | 
| 295   // Create the resource again, to test the path where the | 289   // Create the resource again, to test the path where the | 
| 296   // resources are cached. | 290   // resources are cached. | 
| 297   VideoFrameExternalResources resources2 = | 291   VideoFrameExternalResources resources2 = | 
| 298       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 292       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 299   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources2.type); | 293   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources2.type); | 
| 300   EXPECT_NEAR(resources2.multiplier, 2.0, 0.1); | 294   EXPECT_NEAR(resources2.multiplier, 2.0, 0.1); | 
| 301   EXPECT_NEAR(resources2.offset, 0.5, 0.1); | 295   EXPECT_NEAR(resources2.offset, 0.5, 0.1); | 
| 302 } | 296 } | 
| 303 | 297 | 
| 304 TEST_F(VideoResourceUpdaterTest, HighBitFrameSoftwareCompositor) { | 298 TEST_F(VideoResourceUpdaterTest, HighBitFrameSoftwareCompositor) { | 
| 305   bool use_stream_video_draw_quad = false; | 299   VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); | 
| 306   VideoResourceUpdater updater(nullptr, resource_provider_software_.get(), |  | 
| 307                                use_stream_video_draw_quad); |  | 
| 308   scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); | 300   scoped_refptr<media::VideoFrame> video_frame = CreateTestHighBitFrame(); | 
| 309 | 301 | 
| 310   VideoFrameExternalResources resources = | 302   VideoFrameExternalResources resources = | 
| 311       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 303       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 312   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 304   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 
| 313 } | 305 } | 
| 314 | 306 | 
| 315 TEST_F(VideoResourceUpdaterTest, WonkySoftwareFrame) { | 307 TEST_F(VideoResourceUpdaterTest, WonkySoftwareFrame) { | 
| 316   bool use_stream_video_draw_quad = false; |  | 
| 317   VideoResourceUpdater updater(context_provider_.get(), | 308   VideoResourceUpdater updater(context_provider_.get(), | 
| 318                                resource_provider3d_.get(), | 309                                resource_provider3d_.get()); | 
| 319                                use_stream_video_draw_quad); |  | 
| 320   scoped_refptr<media::VideoFrame> video_frame = CreateWonkyTestYUVVideoFrame(); | 310   scoped_refptr<media::VideoFrame> video_frame = CreateWonkyTestYUVVideoFrame(); | 
| 321 | 311 | 
| 322   VideoFrameExternalResources resources = | 312   VideoFrameExternalResources resources = | 
| 323       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 313       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 324   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 314   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 325 } | 315 } | 
| 326 | 316 | 
| 327 TEST_F(VideoResourceUpdaterTest, WonkySoftwareFrameSoftwareCompositor) { | 317 TEST_F(VideoResourceUpdaterTest, WonkySoftwareFrameSoftwareCompositor) { | 
| 328   bool use_stream_video_draw_quad = false; | 318   VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); | 
| 329   VideoResourceUpdater updater(nullptr, resource_provider_software_.get(), |  | 
| 330                                use_stream_video_draw_quad); |  | 
| 331   scoped_refptr<media::VideoFrame> video_frame = CreateWonkyTestYUVVideoFrame(); | 319   scoped_refptr<media::VideoFrame> video_frame = CreateWonkyTestYUVVideoFrame(); | 
| 332 | 320 | 
| 333   VideoFrameExternalResources resources = | 321   VideoFrameExternalResources resources = | 
| 334       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 322       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 335   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 323   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 
| 336 } | 324 } | 
| 337 | 325 | 
| 338 TEST_F(VideoResourceUpdaterTest, ReuseResource) { | 326 TEST_F(VideoResourceUpdaterTest, ReuseResource) { | 
| 339   bool use_stream_video_draw_quad = false; |  | 
| 340   VideoResourceUpdater updater(context_provider_.get(), | 327   VideoResourceUpdater updater(context_provider_.get(), | 
| 341                                resource_provider3d_.get(), | 328                                resource_provider3d_.get()); | 
| 342                                use_stream_video_draw_quad); |  | 
| 343   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 329   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 
| 344   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 330   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 
| 345 | 331 | 
| 346   // Allocate the resources for a YUV video frame. | 332   // Allocate the resources for a YUV video frame. | 
| 347   context3d_->ResetUploadCount(); | 333   context3d_->ResetUploadCount(); | 
| 348   VideoFrameExternalResources resources = | 334   VideoFrameExternalResources resources = | 
| 349       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 335       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 350   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 336   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 351   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 337   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 
| 352   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 338   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 363   context3d_->ResetUploadCount(); | 349   context3d_->ResetUploadCount(); | 
| 364   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 350   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 365   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 351   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 366   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 352   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 
| 367   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 353   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 
| 368   // The data should be reused so expect no texture uploads. | 354   // The data should be reused so expect no texture uploads. | 
| 369   EXPECT_EQ(0, context3d_->UploadCount()); | 355   EXPECT_EQ(0, context3d_->UploadCount()); | 
| 370 } | 356 } | 
| 371 | 357 | 
| 372 TEST_F(VideoResourceUpdaterTest, ReuseResourceNoDelete) { | 358 TEST_F(VideoResourceUpdaterTest, ReuseResourceNoDelete) { | 
| 373   bool use_stream_video_draw_quad = false; |  | 
| 374   VideoResourceUpdater updater(context_provider_.get(), | 359   VideoResourceUpdater updater(context_provider_.get(), | 
| 375                                resource_provider3d_.get(), | 360                                resource_provider3d_.get()); | 
| 376                                use_stream_video_draw_quad); |  | 
| 377   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 361   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 
| 378   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 362   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 
| 379 | 363 | 
| 380   // Allocate the resources for a YUV video frame. | 364   // Allocate the resources for a YUV video frame. | 
| 381   context3d_->ResetUploadCount(); | 365   context3d_->ResetUploadCount(); | 
| 382   VideoFrameExternalResources resources = | 366   VideoFrameExternalResources resources = | 
| 383       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 367       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 384   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 368   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 385   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 369   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 
| 386   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 370   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 
| 387   EXPECT_EQ(size_t(0), resources.software_resources.size()); | 371   EXPECT_EQ(size_t(0), resources.software_resources.size()); | 
| 388   // Expect exactly three texture uploads, one for each plane. | 372   // Expect exactly three texture uploads, one for each plane. | 
| 389   EXPECT_EQ(3, context3d_->UploadCount()); | 373   EXPECT_EQ(3, context3d_->UploadCount()); | 
| 390 | 374 | 
| 391   // Allocate resources for the same frame. | 375   // Allocate resources for the same frame. | 
| 392   context3d_->ResetUploadCount(); | 376   context3d_->ResetUploadCount(); | 
| 393   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 377   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 394   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 378   EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 
| 395   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 379   EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 
| 396   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 380   EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 
| 397   // The data should be reused so expect no texture uploads. | 381   // The data should be reused so expect no texture uploads. | 
| 398   EXPECT_EQ(0, context3d_->UploadCount()); | 382   EXPECT_EQ(0, context3d_->UploadCount()); | 
| 399 } | 383 } | 
| 400 | 384 | 
| 401 TEST_F(VideoResourceUpdaterTest, SoftwareFrameSoftwareCompositor) { | 385 TEST_F(VideoResourceUpdaterTest, SoftwareFrameSoftwareCompositor) { | 
| 402   bool use_stream_video_draw_quad = false; | 386   VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); | 
| 403   VideoResourceUpdater updater(nullptr, resource_provider_software_.get(), |  | 
| 404                                use_stream_video_draw_quad); |  | 
| 405   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 387   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 
| 406 | 388 | 
| 407   VideoFrameExternalResources resources = | 389   VideoFrameExternalResources resources = | 
| 408       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 390       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 409   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 391   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 
| 410 } | 392 } | 
| 411 | 393 | 
| 412 TEST_F(VideoResourceUpdaterTest, ReuseResourceSoftwareCompositor) { | 394 TEST_F(VideoResourceUpdaterTest, ReuseResourceSoftwareCompositor) { | 
| 413   bool use_stream_video_draw_quad = false; | 395   VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); | 
| 414   VideoResourceUpdater updater(nullptr, resource_provider_software_.get(), |  | 
| 415                                use_stream_video_draw_quad); |  | 
| 416   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 396   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 
| 417   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 397   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 
| 418 | 398 | 
| 419   // Allocate the resources for a software video frame. | 399   // Allocate the resources for a software video frame. | 
| 420   shared_bitmap_manager_->ResetAllocationCount(); | 400   shared_bitmap_manager_->ResetAllocationCount(); | 
| 421   VideoFrameExternalResources resources = | 401   VideoFrameExternalResources resources = | 
| 422       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 402       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 423   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 403   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 
| 424   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 404   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 
| 425   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 405   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 436   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 416   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 437   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 417   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 
| 438   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 418   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 
| 439   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 419   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 
| 440   EXPECT_EQ(size_t(1), resources.software_resources.size()); | 420   EXPECT_EQ(size_t(1), resources.software_resources.size()); | 
| 441   // The data should be reused so expect no new allocations. | 421   // The data should be reused so expect no new allocations. | 
| 442   EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); | 422   EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); | 
| 443 } | 423 } | 
| 444 | 424 | 
| 445 TEST_F(VideoResourceUpdaterTest, ReuseResourceNoDeleteSoftwareCompositor) { | 425 TEST_F(VideoResourceUpdaterTest, ReuseResourceNoDeleteSoftwareCompositor) { | 
| 446   bool use_stream_video_draw_quad = false; | 426   VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); | 
| 447   VideoResourceUpdater updater(nullptr, resource_provider_software_.get(), |  | 
| 448                                use_stream_video_draw_quad); |  | 
| 449   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 427   scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); | 
| 450   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 428   video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); | 
| 451 | 429 | 
| 452   // Allocate the resources for a software video frame. | 430   // Allocate the resources for a software video frame. | 
| 453   shared_bitmap_manager_->ResetAllocationCount(); | 431   shared_bitmap_manager_->ResetAllocationCount(); | 
| 454   VideoFrameExternalResources resources = | 432   VideoFrameExternalResources resources = | 
| 455       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 433       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 456   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 434   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 
| 457   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 435   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 
| 458   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 436   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 
| 459   EXPECT_EQ(size_t(1), resources.software_resources.size()); | 437   EXPECT_EQ(size_t(1), resources.software_resources.size()); | 
| 460   // Expect exactly one allocated shared bitmap. | 438   // Expect exactly one allocated shared bitmap. | 
| 461   EXPECT_EQ(1, shared_bitmap_manager_->AllocationCount()); | 439   EXPECT_EQ(1, shared_bitmap_manager_->AllocationCount()); | 
| 462 | 440 | 
| 463   // Allocate resources for the same frame. | 441   // Allocate resources for the same frame. | 
| 464   shared_bitmap_manager_->ResetAllocationCount(); | 442   shared_bitmap_manager_->ResetAllocationCount(); | 
| 465   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 443   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 466   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 444   EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 
| 467   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 445   EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 
| 468   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 446   EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 
| 469   EXPECT_EQ(size_t(1), resources.software_resources.size()); | 447   EXPECT_EQ(size_t(1), resources.software_resources.size()); | 
| 470   // The data should be reused so expect no new allocations. | 448   // The data should be reused so expect no new allocations. | 
| 471   EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); | 449   EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); | 
| 472 } | 450 } | 
| 473 | 451 | 
| 474 TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes) { | 452 TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes) { | 
| 475   bool use_stream_video_draw_quad = false; |  | 
| 476   VideoResourceUpdater updater(context_provider_.get(), | 453   VideoResourceUpdater updater(context_provider_.get(), | 
| 477                                resource_provider3d_.get(), | 454                                resource_provider3d_.get()); | 
| 478                                use_stream_video_draw_quad); |  | 
| 479 | 455 | 
| 480   scoped_refptr<media::VideoFrame> video_frame = | 456   scoped_refptr<media::VideoFrame> video_frame = | 
| 481       CreateTestRGBAHardwareVideoFrame(); | 457       CreateTestRGBAHardwareVideoFrame(); | 
| 482 | 458 | 
| 483   VideoFrameExternalResources resources = | 459   VideoFrameExternalResources resources = | 
| 484       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 460       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 485   EXPECT_EQ(VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE, | 461   EXPECT_EQ(VideoFrameExternalResources::RGBA_PREMULTIPLIED_RESOURCE, | 
| 486             resources.type); | 462             resources.type); | 
| 487   EXPECT_EQ(1u, resources.mailboxes.size()); | 463   EXPECT_EQ(1u, resources.mailboxes.size()); | 
| 488   EXPECT_EQ(1u, resources.release_callbacks.size()); | 464   EXPECT_EQ(1u, resources.release_callbacks.size()); | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 499 | 475 | 
| 500   video_frame = CreateTestYuvHardwareVideoFrame(); | 476   video_frame = CreateTestYuvHardwareVideoFrame(); | 
| 501   video_frame->metadata()->SetBoolean( | 477   video_frame->metadata()->SetBoolean( | 
| 502       media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true); | 478       media::VideoFrameMetadata::READ_LOCK_FENCES_ENABLED, true); | 
| 503 | 479 | 
| 504   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 480   resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 505   EXPECT_TRUE(resources.read_lock_fences_enabled); | 481   EXPECT_TRUE(resources.read_lock_fences_enabled); | 
| 506 } | 482 } | 
| 507 | 483 | 
| 508 TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes_StreamTexture) { | 484 TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes_StreamTexture) { | 
| 509   bool use_stream_video_draw_quad = true; |  | 
| 510   VideoResourceUpdater updater(context_provider_.get(), | 485   VideoResourceUpdater updater(context_provider_.get(), | 
| 511                                resource_provider3d_.get(), | 486                                resource_provider3d_.get()); | 
| 512                                use_stream_video_draw_quad); |  | 
| 513   context3d_->ResetTextureCreationCount(); | 487   context3d_->ResetTextureCreationCount(); | 
| 514   scoped_refptr<media::VideoFrame> video_frame = | 488   scoped_refptr<media::VideoFrame> video_frame = | 
| 515       CreateTestStreamTextureHardwareVideoFrame(false); | 489       CreateTestStreamTextureHardwareVideoFrame(false); | 
| 516 | 490 | 
| 517   VideoFrameExternalResources resources = | 491   VideoFrameExternalResources resources = | 
| 518       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 492       updater.CreateExternalResourcesFromVideoFrame(video_frame); | 
| 519   EXPECT_EQ(VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE, | 493   EXPECT_EQ(VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE, | 
| 520             resources.type); | 494             resources.type); | 
| 521   EXPECT_EQ(1u, resources.mailboxes.size()); | 495   EXPECT_EQ(1u, resources.mailboxes.size()); | 
| 522   EXPECT_EQ((GLenum)GL_TEXTURE_EXTERNAL_OES, resources.mailboxes[0].target()); | 496   EXPECT_EQ((GLenum)GL_TEXTURE_EXTERNAL_OES, resources.mailboxes[0].target()); | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
| 538   EXPECT_EQ(1, context3d_->TextureCreationCount()); | 512   EXPECT_EQ(1, context3d_->TextureCreationCount()); | 
| 539 | 513 | 
| 540   // The texture copy path requires the use of CopyTextureCHROMIUM, which | 514   // The texture copy path requires the use of CopyTextureCHROMIUM, which | 
| 541   // enforces that the target texture not be immutable, as it may need | 515   // enforces that the target texture not be immutable, as it may need | 
| 542   // to alter the storage of the texture. Therefore, this test asserts | 516   // to alter the storage of the texture. Therefore, this test asserts | 
| 543   // that an immutable texture wasn't created by glTexStorage2DEXT, when | 517   // that an immutable texture wasn't created by glTexStorage2DEXT, when | 
| 544   // that extension is supported. | 518   // that extension is supported. | 
| 545   EXPECT_FALSE(context3d_->WasImmutableTextureCreated()); | 519   EXPECT_FALSE(context3d_->WasImmutableTextureCreated()); | 
| 546 } | 520 } | 
| 547 | 521 | 
| 548 TEST_F(VideoResourceUpdaterTest, CreateForHardwarePlanes_TextureQuad) { |  | 
| 549   bool use_stream_video_draw_quad = false; |  | 
| 550   VideoResourceUpdater updater(context_provider_.get(), |  | 
| 551                                resource_provider3d_.get(), |  | 
| 552                                use_stream_video_draw_quad); |  | 
| 553   context3d_->ResetTextureCreationCount(); |  | 
| 554   scoped_refptr<media::VideoFrame> video_frame = |  | 
| 555       CreateTestStreamTextureHardwareVideoFrame(false); |  | 
| 556 |  | 
| 557   VideoFrameExternalResources resources = |  | 
| 558       updater.CreateExternalResourcesFromVideoFrame(video_frame); |  | 
| 559   EXPECT_EQ(VideoFrameExternalResources::RGBA_RESOURCE, resources.type); |  | 
| 560   EXPECT_EQ(1u, resources.mailboxes.size()); |  | 
| 561   EXPECT_EQ((GLenum)GL_TEXTURE_EXTERNAL_OES, resources.mailboxes[0].target()); |  | 
| 562   EXPECT_EQ(1u, resources.release_callbacks.size()); |  | 
| 563   EXPECT_EQ(0u, resources.software_resources.size()); |  | 
| 564   EXPECT_EQ(0, context3d_->TextureCreationCount()); |  | 
| 565 } |  | 
| 566 |  | 
| 567 }  // namespace | 522 }  // namespace | 
| 568 }  // namespace cc | 523 }  // namespace cc | 
| OLD | NEW | 
|---|