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);