| Index: ui/gl/gl_image_shared_memory.cc
|
| diff --git a/ui/gl/gl_image_shared_memory.cc b/ui/gl/gl_image_shared_memory.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..7c578ba8baaf4b9f646e15ea37c47c770fa54ba7
|
| --- /dev/null
|
| +++ b/ui/gl/gl_image_shared_memory.cc
|
| @@ -0,0 +1,58 @@
|
| +// 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 "ui/gl/gl_image_shared_memory.h"
|
| +
|
| +#include "base/logging.h"
|
| +#include "base/process/process_handle.h"
|
| +
|
| +namespace gfx {
|
| +
|
| +GLImageSharedMemory::GLImageSharedMemory(const gfx::Size& size,
|
| + unsigned internalformat)
|
| + : GLImageMemory(size, internalformat) {
|
| +}
|
| +
|
| +GLImageSharedMemory::~GLImageSharedMemory() {
|
| + Destroy();
|
| +}
|
| +
|
| +bool GLImageSharedMemory::Initialize(const gfx::GpuMemoryBufferHandle& handle) {
|
| + if (!HasValidFormat())
|
| + return false;
|
| +
|
| + if (!base::SharedMemory::IsHandleValid(handle.handle))
|
| + return false;
|
| +
|
| + base::SharedMemory shared_memory(handle.handle, true);
|
| +
|
| + // Duplicate the handle.
|
| + base::SharedMemoryHandle duped_shared_memory_handle;
|
| + if (!shared_memory.ShareToProcess(base::GetCurrentProcessHandle(),
|
| + &duped_shared_memory_handle)) {
|
| + DVLOG(0) << "Failed to duplicate shared memory handle.";
|
| + return false;
|
| + }
|
| +
|
| + scoped_ptr<base::SharedMemory> duped_shared_memory(
|
| + new base::SharedMemory(duped_shared_memory_handle, true));
|
| +
|
| + if (!duped_shared_memory->Map(Bytes())) {
|
| + DVLOG(0) << "Failed to map shared memory.";
|
| + return false;
|
| + }
|
| +
|
| + DCHECK(!shared_memory_);
|
| + shared_memory_ = duped_shared_memory.Pass();
|
| + GLImageMemory::Initialize(
|
| + static_cast<unsigned char*>(shared_memory_->memory()));
|
| + return true;
|
| +}
|
| +
|
| +void GLImageSharedMemory::Destroy() {
|
| + GLImageMemory::Destroy();
|
| + shared_memory_.reset();
|
| +}
|
| +
|
| +} // namespace gfx
|
|
|