[go: up one dir, main page]

ui/gl: Gracefully handle failue to initialize ASurfaceControl.

Creating an ASurfaceControl from an ANativeWindow may fail. Handle that
gracefully by propagating this failure from GLSurface::Initialize which
will make the browser retry with a new window.

R=​piman@chromium.org

(cherry picked from commit 28a9ea82b3c7023d2476b748f58027be8e859ba1)

Bug: 972667
Change-Id: Iad04043a0a2ff357157df0539f56af9d3522257b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1651486
Commit-Queue: Khushal <khushalsagar@chromium.org>
Commit-Queue: Antoine Labour <piman@chromium.org>
Auto-Submit: Khushal <khushalsagar@chromium.org>
Reviewed-by: Antoine Labour <piman@chromium.org>
Cr-Original-Commit-Position: refs/heads/master@{#667675}
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1653849
Reviewed-by: Khushal <khushalsagar@chromium.org>
Cr-Commit-Position: refs/branch-heads/3809@{#233}
Cr-Branched-From: d82dec1a818f378c464ba307ddd9c92133eac355-refs/heads/master@{#665002}
diff --git a/ui/gl/android/android_surface_control_compat.cc b/ui/gl/android/android_surface_control_compat.cc
index 8dadd57..7ad22f4 100644
--- a/ui/gl/android/android_surface_control_compat.cc
+++ b/ui/gl/android/android_surface_control_compat.cc
@@ -330,13 +330,15 @@
 SurfaceControl::Surface::Surface(const Surface& parent, const char* name) {
   surface_ = SurfaceControlMethods::Get().ASurfaceControl_createFn(
       parent.surface(), name);
-  DCHECK(surface_);
+  if (!surface_)
+    LOG(ERROR) << "Failed to create ASurfaceControl : " << name;
 }
 
 SurfaceControl::Surface::Surface(ANativeWindow* parent, const char* name) {
   surface_ = SurfaceControlMethods::Get().ASurfaceControl_createFromWindowFn(
       parent, name);
-  DCHECK(surface_);
+  if (!surface_)
+    LOG(ERROR) << "Failed to create ASurfaceControl : " << name;
 }
 
 SurfaceControl::Surface::~Surface() {
diff --git a/ui/gl/gl_surface_egl_surface_control.cc b/ui/gl/gl_surface_egl_surface_control.cc
index fe2be62..af1c77e 100644
--- a/ui/gl/gl_surface_egl_surface_control.cc
+++ b/ui/gl/gl_surface_egl_surface_control.cc
@@ -65,6 +65,9 @@
 }
 
 bool GLSurfaceEGLSurfaceControl::Initialize(GLSurfaceFormat format) {
+  if (!root_surface_->surface())
+    return false;
+
   format_ = format;
 
   // Surfaceless is always disabled on Android so we create a 1x1 pbuffer