| Index: ui/ozone/platform/drm/gpu/drm_console_buffer.cc
|
| diff --git a/ui/ozone/platform/drm/gpu/drm_console_buffer.cc b/ui/ozone/platform/drm/gpu/drm_console_buffer.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..464c380526972f8ba79e940e33b921d26e427104
|
| --- /dev/null
|
| +++ b/ui/ozone/platform/drm/gpu/drm_console_buffer.cc
|
| @@ -0,0 +1,55 @@
|
| +// 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/ozone/platform/drm/gpu/drm_console_buffer.h"
|
| +
|
| +#include <sys/mman.h>
|
| +#include <xf86drmMode.h>
|
| +
|
| +#include "third_party/skia/include/core/SkCanvas.h"
|
| +#include "ui/ozone/platform/drm/common/scoped_drm_types.h"
|
| +#include "ui/ozone/platform/drm/gpu/drm_device.h"
|
| +
|
| +namespace ui {
|
| +
|
| +DrmConsoleBuffer::DrmConsoleBuffer(const scoped_refptr<DrmDevice>& drm,
|
| + uint32_t framebuffer)
|
| + : drm_(drm), framebuffer_(framebuffer) {
|
| +}
|
| +
|
| +DrmConsoleBuffer::~DrmConsoleBuffer() {
|
| + if (mmap_base_)
|
| + if (munmap(mmap_base_, mmap_size_))
|
| + PLOG(ERROR) << "munmap";
|
| +
|
| + if (handle_ && !drm_->CloseBufferHandle(handle_))
|
| + PLOG(ERROR) << "DrmConsoleBuffer: CloseBufferHandle: handle " << handle_;
|
| +}
|
| +
|
| +bool DrmConsoleBuffer::Initialize() {
|
| + ScopedDrmFramebufferPtr fb(drm_->GetFramebuffer(framebuffer_));
|
| +
|
| + if (!fb)
|
| + return false;
|
| +
|
| + handle_ = fb->handle;
|
| + stride_ = fb->pitch;
|
| + SkImageInfo info = SkImageInfo::MakeN32Premul(fb->width, fb->height);
|
| +
|
| + mmap_size_ = info.getSafeSize(stride_);
|
| +
|
| + if (!drm_->MapDumbBuffer(fb->handle, mmap_size_, &mmap_base_)) {
|
| + mmap_base_ = NULL;
|
| + return false;
|
| + }
|
| +
|
| + surface_ =
|
| + skia::AdoptRef(SkSurface::NewRasterDirect(info, mmap_base_, stride_));
|
| + if (!surface_)
|
| + return false;
|
| +
|
| + return true;
|
| +}
|
| +
|
| +} // namespace ui
|
|
|