Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(149)

Unified Diff: ui/gfx/ozone/impl/dri_skbitmap.cc

Issue 62953003: Support removal of DRI platform (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix use_ozone=0 Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gfx/ozone/impl/dri_skbitmap.h ('k') | ui/gfx/ozone/impl/dri_surface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/gfx/ozone/impl/dri_skbitmap.cc
diff --git a/ui/gfx/ozone/impl/dri_skbitmap.cc b/ui/gfx/ozone/impl/dri_skbitmap.cc
deleted file mode 100644
index b965c7384ef745b3bae046b61fe4d7cda08a5c5b..0000000000000000000000000000000000000000
--- a/ui/gfx/ozone/impl/dri_skbitmap.cc
+++ /dev/null
@@ -1,209 +0,0 @@
-// Copyright 2013 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/gfx/ozone/impl/dri_skbitmap.h"
-
-#include <errno.h>
-#include <sys/mman.h>
-#include <sys/types.h>
-#include <xf86drm.h>
-
-#include "base/compiler_specific.h"
-#include "base/logging.h"
-#include "third_party/skia/include/core/SkPixelRef.h"
-
-namespace gfx {
-
-namespace {
-
-void DestroyDumbBuffer(int fd, uint32_t handle) {
- struct drm_mode_destroy_dumb destroy_request;
- destroy_request.handle = handle;
- drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_request);
-}
-
-// Special DRM implementation of a SkPixelRef. The DRM allocator will create a
-// SkPixelRef for the backing pixels. It will then associate the SkPixelRef with
-// the SkBitmap. SkBitmap will access the allocated memory by locking the pixels
-// in the SkPixelRef.
-// At the end of its life the SkPixelRef is responsible for deallocating the
-// pixel memory.
-class DriSkPixelRef : public SkPixelRef {
- public:
- DriSkPixelRef(void* pixels,
- SkColorTable* color_table_,
- size_t size,
- int fd,
- uint32_t handle);
- virtual ~DriSkPixelRef();
-
- virtual void* onLockPixels(SkColorTable** ct) OVERRIDE;
- virtual void onUnlockPixels() OVERRIDE;
-
- SK_DECLARE_UNFLATTENABLE_OBJECT()
- private:
- // Raw pointer to the pixel memory.
- void* pixels_;
-
- // Optional color table associated with the pixel memory.
- SkColorTable* color_table_;
-
- // Size of the allocated memory.
- size_t size_;
-
- // File descriptor to the graphics card used to allocate/deallocate the
- // memory.
- int fd_;
-
- // Handle for the allocated memory.
- uint32_t handle_;
-
- DISALLOW_COPY_AND_ASSIGN(DriSkPixelRef);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// DriSkPixelRef implementation
-
-DriSkPixelRef::DriSkPixelRef(
- void* pixels,
- SkColorTable* color_table,
- size_t size,
- int fd,
- uint32_t handle)
- : pixels_(pixels),
- color_table_(color_table),
- size_(size),
- fd_(fd),
- handle_(handle) {
-}
-
-DriSkPixelRef::~DriSkPixelRef() {
- munmap(pixels_, size_);
- DestroyDumbBuffer(fd_, handle_);
-}
-
-void* DriSkPixelRef::onLockPixels(SkColorTable** ct) {
- *ct = color_table_;
- return pixels_;
-}
-
-void DriSkPixelRef::onUnlockPixels() {
-}
-
-} // namespace
-
-// Allocates pixel memory for a SkBitmap using DRM dumb buffers.
-class DriAllocator : public SkBitmap::Allocator {
- public:
- DriAllocator();
-
- virtual bool allocPixelRef(SkBitmap* bitmap,
- SkColorTable* color_table) OVERRIDE;
-
- private:
- bool AllocatePixels(DriSkBitmap* bitmap, SkColorTable* color_table);
-
- DISALLOW_COPY_AND_ASSIGN(DriAllocator);
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// DriAllocator implementation
-
-DriAllocator::DriAllocator() {
-}
-
-bool DriAllocator::allocPixelRef(SkBitmap* bitmap,
- SkColorTable* color_table) {
- return AllocatePixels(static_cast<DriSkBitmap*>(bitmap), color_table);
-}
-
-bool DriAllocator::AllocatePixels(DriSkBitmap* bitmap,
- SkColorTable* color_table) {
- struct drm_mode_create_dumb request;
- request.width = bitmap->width();
- request.height = bitmap->height();
- request.bpp = bitmap->bytesPerPixel() << 3;
- request.flags = 0;
-
- if (drmIoctl(bitmap->get_fd(), DRM_IOCTL_MODE_CREATE_DUMB, &request) < 0) {
- DLOG(ERROR) << "Cannot create dumb buffer (" << errno << ") "
- << strerror(errno);
- return false;
- }
-
- CHECK(request.size == bitmap->getSize());
-
- bitmap->set_handle(request.handle);
-
- struct drm_mode_map_dumb map_request;
- map_request.handle = bitmap->get_handle();
- if (drmIoctl(bitmap->get_fd(), DRM_IOCTL_MODE_MAP_DUMB, &map_request)) {
- DLOG(ERROR) << "Cannot prepare dumb buffer for mapping (" << errno << ") "
- << strerror(errno);
- DestroyDumbBuffer(bitmap->get_fd(), bitmap->get_handle());
- return false;
- }
-
- void* pixels = mmap(0,
- bitmap->getSize(),
- PROT_READ | PROT_WRITE,
- MAP_SHARED,
- bitmap->get_fd(),
- map_request.offset);
- if (pixels == MAP_FAILED) {
- DLOG(ERROR) << "Cannot mmap dumb buffer (" << errno << ") "
- << strerror(errno);
- DestroyDumbBuffer(bitmap->get_fd(), bitmap->get_handle());
- return false;
- }
-
- bitmap->setPixelRef(new DriSkPixelRef(
- pixels,
- color_table,
- bitmap->getSize(),
- bitmap->get_fd(),
- bitmap->get_handle()))->unref();
- bitmap->lockPixels();
-
- return true;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// DriSkBitmap implementation
-
-DriSkBitmap::DriSkBitmap(int fd)
- : fd_(fd),
- handle_(0),
- framebuffer_(0) {
-}
-
-DriSkBitmap::~DriSkBitmap() {
-}
-
-bool DriSkBitmap::Initialize() {
- DriAllocator drm_allocator;
- return allocPixels(&drm_allocator, NULL);
-}
-
-uint8_t DriSkBitmap::GetColorDepth() const {
- switch (config()) {
- case SkBitmap::kNo_Config:
- case SkBitmap::kA1_Config:
- case SkBitmap::kA8_Config:
- return 0;
- case SkBitmap::kIndex8_Config:
- return 8;
- case SkBitmap::kRGB_565_Config:
- return 16;
- case SkBitmap::kARGB_4444_Config:
- return 12;
- case SkBitmap::kARGB_8888_Config:
- return 24;
- default:
- NOTREACHED();
- return 0;
- }
-}
-
-} // namespace gfx
« no previous file with comments | « ui/gfx/ozone/impl/dri_skbitmap.h ('k') | ui/gfx/ozone/impl/dri_surface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698