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