diff options
author | dnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-29 03:01:45 +0000 |
---|---|---|
committer | dnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-07-29 03:01:45 +0000 |
commit | aab13e2fcbb74f3239d0e4e33e18ec51ea281438 (patch) | |
tree | b7d2190e8aa73e635f2c0ac4d19e5a52e0fc0cfc /ui/ozone | |
parent | 7454003bb10c38a92403a1215a3bf06df8780ad9 (diff) | |
download | chromium_src-aab13e2fcbb74f3239d0e4e33e18ec51ea281438.zip chromium_src-aab13e2fcbb74f3239d0e4e33e18ec51ea281438.tar.gz chromium_src-aab13e2fcbb74f3239d0e4e33e18ec51ea281438.tar.bz2 |
[Ozone GBM] Try reinitializing the native surface if native resizing fails
GBM does not support surface resizing. In this case we need to destroy the
surface and re-create it.
BUG=none
TEST=Ran GBM on link_freon and verified that changing modes works
Review URL: https://codereview.chromium.org/411083002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@286067 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/ozone')
-rw-r--r-- | ui/ozone/platform/dri/gbm_surface.cc | 9 | ||||
-rw-r--r-- | ui/ozone/platform/dri/gbm_surface.h | 3 | ||||
-rw-r--r-- | ui/ozone/platform/dri/hardware_display_controller.cc | 4 |
3 files changed, 15 insertions, 1 deletions
diff --git a/ui/ozone/platform/dri/gbm_surface.cc b/ui/ozone/platform/dri/gbm_surface.cc index 8fff076..c51b5ad 100644 --- a/ui/ozone/platform/dri/gbm_surface.cc +++ b/ui/ozone/platform/dri/gbm_surface.cc @@ -103,6 +103,8 @@ bool GbmSurface::Initialize() { if (!native_surface_) return false; + size_.SetSize(controller_->get_mode().hdisplay, + controller_->get_mode().vdisplay); return true; } @@ -111,6 +113,13 @@ intptr_t GbmSurface::GetNativeWindow() { return reinterpret_cast<intptr_t>(native_surface_); } +bool GbmSurface::ResizeNativeWindow(const gfx::Size& viewport_size) { + if (size_ == viewport_size) + return true; + + return false; +} + bool GbmSurface::OnSwapBuffers() { CHECK(native_surface_); diff --git a/ui/ozone/platform/dri/gbm_surface.h b/ui/ozone/platform/dri/gbm_surface.h index bffc4a8..03e5d63 100644 --- a/ui/ozone/platform/dri/gbm_surface.h +++ b/ui/ozone/platform/dri/gbm_surface.h @@ -35,6 +35,7 @@ class GbmSurface : public GbmSurfaceless { // GbmSurfaceless: virtual intptr_t GetNativeWindow() OVERRIDE; + virtual bool ResizeNativeWindow(const gfx::Size& viewport_size) OVERRIDE; virtual bool OnSwapBuffers() OVERRIDE; private: @@ -48,6 +49,8 @@ class GbmSurface : public GbmSurfaceless { // Buffer currently used for scanout. gbm_bo* current_buffer_; + gfx::Size size_; + DISALLOW_COPY_AND_ASSIGN(GbmSurface); }; diff --git a/ui/ozone/platform/dri/hardware_display_controller.cc b/ui/ozone/platform/dri/hardware_display_controller.cc index 8a2a722..6973d9c 100644 --- a/ui/ozone/platform/dri/hardware_display_controller.cc +++ b/ui/ozone/platform/dri/hardware_display_controller.cc @@ -141,7 +141,9 @@ bool HardwareDisplayController::SchedulePageFlip( if (!is_disabled_ && !drm_->PageFlip(crtc_id_, primary.buffer->GetFramebufferId(), this)) { - LOG(ERROR) << "Cannot page flip: " << strerror(errno); + LOG(ERROR) << "Cannot page flip: error='" << strerror(errno) << "'" + << " crtc=" << crtc_id_ + << " framebuffer=" << primary.buffer->GetFramebufferId(); return false; } |