summaryrefslogtreecommitdiff
path: root/libhwc2.1/ExynosHWCDebug.cpp
diff options
context:
space:
mode:
authorWiwit Rifa'i <wiwitrifai@google.com>2022-04-20 14:37:15 +0800
committerWiwit Rifa'i <wiwitrifai@google.com>2022-04-22 16:19:56 +0800
commit9fc11892fd11b094bc757c4029183a3f29034e14 (patch)
tree40e2f078ac31fc626665ad588a1faf81b66f9c24 /libhwc2.1/ExynosHWCDebug.cpp
parentef71aecbee6ab58447d4d111018263dff3d5672c (diff)
libhwc2.1: refine fence tracer log
Bug: 221767691 Test: logcat Test: vndservice call Exynos.HWCService 11 i32 0 i32 308 i32 1 Change-Id: I940479e04181a140f1891f725e2e2647b0b0e6c5
Diffstat (limited to 'libhwc2.1/ExynosHWCDebug.cpp')
-rw-r--r--libhwc2.1/ExynosHWCDebug.cpp99
1 files changed, 17 insertions, 82 deletions
diff --git a/libhwc2.1/ExynosHWCDebug.cpp b/libhwc2.1/ExynosHWCDebug.cpp
index 982a54d..bbf676c 100644
--- a/libhwc2.1/ExynosHWCDebug.cpp
+++ b/libhwc2.1/ExynosHWCDebug.cpp
@@ -50,23 +50,14 @@ int32_t saveErrorLog(const String8 &errString, ExynosDisplay *display)
String8 saveString;
struct timeval tv;
- struct tm* localTime;
gettimeofday(&tv, NULL);
- localTime = (struct tm*)localtime((time_t*)&tv.tv_sec);
if (display != NULL) {
- saveString.appendFormat("%02d-%02d %02d:%02d:%02d.%03lu(%lu) %s %" PRIu64 ": %s\n",
- localTime->tm_mon+1, localTime->tm_mday,
- localTime->tm_hour, localTime->tm_min,
- localTime->tm_sec, tv.tv_usec/1000, ((tv.tv_sec * 1000) + (tv.tv_usec / 1000)),
- display->mDisplayName.string(), display->mErrorFrameCount,
- errString.string());
+ saveString.appendFormat("%s %s %" PRIu64 ": %s\n", getLocalTimeStr(tv).string(),
+ display->mDisplayName.string(), display->mErrorFrameCount,
+ errString.string());
} else {
- saveString.appendFormat("%02d-%02d %02d:%02d:%02d.%03lu(%lu) : %s\n",
- localTime->tm_mon+1, localTime->tm_mday,
- localTime->tm_hour, localTime->tm_min,
- localTime->tm_sec, tv.tv_usec/1000, ((tv.tv_sec * 1000) + (tv.tv_usec / 1000)),
- errString.string());
+ saveString.appendFormat("%s : %s\n", getLocalTimeStr(tv).string(), errString.string());
}
if (pFile != NULL) {
@@ -105,80 +96,24 @@ int32_t saveFenceTrace(ExynosDisplay *display) {
return -1;
}
+ ExynosDevice *device = display->mDevice;
+
String8 saveString;
- struct timeval tv;
- ExynosDevice *device = display->mDevice;
+ struct timeval tv;
+ gettimeofday(&tv, NULL);
+ saveString.appendFormat("\n====== Fences at time:%s ======\n", getLocalTimeStr(tv).string());
if (device != NULL) {
- for (const auto &[i, info] : device->mFenceInfos) {
-#if 0
- bool sysFdOpen = false;
-
- // FIXME: sync_fence_info and sync_pt_info are deprecated
- // HWC guys should fix this
- struct sync_pt_info* pt_info = NULL;
- info.sync_data = sync_fence_info(i);
- if (info.sync_data != NULL) {
- pt_info = sync_pt_info(info.sync_data, pt_info);
- if (pt_info !=NULL) {
- saveString.appendFormat("\n-- FD sys : %d\n", i);
- saveString.appendFormat("real name : %s, status : %s, pt_obj : %s, pt_drv : %s, time : %llu",
- info.sync_data->name, info.sync_data->status==1 ? "Active":"Signaled",
- pt_info->obj_name, pt_info->driver_name, static_cast<unsigned long long>(pt_info->timestamp_ns));
- } else {
- saveString.appendFormat("\n-- FD sys : %d\n", i);
- saveString.appendFormat("real name : %s, status : %d, pt_info : %p",
- info.sync_data->name, info.sync_data->status, pt_info);
- }
- sysFdOpen = true;
- sync_fence_info_free(info.sync_data);
- }
-
- if ((info.usage == 0) && !sysFdOpen) continue;
-#endif
-
- saveString.appendFormat("\n-- FD hwc : %d, usage %d\n", i, info.usage);
-
- switch(info.last_dir) {
- case FENCE_FROM:
- saveString.appendFormat("Last state : from %d, %d\n",
- info.from.type, info.from.ip);
- tv = info.from.time;
- break;
- case FENCE_TO:
- saveString.appendFormat("Last state : to %d, %d\n",
- info.to.type, info.to.ip);
- tv = info.to.time;
- break;
- case FENCE_DUP:
- saveString.appendFormat("Last state : dup %d, %d\n",
- info.dup.type, info.dup.ip);
- tv = info.dup.time;
- break;
- case FENCE_CLOSE:
- saveString.appendFormat("Last state : Close %d, %d\n",
- info.close.type, info.close.ip);
- tv = info.close.time;
- break;
- break;
- default:
- saveString.appendFormat("Fence trace : Undefined direction!\n");
- break;
+ for (const auto &[fd, info] : device->mFenceInfos) {
+ saveString.appendFormat("---- Fence FD : %d, Display(%d) ----\n", fd, info.displayId);
+ saveString.appendFormat("usage: %d, dupFrom: %d, pendingAllowed: %d, leaking: %d\n",
+ info.usage, info.dupFrom, info.pendingAllowed, info.leaking);
+
+ for (const auto &trace : info.traces) {
+ saveString.appendFormat("> dir: %d, type: %d, ip: %d, time:%s\n", trace.direction,
+ trace.type, trace.ip, getLocalTimeStr(trace.time).string());
}
-
- struct tm* localTime = (struct tm*)localtime((time_t*)&tv.tv_sec);
-
- saveString.appendFormat("from : %d, %d (cur : %d), to : %d, %d (cur : %d), hwc_dup : %d, %d (cur : %d), hwc_close : %d, %d (cur : %d)\n",
- info.from.type, info.from.ip, info.from.curFlag,
- info.to.type, info.to.ip, info.to.curFlag,
- info.dup.type, info.dup.ip, info.dup.curFlag,
- info.close.type, info.close.ip, info.close.curFlag);
- saveString.appendFormat("usage : %d, time:%02d-%02d %02d:%02d:%02d.%03lu(%lu)", info.usage,
- localTime->tm_mon+1, localTime->tm_mday,
- localTime->tm_hour, localTime->tm_min,
- localTime->tm_sec, tv.tv_usec/1000,
- ((tv.tv_sec * 1000) + (tv.tv_usec / 1000)));
}
}