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

Unified Diff: ui/ozone/platform/dri/gbm_surface.cc

Issue 403043004: [Ozone-DRI] Remove unneeded wrappers (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 6 years, 5 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/dri/gbm_surface.h ('k') | ui/ozone/platform/dri/gbm_surface_factory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/ozone/platform/dri/gbm_surface.cc
diff --git a/ui/ozone/platform/dri/gbm_surface.cc b/ui/ozone/platform/dri/gbm_surface.cc
index 93cfe95dcb1e67c0529d5777b51ff2b7e3c32b2e..8fff07642a4718db3a56457bbfd4d683e5c72eb6 100644
--- a/ui/ozone/platform/dri/gbm_surface.cc
+++ b/ui/ozone/platform/dri/gbm_surface.cc
@@ -7,11 +7,9 @@
#include <gbm.h>
#include "base/logging.h"
-#include "third_party/skia/include/core/SkImageInfo.h"
#include "ui/ozone/platform/dri/dri_buffer.h"
#include "ui/ozone/platform/dri/dri_wrapper.h"
#include "ui/ozone/platform/dri/gbm_buffer_base.h"
-#include "ui/ozone/platform/dri/hardware_display_controller.h"
#include "ui/ozone/platform/dri/scanout_buffer.h"
namespace ui {
@@ -75,25 +73,19 @@ void GbmSurfaceBuffer::Destroy(gbm_bo* buffer, void* data) {
} // namespace
-GbmSurface::GbmSurface(gbm_device* device,
- DriWrapper* dri,
- const gfx::Size& size)
- : gbm_device_(device),
+GbmSurface::GbmSurface(
+ const base::WeakPtr<HardwareDisplayController>& controller,
+ gbm_device* device,
+ DriWrapper* dri)
+ : GbmSurfaceless(controller),
+ gbm_device_(device),
dri_(dri),
- size_(size),
native_surface_(NULL),
- buffers_(),
- front_buffer_(0) {
- for (size_t i = 0; i < arraysize(buffers_); ++i)
- buffers_[i] = NULL;
-}
+ current_buffer_(NULL) {}
GbmSurface::~GbmSurface() {
- for (size_t i = 0; i < arraysize(buffers_); ++i) {
- if (buffers_[i]) {
- gbm_surface_release_buffer(native_surface_, buffers_[i]->bo());
- }
- }
+ if (current_buffer_)
+ gbm_surface_release_buffer(native_surface_, current_buffer_);
if (native_surface_)
gbm_surface_destroy(native_surface_);
@@ -103,73 +95,51 @@ bool GbmSurface::Initialize() {
// TODO(dnicoara) Check underlying system support for pixel format.
native_surface_ = gbm_surface_create(
gbm_device_,
- size_.width(),
- size_.height(),
+ controller_->get_mode().hdisplay,
+ controller_->get_mode().vdisplay,
GBM_BO_FORMAT_XRGB8888,
GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
if (!native_surface_)
return false;
- dumb_buffer_ = new DriBuffer(dri_);
- if (!dumb_buffer_->Initialize(SkImageInfo::MakeN32Premul(size_.width(),
- size_.height())))
- return false;
-
return true;
}
-uint32_t GbmSurface::GetFramebufferId() const {
- if (!buffers_[front_buffer_ ^ 1])
- return dumb_buffer_->GetFramebufferId();
-
- return buffers_[front_buffer_ ^ 1]->GetFramebufferId();
+intptr_t GbmSurface::GetNativeWindow() {
+ CHECK(native_surface_);
+ return reinterpret_cast<intptr_t>(native_surface_);
}
-uint32_t GbmSurface::GetHandle() const {
- if (!buffers_[front_buffer_ ^ 1])
- return dumb_buffer_->GetHandle();
-
- return buffers_[front_buffer_ ^ 1]->GetHandle();
-}
+bool GbmSurface::OnSwapBuffers() {
+ CHECK(native_surface_);
-gfx::Size GbmSurface::Size() const {
- return size_;
-}
+ if (!controller_)
+ return false;
-// Before scheduling the backbuffer to be scanned out we need to "lock" it.
-// When we lock it, GBM will give a pointer to a buffer representing the
-// backbuffer. It will also update its information on which buffers can not be
-// used for drawing. The buffer will be released when the page flip event
-// occurs (see SwapBuffers). This is called from HardwareDisplayController
-// before scheduling a page flip.
-void GbmSurface::PreSwapBuffers() {
- CHECK(native_surface_);
- // Lock the buffer we want to display.
- gbm_bo* bo = gbm_surface_lock_front_buffer(native_surface_);
-
- buffers_[front_buffer_ ^ 1] = GbmSurfaceBuffer::GetBuffer(bo);
- // If it is a new buffer, it won't have any data associated with it. So we
- // create it. On creation it will associate itself with the buffer and
- // register the buffer.
- if (!buffers_[front_buffer_ ^ 1]) {
- buffers_[front_buffer_ ^ 1] = GbmSurfaceBuffer::CreateBuffer(dri_, bo);
- DCHECK(buffers_[front_buffer_ ^ 1])
- << "Failed to associate the buffer with the controller";
+ gbm_bo* pending_buffer = gbm_surface_lock_front_buffer(native_surface_);
+ scoped_refptr<GbmSurfaceBuffer> primary =
+ GbmSurfaceBuffer::GetBuffer(pending_buffer);
+ if (!primary) {
+ primary = GbmSurfaceBuffer::CreateBuffer(dri_, pending_buffer);
+ if (!primary) {
+ LOG(ERROR) << "Failed to associate the buffer with the controller";
+ return false;
+ }
}
-}
-void GbmSurface::SwapBuffers() {
- // If there was a frontbuffer, is no longer active. Release it back to GBM.
- if (buffers_[front_buffer_])
- gbm_surface_release_buffer(native_surface_, buffers_[front_buffer_]->bo());
-
- // Update the index to the frontbuffer.
- front_buffer_ ^= 1;
- // We've just released it. Since GBM doesn't guarantee we'll get the same
- // buffer back, we set it to NULL so we don't keep track of objects that may
- // have been destroyed.
- buffers_[front_buffer_ ^ 1] = NULL;
+ // The primary buffer is a special case.
+ queued_planes_.push_back(OverlayPlane(primary));
+
+ if (!GbmSurfaceless::OnSwapBuffers())
+ return false;
+
+ // If there was a frontbuffer, it is no longer active. Release it back to GBM.
+ if (current_buffer_)
+ gbm_surface_release_buffer(native_surface_, current_buffer_);
+
+ current_buffer_ = pending_buffer;
+ return true;
}
} // namespace ui
« no previous file with comments | « ui/ozone/platform/dri/gbm_surface.h ('k') | ui/ozone/platform/dri/gbm_surface_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698