| Index: content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
|
| diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc b/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
|
| deleted file mode 100644
|
| index 83781ae85539be2771d936f23c80f0eee940baaf..0000000000000000000000000000000000000000
|
| --- a/content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.cc
|
| +++ /dev/null
|
| @@ -1,224 +0,0 @@
|
| -// Copyright 2014 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 "content/common/gpu/client/gpu_memory_buffer_impl_shared_memory.h"
|
| -
|
| -#include <stdint.h>
|
| -#include <utility>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/numerics/safe_math.h"
|
| -#include "base/process/memory.h"
|
| -#include "ui/gfx/buffer_format_util.h"
|
| -#include "ui/gl/gl_bindings.h"
|
| -
|
| -namespace content {
|
| -namespace {
|
| -
|
| -void Noop() {}
|
| -
|
| -} // namespace
|
| -
|
| -GpuMemoryBufferImplSharedMemory::GpuMemoryBufferImplSharedMemory(
|
| - gfx::GpuMemoryBufferId id,
|
| - const gfx::Size& size,
|
| - gfx::BufferFormat format,
|
| - const DestructionCallback& callback,
|
| - scoped_ptr<base::SharedMemory> shared_memory,
|
| - size_t offset,
|
| - int stride)
|
| - : GpuMemoryBufferImpl(id, size, format, callback),
|
| - shared_memory_(std::move(shared_memory)),
|
| - offset_(offset),
|
| - stride_(stride) {
|
| - DCHECK(IsSizeValidForFormat(size, format));
|
| -}
|
| -
|
| -GpuMemoryBufferImplSharedMemory::~GpuMemoryBufferImplSharedMemory() {
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<GpuMemoryBufferImplSharedMemory>
|
| -GpuMemoryBufferImplSharedMemory::Create(gfx::GpuMemoryBufferId id,
|
| - const gfx::Size& size,
|
| - gfx::BufferFormat format,
|
| - const DestructionCallback& callback) {
|
| - size_t buffer_size = 0u;
|
| - if (!gfx::BufferSizeForBufferFormatChecked(size, format, &buffer_size))
|
| - return nullptr;
|
| -
|
| - scoped_ptr<base::SharedMemory> shared_memory(new base::SharedMemory());
|
| - if (!shared_memory->CreateAndMapAnonymous(buffer_size))
|
| - return nullptr;
|
| -
|
| - return make_scoped_ptr(new GpuMemoryBufferImplSharedMemory(
|
| - id, size, format, callback, std::move(shared_memory), 0,
|
| - gfx::RowSizeForBufferFormat(size.width(), format, 0)));
|
| -}
|
| -
|
| -// static
|
| -gfx::GpuMemoryBufferHandle
|
| -GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(
|
| - gfx::GpuMemoryBufferId id,
|
| - const gfx::Size& size,
|
| - gfx::BufferFormat format,
|
| - base::ProcessHandle child_process) {
|
| - size_t buffer_size = 0u;
|
| - if (!gfx::BufferSizeForBufferFormatChecked(size, format, &buffer_size))
|
| - return gfx::GpuMemoryBufferHandle();
|
| -
|
| - base::SharedMemory shared_memory;
|
| - if (!shared_memory.CreateAnonymous(buffer_size))
|
| - return gfx::GpuMemoryBufferHandle();
|
| -
|
| - gfx::GpuMemoryBufferHandle handle;
|
| - handle.type = gfx::SHARED_MEMORY_BUFFER;
|
| - handle.id = id;
|
| - handle.offset = 0;
|
| - handle.stride = static_cast<int32_t>(
|
| - gfx::RowSizeForBufferFormat(size.width(), format, 0));
|
| - shared_memory.GiveToProcess(child_process, &handle.handle);
|
| - return handle;
|
| -}
|
| -
|
| -// static
|
| -scoped_ptr<GpuMemoryBufferImplSharedMemory>
|
| -GpuMemoryBufferImplSharedMemory::CreateFromHandle(
|
| - const gfx::GpuMemoryBufferHandle& handle,
|
| - const gfx::Size& size,
|
| - gfx::BufferFormat format,
|
| - gfx::BufferUsage usage,
|
| - const DestructionCallback& callback) {
|
| - DCHECK(base::SharedMemory::IsHandleValid(handle.handle));
|
| -
|
| - return make_scoped_ptr(new GpuMemoryBufferImplSharedMemory(
|
| - handle.id, size, format, callback,
|
| - make_scoped_ptr(new base::SharedMemory(handle.handle, false)),
|
| - handle.offset, handle.stride));
|
| -}
|
| -
|
| -// static
|
| -bool GpuMemoryBufferImplSharedMemory::IsUsageSupported(gfx::BufferUsage usage) {
|
| - switch (usage) {
|
| - case gfx::BufferUsage::GPU_READ:
|
| - case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE:
|
| - case gfx::BufferUsage::GPU_READ_CPU_READ_WRITE_PERSISTENT:
|
| - return true;
|
| - case gfx::BufferUsage::SCANOUT:
|
| - return false;
|
| - }
|
| - NOTREACHED();
|
| - return false;
|
| -}
|
| -
|
| -// static
|
| -bool GpuMemoryBufferImplSharedMemory::IsConfigurationSupported(
|
| - gfx::BufferFormat format,
|
| - gfx::BufferUsage usage) {
|
| - return IsUsageSupported(usage);
|
| -}
|
| -
|
| -// static
|
| -bool GpuMemoryBufferImplSharedMemory::IsSizeValidForFormat(
|
| - const gfx::Size& size,
|
| - gfx::BufferFormat format) {
|
| - switch (format) {
|
| - case gfx::BufferFormat::ATC:
|
| - case gfx::BufferFormat::ATCIA:
|
| - case gfx::BufferFormat::DXT1:
|
| - case gfx::BufferFormat::DXT5:
|
| - case gfx::BufferFormat::ETC1:
|
| - // Compressed images must have a width and height that's evenly divisible
|
| - // by the block size.
|
| - return size.width() % 4 == 0 && size.height() % 4 == 0;
|
| - case gfx::BufferFormat::R_8:
|
| - case gfx::BufferFormat::RGBA_4444:
|
| - case gfx::BufferFormat::RGBA_8888:
|
| - case gfx::BufferFormat::RGBX_8888:
|
| - case gfx::BufferFormat::BGRA_8888:
|
| - case gfx::BufferFormat::BGRX_8888:
|
| - return true;
|
| - case gfx::BufferFormat::YUV_420:
|
| - case gfx::BufferFormat::YUV_420_BIPLANAR: {
|
| - size_t num_planes = gfx::NumberOfPlanesForBufferFormat(format);
|
| - for (size_t i = 0; i < num_planes; ++i) {
|
| - size_t factor = gfx::SubsamplingFactorForBufferFormat(format, i);
|
| - if (size.width() % factor || size.height() % factor)
|
| - return false;
|
| - }
|
| - return true;
|
| - }
|
| - case gfx::BufferFormat::UYVY_422:
|
| - return size.width() % 2 == 0;
|
| - }
|
| -
|
| - NOTREACHED();
|
| - return false;
|
| -}
|
| -
|
| -// static
|
| -base::Closure GpuMemoryBufferImplSharedMemory::AllocateForTesting(
|
| - const gfx::Size& size,
|
| - gfx::BufferFormat format,
|
| - gfx::BufferUsage usage,
|
| - gfx::GpuMemoryBufferHandle* handle) {
|
| - base::SharedMemory shared_memory;
|
| - bool rv = shared_memory.CreateAnonymous(
|
| - gfx::BufferSizeForBufferFormat(size, format));
|
| - DCHECK(rv);
|
| - handle->type = gfx::SHARED_MEMORY_BUFFER;
|
| - handle->offset = 0;
|
| - handle->stride = static_cast<int32_t>(
|
| - gfx::RowSizeForBufferFormat(size.width(), format, 0));
|
| - handle->handle = base::SharedMemory::DuplicateHandle(shared_memory.handle());
|
| - return base::Bind(&Noop);
|
| -}
|
| -
|
| -bool GpuMemoryBufferImplSharedMemory::Map() {
|
| - DCHECK(!mapped_);
|
| -
|
| - // Map the buffer first time Map() is called then keep it mapped for the
|
| - // lifetime of the buffer. This avoids mapping the buffer unless necessary.
|
| - if (!shared_memory_->memory()) {
|
| - DCHECK_EQ(static_cast<size_t>(stride_),
|
| - gfx::RowSizeForBufferFormat(size_.width(), format_, 0));
|
| - size_t buffer_size = gfx::BufferSizeForBufferFormat(size_, format_);
|
| - // Note: offset_ != 0 is not common use-case. To keep it simple we
|
| - // map offset + buffer_size here but this can be avoided using MapAt().
|
| - size_t map_size = offset_ + buffer_size;
|
| - if (!shared_memory_->Map(map_size))
|
| - base::TerminateBecauseOutOfMemory(map_size);
|
| - }
|
| - mapped_ = true;
|
| - return true;
|
| -}
|
| -
|
| -void* GpuMemoryBufferImplSharedMemory::memory(size_t plane) {
|
| - DCHECK(mapped_);
|
| - DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format_));
|
| - return reinterpret_cast<uint8_t*>(shared_memory_->memory()) + offset_ +
|
| - gfx::BufferOffsetForBufferFormat(size_, format_, plane);
|
| -}
|
| -
|
| -void GpuMemoryBufferImplSharedMemory::Unmap() {
|
| - DCHECK(mapped_);
|
| - mapped_ = false;
|
| -}
|
| -
|
| -int GpuMemoryBufferImplSharedMemory::stride(size_t plane) const {
|
| - DCHECK_LT(plane, gfx::NumberOfPlanesForBufferFormat(format_));
|
| - return gfx::RowSizeForBufferFormat(size_.width(), format_, plane);
|
| -}
|
| -
|
| -gfx::GpuMemoryBufferHandle GpuMemoryBufferImplSharedMemory::GetHandle() const {
|
| - gfx::GpuMemoryBufferHandle handle;
|
| - handle.type = gfx::SHARED_MEMORY_BUFFER;
|
| - handle.id = id_;
|
| - handle.offset = offset_;
|
| - handle.stride = stride_;
|
| - handle.handle = shared_memory_->handle();
|
| - return handle;
|
| -}
|
| -
|
| -} // namespace content
|
|
|