Commit fc50bc53 authored by Alex Ilin's avatar Alex Ilin Committed by Commit Bot

Refactor shared memory usage in blink::VEAEncoder

This CL replaces usage of deprecated base::SharedMemory with
base::UnsafeSharedMemoryRegion.

Also the CL removes media::GpuVideoAcceleratorFactories::CreateSharedMemory()
since it no longer used.

Bug: 849207
Change-Id: I6b9f2492e6e6ae5e41eb45c2268aa095cd91f49d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1916864Reviewed-by: default avatarThomas Guilbert <tguilbert@chromium.org>
Reviewed-by: default avatarMiguel Casas <mcasas@chromium.org>
Commit-Queue: Alex Ilin <alexilin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#715653}
parent c30a003c
...@@ -153,11 +153,6 @@ BrowserGpuVideoAcceleratorFactories::GpuMemoryBufferManager() { ...@@ -153,11 +153,6 @@ BrowserGpuVideoAcceleratorFactories::GpuMemoryBufferManager() {
return nullptr; return nullptr;
} }
std::unique_ptr<base::SharedMemory>
BrowserGpuVideoAcceleratorFactories::CreateSharedMemory(size_t size) {
return nullptr;
}
base::UnsafeSharedMemoryRegion base::UnsafeSharedMemoryRegion
BrowserGpuVideoAcceleratorFactories::CreateSharedMemoryRegion(size_t size) { BrowserGpuVideoAcceleratorFactories::CreateSharedMemoryRegion(size_t size) {
return {}; return {};
......
...@@ -48,7 +48,6 @@ class BrowserGpuVideoAcceleratorFactories ...@@ -48,7 +48,6 @@ class BrowserGpuVideoAcceleratorFactories
media::VideoPixelFormat pixel_format) override; media::VideoPixelFormat pixel_format) override;
gpu::SharedImageInterface* SharedImageInterface() override; gpu::SharedImageInterface* SharedImageInterface() override;
gpu::GpuMemoryBufferManager* GpuMemoryBufferManager() override; gpu::GpuMemoryBufferManager* GpuMemoryBufferManager() override;
std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override; base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override;
scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override; scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
media::VideoEncodeAccelerator::SupportedProfiles media::VideoEncodeAccelerator::SupportedProfiles
......
...@@ -369,15 +369,6 @@ GpuVideoAcceleratorFactoriesImpl::GpuMemoryBufferManager() { ...@@ -369,15 +369,6 @@ GpuVideoAcceleratorFactoriesImpl::GpuMemoryBufferManager() {
return gpu_memory_buffer_manager_; return gpu_memory_buffer_manager_;
} }
std::unique_ptr<base::SharedMemory>
GpuVideoAcceleratorFactoriesImpl::CreateSharedMemory(size_t size) {
std::unique_ptr<base::SharedMemory> mem(
ChildThreadImpl::AllocateSharedMemory(size));
if (mem && !mem->Map(size))
return nullptr;
return mem;
}
base::UnsafeSharedMemoryRegion base::UnsafeSharedMemoryRegion
GpuVideoAcceleratorFactoriesImpl::CreateSharedMemoryRegion(size_t size) { GpuVideoAcceleratorFactoriesImpl::CreateSharedMemoryRegion(size_t size) {
// If necessary, this call will make a synchronous request to a privileged // If necessary, this call will make a synchronous request to a privileged
......
...@@ -108,7 +108,6 @@ class CONTENT_EXPORT GpuVideoAcceleratorFactoriesImpl ...@@ -108,7 +108,6 @@ class CONTENT_EXPORT GpuVideoAcceleratorFactoriesImpl
// and this class will no longer be used, as it assumes a ContextProvider is // and this class will no longer be used, as it assumes a ContextProvider is
// present otherwise. // present otherwise.
void DestroyContext(); void DestroyContext();
std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override; base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override;
scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override; scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
namespace base { namespace base {
class SingleThreadTaskRunner; class SingleThreadTaskRunner;
class SharedMemory;
} // namespace base } // namespace base
namespace gfx { namespace gfx {
...@@ -125,10 +124,6 @@ class MEDIA_EXPORT GpuVideoAcceleratorFactories { ...@@ -125,10 +124,6 @@ class MEDIA_EXPORT GpuVideoAcceleratorFactories {
// ShouldUseGpuMemoryBuffersForVideoFrames return false. // ShouldUseGpuMemoryBuffersForVideoFrames return false.
virtual gpu::GpuMemoryBufferManager* GpuMemoryBufferManager() = 0; virtual gpu::GpuMemoryBufferManager* GpuMemoryBufferManager() = 0;
// Allocate & return a shared memory segment.
virtual std::unique_ptr<base::SharedMemory> CreateSharedMemory(
size_t size) = 0;
// Allocate & return an unsafe shared memory region // Allocate & return an unsafe shared memory region
virtual base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion( virtual base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(
size_t size) = 0; size_t size) = 0;
......
...@@ -115,14 +115,6 @@ MockGpuVideoAcceleratorFactories::CreateGpuMemoryBuffer( ...@@ -115,14 +115,6 @@ MockGpuVideoAcceleratorFactories::CreateGpuMemoryBuffer(
return ret; return ret;
} }
std::unique_ptr<base::SharedMemory>
MockGpuVideoAcceleratorFactories::CreateSharedMemory(size_t size) {
std::unique_ptr<base::SharedMemory> shared_memory(new base::SharedMemory);
if (shared_memory->CreateAndMapAnonymous(size))
return shared_memory;
return nullptr;
}
base::UnsafeSharedMemoryRegion base::UnsafeSharedMemoryRegion
MockGpuVideoAcceleratorFactories::CreateSharedMemoryRegion(size_t size) { MockGpuVideoAcceleratorFactories::CreateSharedMemoryRegion(size_t size) {
return base::UnsafeSharedMemoryRegion::Create(size); return base::UnsafeSharedMemoryRegion::Create(size);
......
...@@ -19,10 +19,6 @@ ...@@ -19,10 +19,6 @@
#include "services/viz/public/cpp/gpu/context_provider_command_buffer.h" #include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
namespace base {
class SharedMemory;
}
namespace media { namespace media {
class MockGpuVideoAcceleratorFactories : public GpuVideoAcceleratorFactories { class MockGpuVideoAcceleratorFactories : public GpuVideoAcceleratorFactories {
...@@ -80,8 +76,6 @@ class MockGpuVideoAcceleratorFactories : public GpuVideoAcceleratorFactories { ...@@ -80,8 +76,6 @@ class MockGpuVideoAcceleratorFactories : public GpuVideoAcceleratorFactories {
void SetGpuMemoryBuffersInUseByMacOSWindowServer(bool in_use); void SetGpuMemoryBuffersInUseByMacOSWindowServer(bool in_use);
std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
// Allocate & return a read-only shared memory region // Allocate & return a read-only shared memory region
base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override; base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override;
......
...@@ -53,6 +53,10 @@ scoped_refptr<VEAEncoder> VEAEncoder::Create( ...@@ -53,6 +53,10 @@ scoped_refptr<VEAEncoder> VEAEncoder::Create(
return encoder; return encoder;
} }
bool VEAEncoder::OutputBuffer::IsValid() {
return region.IsValid() && mapping.IsValid();
}
VEAEncoder::VEAEncoder( VEAEncoder::VEAEncoder(
const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback, const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
const VideoTrackRecorder::OnErrorCB& on_error_callback, const VideoTrackRecorder::OnErrorCB& on_error_callback,
...@@ -111,10 +115,12 @@ void VEAEncoder::RequireBitstreamBuffers(unsigned int /*input_count*/, ...@@ -111,10 +115,12 @@ void VEAEncoder::RequireBitstreamBuffers(unsigned int /*input_count*/,
base::queue<std::unique_ptr<InputBuffer>>().swap(input_buffers_); base::queue<std::unique_ptr<InputBuffer>>().swap(input_buffers_);
for (int i = 0; i < kVEAEncoderOutputBufferCount; ++i) { for (int i = 0; i < kVEAEncoderOutputBufferCount; ++i) {
std::unique_ptr<base::SharedMemory> shm = auto output_buffer = std::make_unique<OutputBuffer>();
gpu_factories_->CreateSharedMemory(output_buffer_size); output_buffer->region =
if (shm) gpu_factories_->CreateSharedMemoryRegion(output_buffer_size);
output_buffers_.push_back(base::WrapUnique(shm.release())); output_buffer->mapping = output_buffer->region.Map();
if (output_buffer->IsValid())
output_buffers_.push_back(std::move(output_buffer));
} }
for (size_t i = 0; i < output_buffers_.size(); ++i) for (size_t i = 0; i < output_buffers_.size(); ++i)
...@@ -134,11 +140,10 @@ void VEAEncoder::BitstreamBufferReady( ...@@ -134,11 +140,10 @@ void VEAEncoder::BitstreamBufferReady(
num_frames_after_keyframe_ = 0; num_frames_after_keyframe_ = 0;
} }
base::SharedMemory* output_buffer = OutputBuffer* output_buffer = output_buffers_[bitstream_buffer_id].get();
output_buffers_[bitstream_buffer_id].get(); base::span<char> data_span =
std::string data; output_buffer->mapping.GetMemoryAsSpan<char>(metadata.payload_size_bytes);
data.append(static_cast<char*>(output_buffer->memory()), std::string data(data_span.begin(), data_span.end());
metadata.payload_size_bytes);
const auto front_frame = frames_in_encode_.front(); const auto front_frame = frames_in_encode_.front();
frames_in_encode_.pop(); frames_in_encode_.pop();
...@@ -168,9 +173,9 @@ void VEAEncoder::UseOutputBitstreamBufferId(int32_t bitstream_buffer_id) { ...@@ -168,9 +173,9 @@ void VEAEncoder::UseOutputBitstreamBufferId(int32_t bitstream_buffer_id) {
DCHECK(encoding_task_runner_->BelongsToCurrentThread()); DCHECK(encoding_task_runner_->BelongsToCurrentThread());
video_encoder_->UseOutputBitstreamBuffer(media::BitstreamBuffer( video_encoder_->UseOutputBitstreamBuffer(media::BitstreamBuffer(
bitstream_buffer_id, output_buffers_[bitstream_buffer_id]->handle(), bitstream_buffer_id,
false /* read_only */, output_buffers_[bitstream_buffer_id]->region.Duplicate(),
output_buffers_[bitstream_buffer_id]->mapped_size())); output_buffers_[bitstream_buffer_id]->region.GetSize()));
} }
void VEAEncoder::FrameFinished(std::unique_ptr<InputBuffer> shm) { void VEAEncoder::FrameFinished(std::unique_ptr<InputBuffer> shm) {
......
...@@ -58,6 +58,13 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder, ...@@ -58,6 +58,13 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder,
base::WritableSharedMemoryMapping mapping; base::WritableSharedMemoryMapping mapping;
}; };
struct OutputBuffer {
base::UnsafeSharedMemoryRegion region;
base::WritableSharedMemoryMapping mapping;
bool IsValid();
};
VEAEncoder( VEAEncoder(
const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback, const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
const VideoTrackRecorder::OnErrorCB& on_error_callback, const VideoTrackRecorder::OnErrorCB& on_error_callback,
...@@ -87,7 +94,7 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder, ...@@ -87,7 +94,7 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder,
std::unique_ptr<media::VideoEncodeAccelerator> video_encoder_; std::unique_ptr<media::VideoEncodeAccelerator> video_encoder_;
// Shared memory buffers for output with the VEA. // Shared memory buffers for output with the VEA.
Vector<std::unique_ptr<base::SharedMemory>> output_buffers_; Vector<std::unique_ptr<OutputBuffer>> output_buffers_;
// Shared memory buffers for output with the VEA as FIFO. // Shared memory buffers for output with the VEA as FIFO.
// TODO(crbug.com/960665): Replace with a WTF equivalent. // TODO(crbug.com/960665): Replace with a WTF equivalent.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment