hwc/overlay/hdmi: Fix / enable some error messages.
Fix cases where some errors are really warnings/info.
Print one-time events like HDMI connect disconnect as info logs.
Print the error string and type on MSMFB_OVERLAY_PREPARE failure.
An ENODEV from driver corresponds to a pipe not available and should
be treated as a warning. This could happen if a previous UNSET is
pending due to a missed vsync. ENODEV should be treated as fatal
only if it is seen continuously representing a book-keeping
blunder.
Change-Id: I730d4ac7db84c287f47805b9c74792c90cfadc6c
diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index fd3bb69..54e7c25 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -752,7 +752,7 @@
bool isVirtualDisplay = (disp == HWC_DISPLAY_VIRTUAL);
// If hotpluggable or virtual displays are inactive return error
if ((hotPluggable || isVirtualDisplay) && !ctx->dpyAttr[disp].connected) {
- ALOGE("%s display (%d) is inactive", __FUNCTION__, disp);
+ ALOGW("%s display (%d) is not connected anymore", __FUNCTION__, disp);
return -EINVAL;
}
diff --git a/libhwcomposer/hwc_copybit.cpp b/libhwcomposer/hwc_copybit.cpp
index 38c0810..546a67b 100644
--- a/libhwcomposer/hwc_copybit.cpp
+++ b/libhwcomposer/hwc_copybit.cpp
@@ -216,8 +216,13 @@
return false;
}
- if (mEngine == NULL || !(validateParams(ctx, list))) {
- ALOGE("%s: Invalid Params", __FUNCTION__);
+ if (mEngine == NULL) {
+ ALOGW("%s: Copybit HAL not enabled", __FUNCTION__);
+ return false;
+ }
+
+ if (!(validateParams(ctx, list))) {
+ ALOGE("%s: validateParams() failed", __FUNCTION__);
return false;
}
PtorInfo* ptorInfo = &(ctx->mPtorInfo);
diff --git a/libhwcomposer/hwc_uevents.cpp b/libhwcomposer/hwc_uevents.cpp
index d1c68a5..79d0302 100644
--- a/libhwcomposer/hwc_uevents.cpp
+++ b/libhwcomposer/hwc_uevents.cpp
@@ -121,8 +121,7 @@
/* We need to send hotplug to SF only when we are disconnecting
* HDMI as an external display. */
if(dpy == HWC_DISPLAY_EXTERNAL) {
- ALOGE_IF(UEVENT_DEBUG,"%s:Sending EXTERNAL OFFLINE hotplug"
- "event", __FUNCTION__);
+ ALOGI("%s: Sending EXTERNAL OFFLINE event", __FUNCTION__);
ctx->proc->hotplug(ctx->proc, dpy, EXTERNAL_OFFLINE);
}
break;
@@ -193,14 +192,13 @@
ctx->mDrawLock.unlock();
/* External display is HDMI */
- ALOGE_IF(UEVENT_DEBUG, "%s: Sending EXTERNAL ONLINE"
- "hotplug event", __FUNCTION__);
+ ALOGI("%s: Sending EXTERNAL ONLINE event", __FUNCTION__);
ctx->proc->hotplug(ctx->proc, dpy, EXTERNAL_ONLINE);
break;
}
default:
{
- ALOGE("%s: Invalid state to swtich:%d", __FUNCTION__, switch_state);
+ ALOGE("%s: Invalid state to switch:%d", __FUNCTION__, switch_state);
break;
}
}
diff --git a/liboverlay/overlayMdp.cpp b/liboverlay/overlayMdp.cpp
index 3932c4c..1290f32 100644
--- a/liboverlay/overlayMdp.cpp
+++ b/liboverlay/overlayMdp.cpp
@@ -374,8 +374,21 @@
if(errVal) {
/* No dump for failure due to insufficient resource */
if(errVal != E2BIG) {
- mdp_wrapper::dump("Bad ov dump: ",
- *list.overlay_list[list.processed_overlays]);
+ //ENODEV is returned when the driver cannot satisfy a pipe request.
+ //This could happen if previous round's UNSET hasn't been commited
+ //yet, either because of a missed vsync or because of difference in
+ //vsyncs of primary and external. This is expected during
+ //transition scenarios, but should be considered fatal if seen
+ //continuously.
+ if(errVal == ENODEV) {
+ ALOGW("%s: Pipe unavailable. Likely previous UNSET pending. "
+ "Fatal if seen continuously.", __FUNCTION__);
+ } else {
+ ALOGE("%s failed, error %d: %s", __FUNCTION__, errVal,
+ strerror(errVal));
+ mdp_wrapper::dump("Bad ov dump: ",
+ *list.overlay_list[list.processed_overlays]);
+ }
}
return false;
}