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 |