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() {
return nullptr;
}
std::unique_ptr<base::SharedMemory>
BrowserGpuVideoAcceleratorFactories::CreateSharedMemory(size_t size) {
return nullptr;
}
base::UnsafeSharedMemoryRegion
BrowserGpuVideoAcceleratorFactories::CreateSharedMemoryRegion(size_t size) {
return {};
......
......@@ -48,7 +48,6 @@ class BrowserGpuVideoAcceleratorFactories
media::VideoPixelFormat pixel_format) override;
gpu::SharedImageInterface* SharedImageInterface() override;
gpu::GpuMemoryBufferManager* GpuMemoryBufferManager() override;
std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override;
scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
media::VideoEncodeAccelerator::SupportedProfiles
......
......@@ -369,15 +369,6 @@ GpuVideoAcceleratorFactoriesImpl::GpuMemoryBufferManager() {
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
GpuVideoAcceleratorFactoriesImpl::CreateSharedMemoryRegion(size_t size) {
// If necessary, this call will make a synchronous request to a privileged
......
......@@ -108,7 +108,6 @@ class CONTENT_EXPORT GpuVideoAcceleratorFactoriesImpl
// and this class will no longer be used, as it assumes a ContextProvider is
// present otherwise.
void DestroyContext();
std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override;
scoped_refptr<base::SingleThreadTaskRunner> GetTaskRunner() override;
......
......@@ -27,7 +27,6 @@
namespace base {
class SingleThreadTaskRunner;
class SharedMemory;
} // namespace base
namespace gfx {
......@@ -125,10 +124,6 @@ class MEDIA_EXPORT GpuVideoAcceleratorFactories {
// ShouldUseGpuMemoryBuffersForVideoFrames return false.
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
virtual base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(
size_t size) = 0;
......
......@@ -115,14 +115,6 @@ MockGpuVideoAcceleratorFactories::CreateGpuMemoryBuffer(
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
MockGpuVideoAcceleratorFactories::CreateSharedMemoryRegion(size_t size) {
return base::UnsafeSharedMemoryRegion::Create(size);
......
......@@ -19,10 +19,6 @@
#include "services/viz/public/cpp/gpu/context_provider_command_buffer.h"
#include "testing/gmock/include/gmock/gmock.h"
namespace base {
class SharedMemory;
}
namespace media {
class MockGpuVideoAcceleratorFactories : public GpuVideoAcceleratorFactories {
......@@ -80,8 +76,6 @@ class MockGpuVideoAcceleratorFactories : public GpuVideoAcceleratorFactories {
void SetGpuMemoryBuffersInUseByMacOSWindowServer(bool in_use);
std::unique_ptr<base::SharedMemory> CreateSharedMemory(size_t size) override;
// Allocate & return a read-only shared memory region
base::UnsafeSharedMemoryRegion CreateSharedMemoryRegion(size_t size) override;
......
......@@ -53,6 +53,10 @@ scoped_refptr<VEAEncoder> VEAEncoder::Create(
return encoder;
}
bool VEAEncoder::OutputBuffer::IsValid() {
return region.IsValid() && mapping.IsValid();
}
VEAEncoder::VEAEncoder(
const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
const VideoTrackRecorder::OnErrorCB& on_error_callback,
......@@ -111,10 +115,12 @@ void VEAEncoder::RequireBitstreamBuffers(unsigned int /*input_count*/,
base::queue<std::unique_ptr<InputBuffer>>().swap(input_buffers_);
for (int i = 0; i < kVEAEncoderOutputBufferCount; ++i) {
std::unique_ptr<base::SharedMemory> shm =
gpu_factories_->CreateSharedMemory(output_buffer_size);
if (shm)
output_buffers_.push_back(base::WrapUnique(shm.release()));
auto output_buffer = std::make_unique<OutputBuffer>();
output_buffer->region =
gpu_factories_->CreateSharedMemoryRegion(output_buffer_size);
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)
......@@ -134,11 +140,10 @@ void VEAEncoder::BitstreamBufferReady(
num_frames_after_keyframe_ = 0;
}
base::SharedMemory* output_buffer =
output_buffers_[bitstream_buffer_id].get();
std::string data;
data.append(static_cast<char*>(output_buffer->memory()),
metadata.payload_size_bytes);
OutputBuffer* output_buffer = output_buffers_[bitstream_buffer_id].get();
base::span<char> data_span =
output_buffer->mapping.GetMemoryAsSpan<char>(metadata.payload_size_bytes);
std::string data(data_span.begin(), data_span.end());
const auto front_frame = frames_in_encode_.front();
frames_in_encode_.pop();
......@@ -168,9 +173,9 @@ void VEAEncoder::UseOutputBitstreamBufferId(int32_t bitstream_buffer_id) {
DCHECK(encoding_task_runner_->BelongsToCurrentThread());
video_encoder_->UseOutputBitstreamBuffer(media::BitstreamBuffer(
bitstream_buffer_id, output_buffers_[bitstream_buffer_id]->handle(),
false /* read_only */,
output_buffers_[bitstream_buffer_id]->mapped_size()));
bitstream_buffer_id,
output_buffers_[bitstream_buffer_id]->region.Duplicate(),
output_buffers_[bitstream_buffer_id]->region.GetSize()));
}
void VEAEncoder::FrameFinished(std::unique_ptr<InputBuffer> shm) {
......
......@@ -58,6 +58,13 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder,
base::WritableSharedMemoryMapping mapping;
};
struct OutputBuffer {
base::UnsafeSharedMemoryRegion region;
base::WritableSharedMemoryMapping mapping;
bool IsValid();
};
VEAEncoder(
const VideoTrackRecorder::OnEncodedVideoCB& on_encoded_video_callback,
const VideoTrackRecorder::OnErrorCB& on_error_callback,
......@@ -87,7 +94,7 @@ class VEAEncoder final : public VideoTrackRecorder::Encoder,
std::unique_ptr<media::VideoEncodeAccelerator> video_encoder_;
// 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.
// 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