summaryrefslogtreecommitdiffstats
path: root/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
diff options
context:
space:
mode:
authorspang <spang@chromium.org>2015-04-17 09:12:20 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-17 16:12:55 +0000
commit742b4e2e806240e87de922590bd4889bf6a4383f (patch)
tree956b7d0c275db37d299329bf491c9540cd9504f2 /ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
parent767230290ce867242ef45b0b5a62a956014d0d3c (diff)
downloadchromium_src-742b4e2e806240e87de922590bd4889bf6a4383f.zip
chromium_src-742b4e2e806240e87de922590bd4889bf6a4383f.tar.gz
chromium_src-742b4e2e806240e87de922590bd4889bf6a4383f.tar.bz2
Revert of [ozone] Keep track of pending frames on drm_window when hardware display controller is disabled or … (patchset #8 id:120002 of https://codereview.chromium.org/1078183003/)
Reason for revert: May cause a GPU crash on boot. BUG=477761 Original issue's description: > [ozone] Keep track of pending frames on drm_window when hardware display controller is disabled or when in headless mode. > > When display controller is disabled, it used to stop tracking which buffer was the considered front. Surface would fast ack all incoming buffers without presenting them, which means that any one of them could be getting painted into while display controller is off. Upon wakeup, the controller would grab what it thought was the last front buffer, but in practice it was not because of the fast acks. Net result is that it may try to modeset with the buffer GL is painting into, making it hang on a fence in the driver. > > This patch removes all knowledge of front buffers from the display controller and explicitly sets it on the window, which tracks it while the controller is off. > > BUG=473831 > > Committed: https://crrev.com/b47c9f5fb6b669b27e055ab8b305309170849732 > Cr-Commit-Position: refs/heads/master@{#325326} TBR=dnicoara@chromium.org,alexst@chromium.org NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=473831 Review URL: https://codereview.chromium.org/1057413004 Cr-Commit-Position: refs/heads/master@{#325648}
Diffstat (limited to 'ui/ozone/platform/drm/gpu/gbm_surfaceless.cc')
-rw-r--r--ui/ozone/platform/drm/gpu/gbm_surfaceless.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
index c906cfd..138d207 100644
--- a/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
+++ b/ui/ozone/platform/drm/gpu/gbm_surfaceless.cc
@@ -34,13 +34,23 @@ bool GbmSurfaceless::ResizeNativeWindow(const gfx::Size& viewport_size) {
}
bool GbmSurfaceless::OnSwapBuffers() {
- return window_delegate_->SchedulePageFlip(true /* is_sync */,
- base::Bind(&base::DoNothing));
+ HardwareDisplayController* controller = window_delegate_->GetController();
+ if (!controller)
+ return true;
+
+ return controller->SchedulePageFlip(true /* is_sync */,
+ base::Bind(&base::DoNothing));
}
bool GbmSurfaceless::OnSwapBuffersAsync(
const SwapCompletionCallback& callback) {
- return window_delegate_->SchedulePageFlip(false /* is_sync */, callback);
+ HardwareDisplayController* controller = window_delegate_->GetController();
+ if (!controller) {
+ callback.Run();
+ return true;
+ }
+
+ return controller->SchedulePageFlip(false /* is_sync */, callback);
}
scoped_ptr<gfx::VSyncProvider> GbmSurfaceless::CreateVSyncProvider() {