summaryrefslogtreecommitdiffstats
path: root/ui/ozone
diff options
context:
space:
mode:
authordnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-29 03:01:45 +0000
committerdnicoara@chromium.org <dnicoara@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-29 03:01:45 +0000
commitaab13e2fcbb74f3239d0e4e33e18ec51ea281438 (patch)
treeb7d2190e8aa73e635f2c0ac4d19e5a52e0fc0cfc /ui/ozone
parent7454003bb10c38a92403a1215a3bf06df8780ad9 (diff)
downloadchromium_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.cc9
-rw-r--r--ui/ozone/platform/dri/gbm_surface.h3
-rw-r--r--ui/ozone/platform/dri/hardware_display_controller.cc4
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;
}