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

Side by Side Diff: ui/gfx/ozone/impl/dri_skbitmap.cc

Issue 49303002: [Ozone] Rename software implementation files to use Dri prefix (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix ifdef 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 unified diff | Download patch | Annotate | Revision Log
« 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 »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/gfx/ozone/impl/drm_skbitmap_ozone.h" 5 #include "ui/gfx/ozone/impl/dri_skbitmap.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <sys/mman.h> 8 #include <sys/mman.h>
9 #include <sys/types.h> 9 #include <sys/types.h>
10 #include <xf86drm.h> 10 #include <xf86drm.h>
11 11
12 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
13 #include "base/logging.h" 13 #include "base/logging.h"
14 #include "third_party/skia/include/core/SkPixelRef.h" 14 #include "third_party/skia/include/core/SkPixelRef.h"
15 15
16 namespace gfx { 16 namespace gfx {
17 17
18 namespace { 18 namespace {
19 19
20 void DestroyDumbBuffer(int fd, uint32_t handle) { 20 void DestroyDumbBuffer(int fd, uint32_t handle) {
21 struct drm_mode_destroy_dumb destroy_request; 21 struct drm_mode_destroy_dumb destroy_request;
22 destroy_request.handle = handle; 22 destroy_request.handle = handle;
23 drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_request); 23 drmIoctl(fd, DRM_IOCTL_MODE_DESTROY_DUMB, &destroy_request);
24 } 24 }
25 25
26 // Special DRM implementation of a SkPixelRef. The DRM allocator will create a 26 // Special DRM implementation of a SkPixelRef. The DRM allocator will create a
27 // SkPixelRef for the backing pixels. It will then associate the SkPixelRef with 27 // SkPixelRef for the backing pixels. It will then associate the SkPixelRef with
28 // the SkBitmap. SkBitmap will access the allocated memory by locking the pixels 28 // the SkBitmap. SkBitmap will access the allocated memory by locking the pixels
29 // in the SkPixelRef. 29 // in the SkPixelRef.
30 // At the end of its life the SkPixelRef is responsible for deallocating the 30 // At the end of its life the SkPixelRef is responsible for deallocating the
31 // pixel memory. 31 // pixel memory.
32 class DrmSkPixelRef : public SkPixelRef { 32 class DriSkPixelRef : public SkPixelRef {
33 public: 33 public:
34 DrmSkPixelRef(void* pixels, 34 DriSkPixelRef(void* pixels,
35 SkColorTable* color_table_, 35 SkColorTable* color_table_,
36 size_t size, 36 size_t size,
37 int fd, 37 int fd,
38 uint32_t handle); 38 uint32_t handle);
39 virtual ~DrmSkPixelRef(); 39 virtual ~DriSkPixelRef();
40 40
41 virtual void* onLockPixels(SkColorTable** ct) OVERRIDE; 41 virtual void* onLockPixels(SkColorTable** ct) OVERRIDE;
42 virtual void onUnlockPixels() OVERRIDE; 42 virtual void onUnlockPixels() OVERRIDE;
43 43
44 SK_DECLARE_UNFLATTENABLE_OBJECT() 44 SK_DECLARE_UNFLATTENABLE_OBJECT()
45 private: 45 private:
46 // Raw pointer to the pixel memory. 46 // Raw pointer to the pixel memory.
47 void* pixels_; 47 void* pixels_;
48 48
49 // Optional color table associated with the pixel memory. 49 // Optional color table associated with the pixel memory.
50 SkColorTable* color_table_; 50 SkColorTable* color_table_;
51 51
52 // Size of the allocated memory. 52 // Size of the allocated memory.
53 size_t size_; 53 size_t size_;
54 54
55 // File descriptor to the graphics card used to allocate/deallocate the 55 // File descriptor to the graphics card used to allocate/deallocate the
56 // memory. 56 // memory.
57 int fd_; 57 int fd_;
58 58
59 // Handle for the allocated memory. 59 // Handle for the allocated memory.
60 uint32_t handle_; 60 uint32_t handle_;
61 61
62 DISALLOW_COPY_AND_ASSIGN(DrmSkPixelRef); 62 DISALLOW_COPY_AND_ASSIGN(DriSkPixelRef);
63 }; 63 };
64 64
65 //////////////////////////////////////////////////////////////////////////////// 65 ////////////////////////////////////////////////////////////////////////////////
66 // DrmSkPixelRef implementation 66 // DriSkPixelRef implementation
67 67
68 DrmSkPixelRef::DrmSkPixelRef( 68 DriSkPixelRef::DriSkPixelRef(
69 void* pixels, 69 void* pixels,
70 SkColorTable* color_table, 70 SkColorTable* color_table,
71 size_t size, 71 size_t size,
72 int fd, 72 int fd,
73 uint32_t handle) 73 uint32_t handle)
74 : pixels_(pixels), 74 : pixels_(pixels),
75 color_table_(color_table), 75 color_table_(color_table),
76 size_(size), 76 size_(size),
77 fd_(fd), 77 fd_(fd),
78 handle_(handle) { 78 handle_(handle) {
79 } 79 }
80 80
81 DrmSkPixelRef::~DrmSkPixelRef() { 81 DriSkPixelRef::~DriSkPixelRef() {
82 munmap(pixels_, size_); 82 munmap(pixels_, size_);
83 DestroyDumbBuffer(fd_, handle_); 83 DestroyDumbBuffer(fd_, handle_);
84 } 84 }
85 85
86 void* DrmSkPixelRef::onLockPixels(SkColorTable** ct) { 86 void* DriSkPixelRef::onLockPixels(SkColorTable** ct) {
87 *ct = color_table_; 87 *ct = color_table_;
88 return pixels_; 88 return pixels_;
89 } 89 }
90 90
91 void DrmSkPixelRef::onUnlockPixels() { 91 void DriSkPixelRef::onUnlockPixels() {
92 } 92 }
93 93
94 } // namespace 94 } // namespace
95 95
96 // Allocates pixel memory for a SkBitmap using DRM dumb buffers. 96 // Allocates pixel memory for a SkBitmap using DRM dumb buffers.
97 class DrmAllocator : public SkBitmap::Allocator { 97 class DriAllocator : public SkBitmap::Allocator {
98 public: 98 public:
99 DrmAllocator(); 99 DriAllocator();
100 100
101 virtual bool allocPixelRef(SkBitmap* bitmap, 101 virtual bool allocPixelRef(SkBitmap* bitmap,
102 SkColorTable* color_table) OVERRIDE; 102 SkColorTable* color_table) OVERRIDE;
103 103
104 private: 104 private:
105 bool AllocatePixels(DrmSkBitmapOzone* bitmap, SkColorTable* color_table); 105 bool AllocatePixels(DriSkBitmap* bitmap, SkColorTable* color_table);
106 106
107 DISALLOW_COPY_AND_ASSIGN(DrmAllocator); 107 DISALLOW_COPY_AND_ASSIGN(DriAllocator);
108 }; 108 };
109 109
110 //////////////////////////////////////////////////////////////////////////////// 110 ////////////////////////////////////////////////////////////////////////////////
111 // DrmAllocator implementation 111 // DriAllocator implementation
112 112
113 DrmAllocator::DrmAllocator() { 113 DriAllocator::DriAllocator() {
114 } 114 }
115 115
116 bool DrmAllocator::allocPixelRef(SkBitmap* bitmap, 116 bool DriAllocator::allocPixelRef(SkBitmap* bitmap,
117 SkColorTable* color_table) { 117 SkColorTable* color_table) {
118 return AllocatePixels(static_cast<DrmSkBitmapOzone*>(bitmap), color_table); 118 return AllocatePixels(static_cast<DriSkBitmap*>(bitmap), color_table);
119 } 119 }
120 120
121 bool DrmAllocator::AllocatePixels(DrmSkBitmapOzone* bitmap, 121 bool DriAllocator::AllocatePixels(DriSkBitmap* bitmap,
122 SkColorTable* color_table) { 122 SkColorTable* color_table) {
123 struct drm_mode_create_dumb request; 123 struct drm_mode_create_dumb request;
124 request.width = bitmap->width(); 124 request.width = bitmap->width();
125 request.height = bitmap->height(); 125 request.height = bitmap->height();
126 request.bpp = bitmap->bytesPerPixel() << 3; 126 request.bpp = bitmap->bytesPerPixel() << 3;
127 request.flags = 0; 127 request.flags = 0;
128 128
129 if (drmIoctl(bitmap->get_fd(), DRM_IOCTL_MODE_CREATE_DUMB, &request) < 0) { 129 if (drmIoctl(bitmap->get_fd(), DRM_IOCTL_MODE_CREATE_DUMB, &request) < 0) {
130 DLOG(ERROR) << "Cannot create dumb buffer (" << errno << ") " 130 DLOG(ERROR) << "Cannot create dumb buffer (" << errno << ") "
131 << strerror(errno); 131 << strerror(errno);
(...skipping 19 matching lines...) Expand all
151 MAP_SHARED, 151 MAP_SHARED,
152 bitmap->get_fd(), 152 bitmap->get_fd(),
153 map_request.offset); 153 map_request.offset);
154 if (pixels == MAP_FAILED) { 154 if (pixels == MAP_FAILED) {
155 DLOG(ERROR) << "Cannot mmap dumb buffer (" << errno << ") " 155 DLOG(ERROR) << "Cannot mmap dumb buffer (" << errno << ") "
156 << strerror(errno); 156 << strerror(errno);
157 DestroyDumbBuffer(bitmap->get_fd(), bitmap->get_handle()); 157 DestroyDumbBuffer(bitmap->get_fd(), bitmap->get_handle());
158 return false; 158 return false;
159 } 159 }
160 160
161 bitmap->setPixelRef(new DrmSkPixelRef( 161 bitmap->setPixelRef(new DriSkPixelRef(
162 pixels, 162 pixels,
163 color_table, 163 color_table,
164 bitmap->getSize(), 164 bitmap->getSize(),
165 bitmap->get_fd(), 165 bitmap->get_fd(),
166 bitmap->get_handle()))->unref(); 166 bitmap->get_handle()))->unref();
167 bitmap->lockPixels(); 167 bitmap->lockPixels();
168 168
169 return true; 169 return true;
170 } 170 }
171 171
172 //////////////////////////////////////////////////////////////////////////////// 172 ////////////////////////////////////////////////////////////////////////////////
173 // DrmSkBitmapOzone implementation 173 // DriSkBitmap implementation
174 174
175 DrmSkBitmapOzone::DrmSkBitmapOzone(int fd) 175 DriSkBitmap::DriSkBitmap(int fd)
176 : fd_(fd), 176 : fd_(fd),
177 handle_(0), 177 handle_(0),
178 framebuffer_(0) { 178 framebuffer_(0) {
179 } 179 }
180 180
181 DrmSkBitmapOzone::~DrmSkBitmapOzone() { 181 DriSkBitmap::~DriSkBitmap() {
182 } 182 }
183 183
184 bool DrmSkBitmapOzone::Initialize() { 184 bool DriSkBitmap::Initialize() {
185 DrmAllocator drm_allocator; 185 DriAllocator drm_allocator;
186 return allocPixels(&drm_allocator, NULL); 186 return allocPixels(&drm_allocator, NULL);
187 } 187 }
188 188
189 uint8_t DrmSkBitmapOzone::GetColorDepth() const { 189 uint8_t DriSkBitmap::GetColorDepth() const {
190 switch (config()) { 190 switch (config()) {
191 case SkBitmap::kNo_Config: 191 case SkBitmap::kNo_Config:
192 case SkBitmap::kA1_Config: 192 case SkBitmap::kA1_Config:
193 case SkBitmap::kA8_Config: 193 case SkBitmap::kA8_Config:
194 return 0; 194 return 0;
195 case SkBitmap::kIndex8_Config: 195 case SkBitmap::kIndex8_Config:
196 return 8; 196 return 8;
197 case SkBitmap::kRGB_565_Config: 197 case SkBitmap::kRGB_565_Config:
198 return 16; 198 return 16;
199 case SkBitmap::kARGB_4444_Config: 199 case SkBitmap::kARGB_4444_Config:
200 return 12; 200 return 12;
201 case SkBitmap::kARGB_8888_Config: 201 case SkBitmap::kARGB_8888_Config:
202 return 24; 202 return 24;
203 default: 203 default:
204 NOTREACHED(); 204 NOTREACHED();
205 return 0; 205 return 0;
206 } 206 }
207 } 207 }
208 208
209 } // namespace gfx 209 } // namespace gfx
OLDNEW
« 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