Index: cc/resources/video_resource_updater_unittest.cc |
diff --git a/cc/resources/video_resource_updater_unittest.cc b/cc/resources/video_resource_updater_unittest.cc |
deleted file mode 100644 |
index 209835797600640229d56101291438cf72dfd45b..0000000000000000000000000000000000000000 |
--- a/cc/resources/video_resource_updater_unittest.cc |
+++ /dev/null |
@@ -1,255 +0,0 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "cc/resources/video_resource_updater.h" |
- |
-#include "base/memory/shared_memory.h" |
-#include "cc/resources/resource_provider.h" |
-#include "cc/test/fake_output_surface.h" |
-#include "cc/test/fake_output_surface_client.h" |
-#include "cc/test/test_shared_bitmap_manager.h" |
-#include "cc/test/test_web_graphics_context_3d.h" |
-#include "cc/trees/blocking_task_runner.h" |
-#include "media/base/video_frame.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace cc { |
-namespace { |
- |
-class WebGraphicsContext3DUploadCounter : public TestWebGraphicsContext3D { |
- public: |
- void texSubImage2D(GLenum target, |
- GLint level, |
- GLint xoffset, |
- GLint yoffset, |
- GLsizei width, |
- GLsizei height, |
- GLenum format, |
- GLenum type, |
- const void* pixels) override { |
- ++upload_count_; |
- } |
- |
- int UploadCount() { return upload_count_; } |
- void ResetUploadCount() { upload_count_ = 0; } |
- |
- private: |
- int upload_count_; |
-}; |
- |
-class SharedBitmapManagerAllocationCounter : public TestSharedBitmapManager { |
- public: |
- scoped_ptr<SharedBitmap> AllocateSharedBitmap( |
- const gfx::Size& size) override { |
- ++allocation_count_; |
- return TestSharedBitmapManager::AllocateSharedBitmap(size); |
- } |
- |
- int AllocationCount() { return allocation_count_; } |
- void ResetAllocationCount() { allocation_count_ = 0; } |
- |
- private: |
- int allocation_count_; |
-}; |
- |
-class VideoResourceUpdaterTest : public testing::Test { |
- protected: |
- VideoResourceUpdaterTest() { |
- scoped_ptr<WebGraphicsContext3DUploadCounter> context3d( |
- new WebGraphicsContext3DUploadCounter()); |
- |
- context3d_ = context3d.get(); |
- |
- output_surface3d_ = |
- FakeOutputSurface::Create3d(context3d.Pass()); |
- CHECK(output_surface3d_->BindToClient(&client_)); |
- |
- output_surface_software_ = FakeOutputSurface::CreateSoftware( |
- make_scoped_ptr(new SoftwareOutputDevice)); |
- CHECK(output_surface_software_->BindToClient(&client_)); |
- |
- shared_bitmap_manager_.reset(new SharedBitmapManagerAllocationCounter()); |
- resource_provider3d_ = |
- ResourceProvider::Create(output_surface3d_.get(), |
- shared_bitmap_manager_.get(), |
- NULL, |
- NULL, |
- 0, |
- false, |
- 1); |
- |
- resource_provider_software_ = ResourceProvider::Create( |
- output_surface_software_.get(), shared_bitmap_manager_.get(), NULL, |
- NULL, 0, false, 1); |
- } |
- |
- scoped_refptr<media::VideoFrame> CreateTestYUVVideoFrame() { |
- const int kDimension = 10; |
- gfx::Size size(kDimension, kDimension); |
- static uint8 y_data[kDimension * kDimension] = { 0 }; |
- static uint8 u_data[kDimension * kDimension / 2] = { 0 }; |
- static uint8 v_data[kDimension * kDimension / 2] = { 0 }; |
- |
- return media::VideoFrame::WrapExternalYuvData( |
- media::VideoFrame::YV16, // format |
- size, // coded_size |
- gfx::Rect(size), // visible_rect |
- size, // natural_size |
- size.width(), // y_stride |
- size.width() / 2, // u_stride |
- size.width() / 2, // v_stride |
- y_data, // y_data |
- u_data, // u_data |
- v_data, // v_data |
- base::TimeDelta(), // timestamp, |
- base::Closure()); // no_longer_needed_cb |
- } |
- |
- WebGraphicsContext3DUploadCounter* context3d_; |
- FakeOutputSurfaceClient client_; |
- scoped_ptr<FakeOutputSurface> output_surface3d_; |
- scoped_ptr<FakeOutputSurface> output_surface_software_; |
- scoped_ptr<SharedBitmapManagerAllocationCounter> shared_bitmap_manager_; |
- scoped_ptr<ResourceProvider> resource_provider3d_; |
- scoped_ptr<ResourceProvider> resource_provider_software_; |
-}; |
- |
-TEST_F(VideoResourceUpdaterTest, SoftwareFrame) { |
- VideoResourceUpdater updater(output_surface3d_->context_provider(), |
- resource_provider3d_.get()); |
- scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); |
- |
- VideoFrameExternalResources resources = |
- updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
-} |
- |
-TEST_F(VideoResourceUpdaterTest, ReuseResource) { |
- VideoResourceUpdater updater(output_surface3d_->context_provider(), |
- resource_provider3d_.get()); |
- scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); |
- video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); |
- |
- // Allocate the resources for a YUV video frame. |
- context3d_->ResetUploadCount(); |
- VideoFrameExternalResources resources = |
- updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(3), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(3), resources.release_callbacks.size()); |
- EXPECT_EQ(size_t(0), resources.software_resources.size()); |
- // Expect exactly three texture uploads, one for each plane. |
- EXPECT_EQ(3, context3d_->UploadCount()); |
- |
- // Simulate the ResourceProvider releasing the resources back to the video |
- // updater. |
- for (ReleaseCallbackImpl& release_callback : resources.release_callbacks) |
- release_callback.Run(0, false, nullptr); |
- |
- // Allocate resources for the same frame. |
- context3d_->ResetUploadCount(); |
- resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(3), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(3), resources.release_callbacks.size()); |
- // The data should be reused so expect no texture uploads. |
- EXPECT_EQ(0, context3d_->UploadCount()); |
-} |
- |
-TEST_F(VideoResourceUpdaterTest, ReuseResourceNoDelete) { |
- VideoResourceUpdater updater(output_surface3d_->context_provider(), |
- resource_provider3d_.get()); |
- scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); |
- video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); |
- |
- // Allocate the resources for a YUV video frame. |
- context3d_->ResetUploadCount(); |
- VideoFrameExternalResources resources = |
- updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(3), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(3), resources.release_callbacks.size()); |
- EXPECT_EQ(size_t(0), resources.software_resources.size()); |
- // Expect exactly three texture uploads, one for each plane. |
- EXPECT_EQ(3, context3d_->UploadCount()); |
- |
- // Allocate resources for the same frame. |
- context3d_->ResetUploadCount(); |
- resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(3), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(3), resources.release_callbacks.size()); |
- // The data should be reused so expect no texture uploads. |
- EXPECT_EQ(0, context3d_->UploadCount()); |
-} |
- |
-TEST_F(VideoResourceUpdaterTest, SoftwareFrameSoftwareCompositor) { |
- VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); |
- scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); |
- |
- VideoFrameExternalResources resources = |
- updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); |
-} |
- |
-TEST_F(VideoResourceUpdaterTest, ReuseResourceSoftwareCompositor) { |
- VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); |
- scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); |
- video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); |
- |
- // Allocate the resources for a software video frame. |
- shared_bitmap_manager_->ResetAllocationCount(); |
- VideoFrameExternalResources resources = |
- updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(0), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(0), resources.release_callbacks.size()); |
- EXPECT_EQ(size_t(1), resources.software_resources.size()); |
- // Expect exactly one allocated shared bitmap. |
- EXPECT_EQ(1, shared_bitmap_manager_->AllocationCount()); |
- |
- // Simulate the ResourceProvider releasing the resource back to the video |
- // updater. |
- resources.software_release_callback.Run(0, false, nullptr); |
- |
- // Allocate resources for the same frame. |
- shared_bitmap_manager_->ResetAllocationCount(); |
- resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(0), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(0), resources.release_callbacks.size()); |
- EXPECT_EQ(size_t(1), resources.software_resources.size()); |
- // The data should be reused so expect no new allocations. |
- EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); |
-} |
- |
-TEST_F(VideoResourceUpdaterTest, ReuseResourceNoDeleteSoftwareCompositor) { |
- VideoResourceUpdater updater(nullptr, resource_provider_software_.get()); |
- scoped_refptr<media::VideoFrame> video_frame = CreateTestYUVVideoFrame(); |
- video_frame->set_timestamp(base::TimeDelta::FromSeconds(1234)); |
- |
- // Allocate the resources for a software video frame. |
- shared_bitmap_manager_->ResetAllocationCount(); |
- VideoFrameExternalResources resources = |
- updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(0), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(0), resources.release_callbacks.size()); |
- EXPECT_EQ(size_t(1), resources.software_resources.size()); |
- // Expect exactly one allocated shared bitmap. |
- EXPECT_EQ(1, shared_bitmap_manager_->AllocationCount()); |
- |
- // Allocate resources for the same frame. |
- shared_bitmap_manager_->ResetAllocationCount(); |
- resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
- EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); |
- EXPECT_EQ(size_t(0), resources.mailboxes.size()); |
- EXPECT_EQ(size_t(0), resources.release_callbacks.size()); |
- EXPECT_EQ(size_t(1), resources.software_resources.size()); |
- // The data should be reused so expect no new allocations. |
- EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); |
-} |
- |
-} // namespace |
-} // namespace cc |