| 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 "cc/resources/resource_provider.h" | 7 #include "cc/resources/resource_provider.h" |
| 8 #include "cc/test/fake_output_surface.h" | 8 #include "cc/test/fake_output_surface.h" |
| 9 #include "cc/test/fake_output_surface_client.h" | 9 #include "cc/test/fake_output_surface_client.h" |
| 10 #include "cc/test/fake_resource_provider.h" | 10 #include "cc/test/fake_resource_provider.h" |
| (...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 size, // natural_size | 92 size, // natural_size |
| 93 size.width(), // y_stride | 93 size.width(), // y_stride |
| 94 size.width() / 2, // u_stride | 94 size.width() / 2, // u_stride |
| 95 size.width() / 2, // v_stride | 95 size.width() / 2, // v_stride |
| 96 y_data, // y_data | 96 y_data, // y_data |
| 97 u_data, // u_data | 97 u_data, // u_data |
| 98 v_data, // v_data | 98 v_data, // v_data |
| 99 base::TimeDelta()); // timestamp | 99 base::TimeDelta()); // timestamp |
| 100 } | 100 } |
| 101 | 101 |
| 102 static void ReleaseMailboxCB(unsigned sync_point) {} | 102 static void ReleaseMailboxCB(const gpu::SyncToken& sync_token) {} |
| 103 | 103 |
| 104 scoped_refptr<media::VideoFrame> CreateTestRGBAHardwareVideoFrame() { | 104 scoped_refptr<media::VideoFrame> CreateTestRGBAHardwareVideoFrame() { |
| 105 const int kDimension = 10; | 105 const int kDimension = 10; |
| 106 gfx::Size size(kDimension, kDimension); | 106 gfx::Size size(kDimension, kDimension); |
| 107 | 107 |
| 108 gpu::Mailbox mailbox; | 108 gpu::Mailbox mailbox; |
| 109 mailbox.name[0] = 51; | 109 mailbox.name[0] = 51; |
| 110 | 110 |
| 111 const unsigned sync_point = 7; | 111 const gpu::SyncToken sync_token(7); |
| 112 const unsigned target = GL_TEXTURE_2D; | 112 const unsigned target = GL_TEXTURE_2D; |
| 113 return media::VideoFrame::WrapNativeTexture( | 113 return media::VideoFrame::WrapNativeTexture( |
| 114 media::PIXEL_FORMAT_ARGB, | 114 media::PIXEL_FORMAT_ARGB, |
| 115 gpu::MailboxHolder(mailbox, target, sync_point), | 115 gpu::MailboxHolder(mailbox, sync_token, target), |
| 116 base::Bind(&ReleaseMailboxCB), | 116 base::Bind(&ReleaseMailboxCB), |
| 117 size, // coded_size | 117 size, // coded_size |
| 118 gfx::Rect(size), // visible_rect | 118 gfx::Rect(size), // visible_rect |
| 119 size, // natural_size | 119 size, // natural_size |
| 120 base::TimeDelta()); // timestamp | 120 base::TimeDelta()); // timestamp |
| 121 } | 121 } |
| 122 | 122 |
| 123 scoped_refptr<media::VideoFrame> CreateTestYUVHardareVideoFrame() { | 123 scoped_refptr<media::VideoFrame> CreateTestYUVHardareVideoFrame() { |
| 124 const int kDimension = 10; | 124 const int kDimension = 10; |
| 125 gfx::Size size(kDimension, kDimension); | 125 gfx::Size size(kDimension, kDimension); |
| 126 | 126 |
| 127 const int kPlanesNum = 3; | 127 const int kPlanesNum = 3; |
| 128 gpu::Mailbox mailbox[kPlanesNum]; | 128 gpu::Mailbox mailbox[kPlanesNum]; |
| 129 for (int i = 0; i < kPlanesNum; ++i) { | 129 for (int i = 0; i < kPlanesNum; ++i) { |
| 130 mailbox[i].name[0] = 50 + 1; | 130 mailbox[i].name[0] = 50 + 1; |
| 131 } | 131 } |
| 132 const unsigned sync_point = 7; | 132 const gpu::SyncToken sync_token(7); |
| 133 const unsigned target = GL_TEXTURE_RECTANGLE_ARB; | 133 const unsigned target = GL_TEXTURE_RECTANGLE_ARB; |
| 134 return media::VideoFrame::WrapYUV420NativeTextures( | 134 return media::VideoFrame::WrapYUV420NativeTextures( |
| 135 gpu::MailboxHolder(mailbox[media::VideoFrame::kYPlane], target, | 135 gpu::MailboxHolder(mailbox[media::VideoFrame::kYPlane], sync_token, |
| 136 sync_point), | 136 target), |
| 137 gpu::MailboxHolder(mailbox[media::VideoFrame::kUPlane], target, | 137 gpu::MailboxHolder(mailbox[media::VideoFrame::kUPlane], sync_token, |
| 138 sync_point), | 138 target), |
| 139 gpu::MailboxHolder(mailbox[media::VideoFrame::kVPlane], target, | 139 gpu::MailboxHolder(mailbox[media::VideoFrame::kVPlane], sync_token, |
| 140 sync_point), | 140 target), |
| 141 base::Bind(&ReleaseMailboxCB), | 141 base::Bind(&ReleaseMailboxCB), |
| 142 size, // coded_size | 142 size, // coded_size |
| 143 gfx::Rect(size), // visible_rect | 143 gfx::Rect(size), // visible_rect |
| 144 size, // natural_size | 144 size, // natural_size |
| 145 base::TimeDelta()); // timestamp | 145 base::TimeDelta()); // timestamp |
| 146 } | 146 } |
| 147 | 147 |
| 148 WebGraphicsContext3DUploadCounter* context3d_; | 148 WebGraphicsContext3DUploadCounter* context3d_; |
| 149 FakeOutputSurfaceClient client_; | 149 FakeOutputSurfaceClient client_; |
| 150 scoped_ptr<FakeOutputSurface> output_surface3d_; | 150 scoped_ptr<FakeOutputSurface> output_surface3d_; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 177 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 177 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
| 178 EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 178 EXPECT_EQ(size_t(3), resources.mailboxes.size()); |
| 179 EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 179 EXPECT_EQ(size_t(3), resources.release_callbacks.size()); |
| 180 EXPECT_EQ(size_t(0), resources.software_resources.size()); | 180 EXPECT_EQ(size_t(0), resources.software_resources.size()); |
| 181 // Expect exactly three texture uploads, one for each plane. | 181 // Expect exactly three texture uploads, one for each plane. |
| 182 EXPECT_EQ(3, context3d_->UploadCount()); | 182 EXPECT_EQ(3, context3d_->UploadCount()); |
| 183 | 183 |
| 184 // Simulate the ResourceProvider releasing the resources back to the video | 184 // Simulate the ResourceProvider releasing the resources back to the video |
| 185 // updater. | 185 // updater. |
| 186 for (ReleaseCallbackImpl& release_callback : resources.release_callbacks) | 186 for (ReleaseCallbackImpl& release_callback : resources.release_callbacks) |
| 187 release_callback.Run(0, false, nullptr); | 187 release_callback.Run(gpu::SyncToken(), false, nullptr); |
| 188 | 188 |
| 189 // Allocate resources for the same frame. | 189 // Allocate resources for the same frame. |
| 190 context3d_->ResetUploadCount(); | 190 context3d_->ResetUploadCount(); |
| 191 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 191 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
| 192 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 192 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
| 193 EXPECT_EQ(size_t(3), resources.mailboxes.size()); | 193 EXPECT_EQ(size_t(3), resources.mailboxes.size()); |
| 194 EXPECT_EQ(size_t(3), resources.release_callbacks.size()); | 194 EXPECT_EQ(size_t(3), resources.release_callbacks.size()); |
| 195 // The data should be reused so expect no texture uploads. | 195 // The data should be reused so expect no texture uploads. |
| 196 EXPECT_EQ(0, context3d_->UploadCount()); | 196 EXPECT_EQ(0, context3d_->UploadCount()); |
| 197 } | 197 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 243 updater.CreateExternalResourcesFromVideoFrame(video_frame); | 243 updater.CreateExternalResourcesFromVideoFrame(video_frame); |
| 244 EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 244 EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); |
| 245 EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 245 EXPECT_EQ(size_t(0), resources.mailboxes.size()); |
| 246 EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 246 EXPECT_EQ(size_t(0), resources.release_callbacks.size()); |
| 247 EXPECT_EQ(size_t(1), resources.software_resources.size()); | 247 EXPECT_EQ(size_t(1), resources.software_resources.size()); |
| 248 // Expect exactly one allocated shared bitmap. | 248 // Expect exactly one allocated shared bitmap. |
| 249 EXPECT_EQ(1, shared_bitmap_manager_->AllocationCount()); | 249 EXPECT_EQ(1, shared_bitmap_manager_->AllocationCount()); |
| 250 | 250 |
| 251 // Simulate the ResourceProvider releasing the resource back to the video | 251 // Simulate the ResourceProvider releasing the resource back to the video |
| 252 // updater. | 252 // updater. |
| 253 resources.software_release_callback.Run(0, false, nullptr); | 253 resources.software_release_callback.Run(gpu::SyncToken(), false, nullptr); |
| 254 | 254 |
| 255 // Allocate resources for the same frame. | 255 // Allocate resources for the same frame. |
| 256 shared_bitmap_manager_->ResetAllocationCount(); | 256 shared_bitmap_manager_->ResetAllocationCount(); |
| 257 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 257 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
| 258 EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); | 258 EXPECT_EQ(VideoFrameExternalResources::SOFTWARE_RESOURCE, resources.type); |
| 259 EXPECT_EQ(size_t(0), resources.mailboxes.size()); | 259 EXPECT_EQ(size_t(0), resources.mailboxes.size()); |
| 260 EXPECT_EQ(size_t(0), resources.release_callbacks.size()); | 260 EXPECT_EQ(size_t(0), resources.release_callbacks.size()); |
| 261 EXPECT_EQ(size_t(1), resources.software_resources.size()); | 261 EXPECT_EQ(size_t(1), resources.software_resources.size()); |
| 262 // The data should be reused so expect no new allocations. | 262 // The data should be reused so expect no new allocations. |
| 263 EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); | 263 EXPECT_EQ(0, shared_bitmap_manager_->AllocationCount()); |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 308 | 308 |
| 309 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); | 309 resources = updater.CreateExternalResourcesFromVideoFrame(video_frame); |
| 310 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); | 310 EXPECT_EQ(VideoFrameExternalResources::YUV_RESOURCE, resources.type); |
| 311 EXPECT_TRUE(resources.read_lock_fences_enabled); | 311 EXPECT_TRUE(resources.read_lock_fences_enabled); |
| 312 EXPECT_EQ(3u, resources.mailboxes.size()); | 312 EXPECT_EQ(3u, resources.mailboxes.size()); |
| 313 EXPECT_EQ(3u, resources.release_callbacks.size()); | 313 EXPECT_EQ(3u, resources.release_callbacks.size()); |
| 314 EXPECT_EQ(0u, resources.software_resources.size()); | 314 EXPECT_EQ(0u, resources.software_resources.size()); |
| 315 } | 315 } |
| 316 } // namespace | 316 } // namespace |
| 317 } // namespace cc | 317 } // namespace cc |
| OLD | NEW |