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

Unified Diff: ui/ozone/platform/drm/gpu/gbm_buffer.cc

Issue 1834643002: ozone: Avoid using gbm_bo_import until import and destroy can be synchronized. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: temporary removal of gbm_bo_import Created 4 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/ozone/platform/drm/gpu/gbm_buffer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/ozone/platform/drm/gpu/gbm_buffer.cc
diff --git a/ui/ozone/platform/drm/gpu/gbm_buffer.cc b/ui/ozone/platform/drm/gpu/gbm_buffer.cc
index 6fe1b6104a5fe7694bd460fd450b4d0c7c9ffe04..437ceabc0dc4fa262420956b03039ea50411254e 100644
--- a/ui/ozone/platform/drm/gpu/gbm_buffer.cc
+++ b/ui/ozone/platform/drm/gpu/gbm_buffer.cc
@@ -29,11 +29,13 @@ GbmBuffer::GbmBuffer(const scoped_refptr<GbmDevice>& gbm,
gbm_bo* bo,
gfx::BufferFormat format,
gfx::BufferUsage usage,
- base::ScopedFD fd)
+ base::ScopedFD fd,
+ int stride)
: GbmBufferBase(gbm, bo, format, usage),
format_(format),
usage_(usage),
- fd_(std::move(fd)) {}
+ fd_(std::move(fd)),
+ stride_(stride) {}
GbmBuffer::~GbmBuffer() {
if (bo())
@@ -45,7 +47,7 @@ int GbmBuffer::GetFd() const {
}
int GbmBuffer::GetStride() const {
- return gbm_bo_get_stride(bo());
+ return stride_;
}
// static
@@ -84,8 +86,8 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBuffer(
return nullptr;
}
- scoped_refptr<GbmBuffer> buffer(
- new GbmBuffer(gbm, bo, format, usage, std::move(fd)));
+ scoped_refptr<GbmBuffer> buffer(new GbmBuffer(
+ gbm, bo, format, usage, std::move(fd), gbm_bo_get_stride(bo)));
if (usage == gfx::BufferUsage::SCANOUT && !buffer->GetFramebufferId())
return nullptr;
@@ -102,36 +104,10 @@ scoped_refptr<GbmBuffer> GbmBuffer::CreateBufferFromFD(
TRACE_EVENT2("drm", "GbmBuffer::CreateBufferFromFD", "device",
gbm->device_path().value(), "size", size.ToString());
- struct gbm_import_fd_data fd_data;
- fd_data.fd = fd.get();
- fd_data.width = size.width();
- fd_data.height = size.height();
- fd_data.stride = stride;
- fd_data.format = GetFourCCFormatFromBufferFormat(format);
-
- // Use scanout if supported.
- const std::vector<uint32_t>& scanout_formats =
- gbm->plane_manager()->GetSupportedFormats();
- bool use_scanout = std::find(scanout_formats.begin(), scanout_formats.end(),
- fd_data.format) != scanout_formats.end();
- unsigned flags = 0;
- if (use_scanout)
- flags = GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING;
-
- // The fd passed to gbm_bo_import is not ref-counted and need to be
- // kept open for the lifetime of the buffer.
- gbm_bo* bo = gbm_bo_import(gbm->device(), GBM_BO_IMPORT_FD, &fd_data, flags);
- if (!bo)
- return nullptr;
-
- scoped_refptr<GbmBuffer> buffer(new GbmBuffer(
- gbm, bo, format,
- use_scanout ? gfx::BufferUsage::SCANOUT : gfx::BufferUsage::GPU_READ,
- std::move(fd)));
- if (use_scanout && !buffer->GetFramebufferId())
- return nullptr;
-
- return buffer;
+ // TODO(reveman): Use gbm_bo_import after making buffers survive
+ // GPU process crashes. crbug.com/597932
+ return make_scoped_refptr(new GbmBuffer(
+ gbm, nullptr, format, gfx::BufferUsage::GPU_READ, std::move(fd), stride));
}
GbmPixmap::GbmPixmap(GbmSurfaceFactory* surface_manager,
« no previous file with comments | « ui/ozone/platform/drm/gpu/gbm_buffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698