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

Side by Side Diff: components/exo/wayland/clients/client_base.cc

Issue 2846203002: exo: no-roundtrip dmabuf import (Closed)
Patch Set: Created 3 years, 7 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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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 "components/exo/wayland/clients/client_base.h" 5 #include "components/exo/wayland/clients/client_base.h"
6 6
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <linux-dmabuf-unstable-v1-client-protocol.h> 8 #include <linux-dmabuf-unstable-v1-client-protocol.h>
9 #include <presentation-time-client-protocol.h> 9 #include <presentation-time-client-protocol.h>
10 #include <wayland-client-core.h> 10 #include <wayland-client-core.h>
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 50
51 // Specifies if the background should be transparent. 51 // Specifies if the background should be transparent.
52 const char kTransparentBackground[] = "transparent-background"; 52 const char kTransparentBackground[] = "transparent-background";
53 53
54 // Use drm buffer instead of shared memory. 54 // Use drm buffer instead of shared memory.
55 const char kUseDrm[] = "use-drm"; 55 const char kUseDrm[] = "use-drm";
56 56
57 // Specifies if client should be fullscreen. 57 // Specifies if client should be fullscreen.
58 const char kFullscreen[] = "fullscreen"; 58 const char kFullscreen[] = "fullscreen";
59 59
60 // Specifies if no-roundtrip dmabuf import path should be used.
61 const char kNoRoundtripImport[] = "no-roundtrip-import";
reveman 2017/04/28 17:21:24 No need for this flag. Please refactor the code so
62
60 } // namespace switches 63 } // namespace switches
61 64
62 namespace { 65 namespace {
63 66
64 // Buffer format. 67 // Buffer format.
65 const int32_t kShmFormat = WL_SHM_FORMAT_ARGB8888; 68 const int32_t kShmFormat = WL_SHM_FORMAT_ARGB8888;
66 const SkColorType kColorType = kBGRA_8888_SkColorType; 69 const SkColorType kColorType = kBGRA_8888_SkColorType;
67 #if defined(OZONE_PLATFORM_GBM) 70 #if defined(OZONE_PLATFORM_GBM)
68 const GrPixelConfig kGrPixelConfig = kBGRA_8888_GrPixelConfig; 71 const GrPixelConfig kGrPixelConfig = kBGRA_8888_GrPixelConfig;
69 #endif 72 #endif
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 return false; 170 return false;
168 } 171 }
169 172
170 use_drm = command_line.HasSwitch(switches::kUseDrm); 173 use_drm = command_line.HasSwitch(switches::kUseDrm);
171 if (use_drm) 174 if (use_drm)
172 use_drm_value = command_line.GetSwitchValueASCII(switches::kUseDrm); 175 use_drm_value = command_line.GetSwitchValueASCII(switches::kUseDrm);
173 176
174 fullscreen = command_line.HasSwitch(switches::kFullscreen); 177 fullscreen = command_line.HasSwitch(switches::kFullscreen);
175 transparent_background = 178 transparent_background =
176 command_line.HasSwitch(switches::kTransparentBackground); 179 command_line.HasSwitch(switches::kTransparentBackground);
180 immed = command_line.HasSwitch(switches::kNoRoundtripImport);
177 return true; 181 return true;
178 } 182 }
179 183
180 //////////////////////////////////////////////////////////////////////////////// 184 ////////////////////////////////////////////////////////////////////////////////
181 // ClientBase::Globals, public: 185 // ClientBase::Globals, public:
182 186
183 ClientBase::Globals::Globals() {} 187 ClientBase::Globals::Globals() {}
184 188
185 ClientBase::Globals::~Globals() {} 189 ClientBase::Globals::~Globals() {}
186 190
187 //////////////////////////////////////////////////////////////////////////////// 191 ////////////////////////////////////////////////////////////////////////////////
188 // ClientBase::Buffer, public: 192 // ClientBase::Buffer, public:
189 193
190 ClientBase::Buffer::Buffer() {} 194 ClientBase::Buffer::Buffer() {}
191 195
192 ClientBase::Buffer::~Buffer() {} 196 ClientBase::Buffer::~Buffer() {}
193 197
194 //////////////////////////////////////////////////////////////////////////////// 198 ////////////////////////////////////////////////////////////////////////////////
195 // ClientBase, public: 199 // ClientBase, public:
196 200
197 bool ClientBase::Init(const InitParams& params) { 201 bool ClientBase::Init(const InitParams& params) {
198 width_ = params.width; 202 width_ = params.width;
199 height_ = params.height; 203 height_ = params.height;
200 scale_ = params.scale; 204 scale_ = params.scale;
201 fullscreen_ = params.fullscreen; 205 fullscreen_ = params.fullscreen;
202 transparent_background_ = params.transparent_background; 206 transparent_background_ = params.transparent_background;
207 immed_ = params.immed;
203 208
204 display_.reset(wl_display_connect(nullptr)); 209 display_.reset(wl_display_connect(nullptr));
205 if (!display_) { 210 if (!display_) {
206 LOG(ERROR) << "wl_display_connect failed"; 211 LOG(ERROR) << "wl_display_connect failed";
207 return false; 212 return false;
208 } 213 }
209 wl_registry* registry = wl_display_get_registry(display_.get()); 214 wl_registry* registry = wl_display_get_registry(display_.get());
210 wl_registry_add_listener(registry, &g_registry_listener, &globals_); 215 wl_registry_add_listener(registry, &g_registry_listener, &globals_);
211 216
212 wl_display_roundtrip(display_.get()); 217 wl_display_roundtrip(display_.get());
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 #endif 311 #endif
307 for (size_t i = 0; i < params.num_buffers; ++i) { 312 for (size_t i = 0; i < params.num_buffers; ++i) {
308 auto buffer = CreateBuffer(params.drm_format); 313 auto buffer = CreateBuffer(params.drm_format);
309 if (!buffer) { 314 if (!buffer) {
310 LOG(ERROR) << "Failed to create buffer"; 315 LOG(ERROR) << "Failed to create buffer";
311 return false; 316 return false;
312 } 317 }
313 buffers_.push_back(std::move(buffer)); 318 buffers_.push_back(std::move(buffer));
314 } 319 }
315 320
316 wl_display_roundtrip(display_.get()); 321 if (!immed_)
322 wl_display_roundtrip(display_.get());
317 for (size_t i = 0; i < buffers_.size(); ++i) { 323 for (size_t i = 0; i < buffers_.size(); ++i) {
318 if (!buffers_[i]->buffer) { 324 if (!buffers_[i]->buffer) {
319 LOG(ERROR) << "LinuxBufferParamsCreated was not called on the buffer."; 325 LOG(ERROR) << "LinuxBufferParamsCreated was not called on the buffer.";
320 return false; 326 return false;
321 } 327 }
322 328
323 wl_buffer_add_listener(buffers_[i]->buffer.get(), &g_buffer_listener, 329 wl_buffer_add_listener(buffers_[i]->buffer.get(), &g_buffer_listener,
324 buffers_[i].get()); 330 buffers_[i].get());
325 } 331 }
326 332
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 zwp_linux_dmabuf_v1_create_params(globals_.linux_dmabuf.get())); 396 zwp_linux_dmabuf_v1_create_params(globals_.linux_dmabuf.get()));
391 zwp_linux_buffer_params_v1_add_listener(buffer->params.get(), 397 zwp_linux_buffer_params_v1_add_listener(buffer->params.get(),
392 &g_params_listener, buffer.get()); 398 &g_params_listener, buffer.get());
393 for (size_t i = 0; i < gbm_bo_get_num_planes(buffer->bo.get()); ++i) { 399 for (size_t i = 0; i < gbm_bo_get_num_planes(buffer->bo.get()); ++i) {
394 base::ScopedFD fd(gbm_bo_get_plane_fd(buffer->bo.get(), i)); 400 base::ScopedFD fd(gbm_bo_get_plane_fd(buffer->bo.get(), i));
395 uint32_t stride = gbm_bo_get_plane_stride(buffer->bo.get(), i); 401 uint32_t stride = gbm_bo_get_plane_stride(buffer->bo.get(), i);
396 uint32_t offset = gbm_bo_get_plane_offset(buffer->bo.get(), i); 402 uint32_t offset = gbm_bo_get_plane_offset(buffer->bo.get(), i);
397 zwp_linux_buffer_params_v1_add(buffer->params.get(), fd.get(), i, offset, 403 zwp_linux_buffer_params_v1_add(buffer->params.get(), fd.get(), i, offset,
398 stride, 0, 0); 404 stride, 0, 0);
399 } 405 }
400 zwp_linux_buffer_params_v1_create(buffer->params.get(), width_, height_, 406 if (immed_)
401 drm_format, 0); 407 buffer->buffer.reset(zwp_linux_buffer_params_v1_create_immed(
408 buffer->params.get(), width_, height_, drm_format, 0));
409 else
410 zwp_linux_buffer_params_v1_create(buffer->params.get(), width_, height_,
411 drm_format, 0);
402 412
403 if (gbm_bo_get_num_planes(buffer->bo.get()) != 1) 413 if (gbm_bo_get_num_planes(buffer->bo.get()) != 1)
404 return buffer; 414 return buffer;
405 415
406 EGLint khr_image_attrs[] = {EGL_DMA_BUF_PLANE0_FD_EXT, 416 EGLint khr_image_attrs[] = {EGL_DMA_BUF_PLANE0_FD_EXT,
407 fd.get(), 417 fd.get(),
408 EGL_WIDTH, 418 EGL_WIDTH,
409 width_, 419 width_,
410 EGL_HEIGHT, 420 EGL_HEIGHT,
411 height_, 421 height_,
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
464 buffer->sk_surface = SkSurface::MakeRasterDirect( 474 buffer->sk_surface = SkSurface::MakeRasterDirect(
465 SkImageInfo::Make(width_, height_, kColorType, kOpaque_SkAlphaType), 475 SkImageInfo::Make(width_, height_, kColorType, kOpaque_SkAlphaType),
466 static_cast<uint8_t*>(buffer->shared_memory->memory()), stride); 476 static_cast<uint8_t*>(buffer->shared_memory->memory()), stride);
467 DCHECK(buffer->sk_surface); 477 DCHECK(buffer->sk_surface);
468 return buffer; 478 return buffer;
469 } 479 }
470 480
471 } // namespace clients 481 } // namespace clients
472 } // namespace wayland 482 } // namespace wayland
473 } // namespace exo 483 } // namespace exo
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698