hwc: Implement dump function

Does a basic implementation of the dump function
called by SurfaceFlinger in dumpsys.
Further logs in different areas can be added later on
using the dumpsys_log utility.

Change-Id: I2194b4ed7f10947272b7b824ef802ce2ee3c8a48
diff --git a/libhwcomposer/hwc.cpp b/libhwcomposer/hwc.cpp
index 20ac9a5..91d632f 100644
--- a/libhwcomposer/hwc.cpp
+++ b/libhwcomposer/hwc.cpp
@@ -451,6 +451,18 @@
     return 0;
 }
 
+void hwc_dump(struct hwc_composer_device_1* dev, char *buff, int buff_len)
+{
+    hwc_context_t* ctx = (hwc_context_t*)(dev);
+    android::String8 buf("");
+    dumpsys_log(buf, "Qualcomm HWC state:\n");
+    dumpsys_log(buf, "  MDPVersion=%d\n", ctx->mMDP.version);
+    dumpsys_log(buf, "  DisplayPanel=%c\n", ctx->mMDP.panel);
+    MDPComp::dump(buf);
+    //XXX: Call Other dump functions
+    strlcpy(buff, buf.string(), buff_len);
+}
+
 static int hwc_device_close(struct hw_device_t *dev)
 {
     if(!dev) {
@@ -487,7 +499,7 @@
         dev->device.blank               = hwc_blank;
         dev->device.query               = hwc_query;
         dev->device.registerProcs       = hwc_registerProcs;
-        dev->device.dump                = NULL;
+        dev->device.dump                = hwc_dump;
         dev->device.getDisplayConfigs   = hwc_getDisplayConfigs;
         dev->device.getDisplayAttributes = hwc_getDisplayAttributes;
         *device = &dev->device.common;
diff --git a/libhwcomposer/hwc_mdpcomp.cpp b/libhwcomposer/hwc_mdpcomp.cpp
index 8616719..4200be9 100644
--- a/libhwcomposer/hwc_mdpcomp.cpp
+++ b/libhwcomposer/hwc_mdpcomp.cpp
@@ -628,5 +628,15 @@
 
      return isMDPCompUsed;
 }
+
+void MDPComp::dump(android::String8& buf)
+{
+    dumpsys_log(buf, "  MDP Composition: ");
+    dumpsys_log(buf, "MDPCompState=%d\n", sMDPCompState);
+    //XXX: Log more info
+
+}
+
+
 }; //namespace
 
diff --git a/libhwcomposer/hwc_mdpcomp.h b/libhwcomposer/hwc_mdpcomp.h
index 2821f07..6ff6385 100644
--- a/libhwcomposer/hwc_mdpcomp.h
+++ b/libhwcomposer/hwc_mdpcomp.h
@@ -82,6 +82,8 @@
     /* draw */
     static bool draw(hwc_context_t *ctx, hwc_display_contents_1_t *list);
 
+    static void dump(android::String8& buf);
+
 private:
     /* set/reset flags for MDPComp */
     static void setMDPCompLayerFlags(hwc_context_t *ctx,
diff --git a/libhwcomposer/hwc_utils.cpp b/libhwcomposer/hwc_utils.cpp
index 14de02c..5747019 100644
--- a/libhwcomposer/hwc_utils.cpp
+++ b/libhwcomposer/hwc_utils.cpp
@@ -92,22 +92,15 @@
 
     pthread_mutex_destroy(&(ctx->vstate.lock));
     pthread_cond_destroy(&(ctx->vstate.cond));
-
 }
 
-void dumpLayer(hwc_layer_1_t const* l)
+
+void dumpsys_log(android::String8& buf, const char* fmt, ...)
 {
-    ALOGD("\ttype=%d, flags=%08x, handle=%p, tr=%02x, blend=%04x, {%d,%d,%d,%d}"
-          ", {%d,%d,%d,%d}",
-          l->compositionType, l->flags, l->handle, l->transform, l->blending,
-          l->sourceCrop.left,
-          l->sourceCrop.top,
-          l->sourceCrop.right,
-          l->sourceCrop.bottom,
-          l->displayFrame.left,
-          l->displayFrame.top,
-          l->displayFrame.right,
-          l->displayFrame.bottom);
+    va_list varargs;
+    va_start(varargs, fmt);
+    buf.appendFormatV(fmt, varargs);
+    va_end(varargs);
 }
 
 static inline bool isAlphaScaled(hwc_layer_1_t const* layer) {
diff --git a/libhwcomposer/hwc_utils.h b/libhwcomposer/hwc_utils.h
index a7de804..256b840 100644
--- a/libhwcomposer/hwc_utils.h
+++ b/libhwcomposer/hwc_utils.h
@@ -23,6 +23,7 @@
 #include <hardware/hwcomposer.h>
 #include <gr.h>
 #include <gralloc_priv.h>
+#include <utils/String8.h>
 
 #define ALIGN_TO(x, align)     (((x) + ((align)-1)) & ~((align)-1))
 #define LIKELY( exp )       (__builtin_expect( (exp) != 0, true  ))
@@ -125,6 +126,9 @@
 bool isSecuring(hwc_context_t* ctx);
 bool isExternalActive(hwc_context_t* ctx);
 
+//Helper function to dump logs
+void dumpsys_log(android::String8& buf, const char* fmt, ...);
+
 //Sync point impl.
 int hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy);