| 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 |