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

Side by Side Diff: ui/ozone/platform/drm/gpu/gbm_buffer.cc

Issue 1128113011: ozone: Introduce ClientPixmap and ClientPixmapFactory for non-GPU processes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: addressed nits Created 5 years, 4 months 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/ozone/platform/drm/gpu/gbm_buffer.h" 5 #include "ui/ozone/platform/drm/gpu/gbm_buffer.h"
6 6
7 #include <drm.h> 7 #include <drm.h>
8 #include <fcntl.h> 8 #include <fcntl.h>
9 #include <gbm.h> 9 #include <gbm.h>
10 #include <xf86drm.h> 10 #include <xf86drm.h>
11 11
12 #include "base/logging.h" 12 #include "base/logging.h"
13 #include "base/trace_event/trace_event.h" 13 #include "base/trace_event/trace_event.h"
14 #include "ui/gfx/geometry/size_conversions.h" 14 #include "ui/gfx/geometry/size_conversions.h"
15 #include "ui/ozone/platform/drm/gpu/drm_window.h" 15 #include "ui/ozone/platform/drm/gpu/drm_window.h"
16 #include "ui/ozone/platform/drm/gpu/gbm_device.h" 16 #include "ui/ozone/platform/drm/gpu/gbm_device.h"
17 17
18 namespace ui { 18 namespace ui {
19 19
20 namespace { 20 namespace {
21 21
22 int GetGbmFormatFromBufferFormat(SurfaceFactoryOzone::BufferFormat fmt) { 22 int GetGbmFormatFromNativePixmapFormat(NativePixmapFormat fmt) {
23 switch (fmt) { 23 switch (fmt) {
24 case SurfaceFactoryOzone::BGRA_8888: 24 case NATIVE_PIXMAP_FORMAT_BGRA_8888:
25 return GBM_BO_FORMAT_ARGB8888; 25 return GBM_BO_FORMAT_ARGB8888;
26 case SurfaceFactoryOzone::RGBX_8888: 26 case NATIVE_PIXMAP_FORMAT_RGBX_8888:
27 return GBM_BO_FORMAT_XRGB8888; 27 return GBM_BO_FORMAT_XRGB8888;
28 default: 28 default:
29 NOTREACHED(); 29 NOTREACHED();
30 return 0; 30 return 0;
31 } 31 }
32 } 32 }
33 33
34 } // namespace 34 } // namespace
35 35
36 GbmBuffer::GbmBuffer(const scoped_refptr<GbmDevice>& gbm, 36 GbmBuffer::GbmBuffer(const scoped_refptr<GbmDevice>& gbm,
37 gbm_bo* bo, 37 gbm_bo* bo,
38 bool scanout) 38 bool scanout)
39 : GbmBufferBase(gbm, bo, scanout) { 39 : GbmBufferBase(gbm, bo, scanout) {
40 } 40 }
41 41
42 GbmBuffer::~GbmBuffer() { 42 GbmBuffer::~GbmBuffer() {
43 if (bo()) 43 if (bo())
44 gbm_bo_destroy(bo()); 44 gbm_bo_destroy(bo());
45 } 45 }
46 46
47 // static 47 // static
48 scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer( 48 scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
49 const scoped_refptr<GbmDevice>& gbm, 49 const scoped_refptr<GbmDevice>& gbm,
50 SurfaceFactoryOzone::BufferFormat format, 50 NativePixmapFormat format,
51 const gfx::Size& size, 51 const gfx::Size& size,
52 SurfaceFactoryOzone::BufferUsage usage) { 52 NativePixmapUsage usage) {
53 TRACE_EVENT2("drm", "GbmBuffer::CreateBuffer", "device", 53 TRACE_EVENT2("drm", "GbmBuffer::CreateBuffer", "device",
54 gbm->device_path().value(), "size", size.ToString()); 54 gbm->device_path().value(), "size", size.ToString());
55 bool use_scanout = (usage == ui::SurfaceFactoryOzone::SCANOUT); 55 bool use_scanout = (usage == NATIVE_PIXMAP_USAGE_SCANOUT);
56 unsigned flags = GBM_BO_USE_RENDERING; 56 unsigned flags = GBM_BO_USE_RENDERING;
57 // GBM_BO_USE_SCANOUT is the hint of x-tiling.
57 if (use_scanout) 58 if (use_scanout)
58 flags |= GBM_BO_USE_SCANOUT; 59 flags |= GBM_BO_USE_SCANOUT;
59 gbm_bo* bo = gbm_bo_create(gbm->device(), size.width(), size.height(), 60 gbm_bo* bo = gbm_bo_create(gbm->device(), size.width(), size.height(),
60 GetGbmFormatFromBufferFormat(format), flags); 61 GetGbmFormatFromNativePixmapFormat(format), flags);
61 if (!bo) 62 if (!bo)
62 return NULL; 63 return NULL;
63 64
64 scoped_refptr<GbmBuffer> buffer(new GbmBuffer(gbm, bo, use_scanout)); 65 scoped_refptr<GbmBuffer> buffer(new GbmBuffer(gbm, bo, use_scanout));
65 if (use_scanout && !buffer->GetFramebufferId()) 66 if (use_scanout && !buffer->GetFramebufferId())
66 return NULL; 67 return NULL;
67 68
68 return buffer; 69 return buffer;
69 } 70 }
70 71
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 143
143 gfx::Size pixmap_size = buffer_->GetSize(); 144 gfx::Size pixmap_size = buffer_->GetSize();
144 // If the required size is not integer-sized, round it to the next integer. 145 // If the required size is not integer-sized, round it to the next integer.
145 *required_size = gfx::ToCeiledSize( 146 *required_size = gfx::ToCeiledSize(
146 gfx::SizeF(display_bounds.width() / crop_rect.width(), 147 gfx::SizeF(display_bounds.width() / crop_rect.width(),
147 display_bounds.height() / crop_rect.height())); 148 display_bounds.height() / crop_rect.height()));
148 return pixmap_size != *required_size; 149 return pixmap_size != *required_size;
149 } 150 }
150 151
151 } // namespace ui 152 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698