OSDN Git Service

Fix buffer creation check
authorKevin Strasser <kevin.strasser@intel.com>
Thu, 17 May 2018 23:10:09 +0000 (16:10 -0700)
committerKalyan Kondapally <kalyan.kondapally@intel.com>
Sat, 19 May 2018 18:19:07 +0000 (11:19 -0700)
We should be checking the result of the second CreateBuffer call,
otherwise this check is redundant. Also, taking the opportunity
to avoid binding handles in error paths.

Jira: GSE-1597
Test: Build and boot on Android

Signed-off-by: Kevin Strasser <kevin.strasser@intel.com>
common/compositor/nativesurface.cpp
common/compositor/nativesurface.h

index ce46700..5350ba2 100644 (file)
@@ -44,53 +44,50 @@ NativeSurface::~NativeSurface() {
 
 bool NativeSurface::Init(ResourceManager *resource_manager, uint32_t format,
                          uint32_t usage, uint64_t modifier,
-                         bool *modifer_succeeded) {
-  modifier_ = modifier;
+                         bool *modifier_succeeded) {
+  const NativeBufferHandler *handler =
+      resource_manager->GetNativeBufferHandler();
+  resource_manager_ = resource_manager;
+  HWCNativeHandle native_handle = 0;
+  *modifier_succeeded = false;
+  bool modifier_used = false;
+
   if (usage == hwcomposer::kLayerVideo) {
-    modifier_ = 0;
+    modifier = 0;
   }
 
-  bool modifier_used = false;
-  resource_manager->GetNativeBufferHandler()->CreateBuffer(
-      width_, height_, format, &native_handle_, usage, &modifier_used,
-      modifier_);
-  if (!native_handle_) {
-    ETRACE("NativeSurface: Failed to create buffer.");
+  handler->CreateBuffer(width_, height_, format, &native_handle, usage,
+                        &modifier_used, modifier);
+  if (!native_handle) {
+    ETRACE("Failed to create buffer\n");
     return false;
   }
 
-  if (!modifier_used) {
-    modifier_ = 0;
-    *modifer_succeeded = false;
-  }
-
-  resource_manager_ = resource_manager;
-  InitializeLayer(native_handle_);
+  InitializeLayer(native_handle);
 
-  if (modifier_ > 0) {
-    // Remove modifier, incase we tried modifier and FB creation failed.
-    if (!layer_.GetBuffer()->CreateFrameBufferWithModifier(modifier_)) {
-      ETRACE("FB Creation failed with Modifier, Removing modifier usage.");
-      *modifer_succeeded = false;
+  if (modifier_used && modifier > 0) {
+    if (!layer_.GetBuffer()->CreateFrameBufferWithModifier(modifier)) {
+      WTRACE("FB creation failed with modifier, removing modifier usage\n");
       ResourceHandle temp;
-      temp.handle_ = native_handle_;
+      temp.handle_ = native_handle;
       resource_manager_->MarkResourceForDeletion(temp, false);
+      native_handle = 0;
 
-      HWCNativeHandle native_handle;
-      resource_manager->GetNativeBufferHandler()->CreateBuffer(
-          width_, height_, format, &native_handle, usage, 0);
-      if (!native_handle_) {
-        ETRACE("NativeSurface: Failed to create buffer.");
+      handler->CreateBuffer(width_, height_, format, &native_handle, usage, 0);
+      if (!native_handle) {
+        ETRACE("Failed to create buffer\n");
         return false;
       }
 
-      native_handle_ = native_handle;
-      InitializeLayer(native_handle_);
+      InitializeLayer(native_handle);
     } else {
-      *modifer_succeeded = true;
+      *modifier_succeeded = true;
     }
   }
 
+  modifier_ = modifier;
+  native_handle_ = native_handle;
+
   return true;
 }
 
index 1dbaddb..687eea1 100644 (file)
@@ -43,7 +43,7 @@ class NativeSurface {
   virtual ~NativeSurface();
 
   bool Init(ResourceManager* resource_manager, uint32_t format, uint32_t usage,
-            uint64_t modifier, bool* modifer_succeeded);
+            uint64_t modifier, bool* modifier_succeeded);
 
   bool InitializeForOffScreenRendering(HWCNativeHandle native_handle,
                                        ResourceManager* resource_manager);