| 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 ce25072a410cf70fd06871d229080ed40da42573..99f0ae7016f9cafc6b49c4fc2605b804337dd009 100644
|
| --- a/ui/ozone/platform/dri/gbm_surface.cc
|
| +++ b/ui/ozone/platform/dri/gbm_surface.cc
|
| @@ -8,107 +8,13 @@
|
|
|
| #include "base/logging.h"
|
| #include "third_party/skia/include/core/SkImageInfo.h"
|
| +#include "ui/ozone/platform/dri/buffer_data.h"
|
| #include "ui/ozone/platform/dri/dri_buffer.h"
|
| #include "ui/ozone/platform/dri/dri_wrapper.h"
|
| -#include "ui/ozone/platform/dri/gbm_surface.h"
|
| #include "ui/ozone/platform/dri/hardware_display_controller.h"
|
|
|
| namespace ui {
|
|
|
| -namespace {
|
| -
|
| -// Pixel configuration for the current buffer format.
|
| -// TODO(dnicoara) These will need to change once we'll query the hardware for
|
| -// supported configurations.
|
| -const uint8_t kColorDepth = 24;
|
| -const uint8_t kPixelDepth = 32;
|
| -
|
| -class BufferData {
|
| - public:
|
| - // When we create the BufferData we need to register the buffer. Once
|
| - // successfully registered, the |framebuffer_| field will hold the ID of the
|
| - // buffer. The controller will use this ID when scanning out the buffer. On
|
| - // creation we will also associate the BufferData with the buffer.
|
| - static BufferData* CreateData(DriWrapper* dri, gbm_bo* buffer);
|
| -
|
| - // Callback used by GBM to destory the BufferData associated with a buffer.
|
| - static void Destroy(gbm_bo* buffer, void* data);
|
| -
|
| - // Returns the BufferData associated with |buffer|. NULL if no data is
|
| - // associated.
|
| - static BufferData* GetData(gbm_bo* buffer);
|
| -
|
| - uint32_t framebuffer() const { return framebuffer_; }
|
| - uint32_t handle() const { return handle_; }
|
| -
|
| - private:
|
| - BufferData(DriWrapper* dri, gbm_bo* buffer);
|
| - ~BufferData();
|
| -
|
| - DriWrapper* dri_;
|
| -
|
| - uint32_t handle_;
|
| -
|
| - // ID provided by the controller when the buffer is registered. This ID is
|
| - // used when scanning out the buffer.
|
| - uint32_t framebuffer_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(BufferData);
|
| -};
|
| -
|
| -BufferData::BufferData(DriWrapper* dri, gbm_bo* buffer)
|
| - : dri_(dri),
|
| - handle_(gbm_bo_get_handle(buffer).u32),
|
| - framebuffer_(0) {
|
| - // Register the buffer with the controller. This will allow us to scan out the
|
| - // buffer once we're done drawing into it. If we can't register the buffer
|
| - // then there's no point in having BufferData associated with it.
|
| - if (!dri_->AddFramebuffer(gbm_bo_get_width(buffer),
|
| - gbm_bo_get_height(buffer),
|
| - kColorDepth,
|
| - kPixelDepth,
|
| - gbm_bo_get_stride(buffer),
|
| - handle_,
|
| - &framebuffer_)) {
|
| - LOG(ERROR) << "Failed to register buffer";
|
| - }
|
| -}
|
| -
|
| -BufferData::~BufferData() {
|
| - if (framebuffer_)
|
| - dri_->RemoveFramebuffer(framebuffer_);
|
| -}
|
| -
|
| -// static
|
| -BufferData* BufferData::CreateData(DriWrapper* dri,
|
| - gbm_bo* buffer) {
|
| - BufferData* data = new BufferData(dri, buffer);
|
| - if (!data->framebuffer()) {
|
| - delete data;
|
| - return NULL;
|
| - }
|
| -
|
| - // GBM can destroy the buffers at any time as long as they aren't locked. This
|
| - // sets a callback such that we can clean up all our state when GBM destroys
|
| - // the buffer.
|
| - gbm_bo_set_user_data(buffer, data, BufferData::Destroy);
|
| -
|
| - return data;
|
| -}
|
| -
|
| -// static
|
| -void BufferData::Destroy(gbm_bo* buffer, void* data) {
|
| - BufferData* bd = static_cast<BufferData*>(data);
|
| - delete bd;
|
| -}
|
| -
|
| -// static
|
| -BufferData* BufferData::GetData(gbm_bo* buffer) {
|
| - return static_cast<BufferData*>(gbm_bo_get_user_data(buffer));
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| GbmSurface::GbmSurface(gbm_device* device,
|
| DriWrapper* dri,
|
| const gfx::Size& size)
|
|
|