summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author TreeHugger Robot <treehugger-gerrit@google.com> 2019-12-20 17:16:18 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-12-20 17:16:18 +0000
commit768acbc8992a31fdf467fa2adee1f2c6c4e3698e (patch)
tree235cd586bfca0b6b007d08bde3ac5a4fa5e3ff6d
parent37c665dc050ab45cf51441fb70dac1004e1336d9 (diff)
parentd174e386ee55f629244fba35dcb62c44b29266f0 (diff)
Merge "libui: print more fence information when fence is timeout"
-rw-r--r--libs/ui/Fence.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/libs/ui/Fence.cpp b/libs/ui/Fence.cpp
index 4ce891e148..33ab7c470e 100644
--- a/libs/ui/Fence.cpp
+++ b/libs/ui/Fence.cpp
@@ -62,8 +62,26 @@ status_t Fence::waitForever(const char* logname) {
int warningTimeout = 3000;
int err = sync_wait(mFenceFd, warningTimeout);
if (err < 0 && errno == ETIME) {
- ALOGE("%s: fence %d didn't signal in %u ms", logname, mFenceFd.get(),
- warningTimeout);
+ ALOGE("waitForever: %s: fence %d didn't signal in %u ms", logname, mFenceFd.get(),
+ warningTimeout);
+
+ struct sync_file_info* finfo = sync_file_info(mFenceFd);
+ if (finfo) {
+ // status: active(0) signaled(1) error(<0)
+ ALOGI("waitForever: fence(%s) status(%d)", finfo->name, finfo->status);
+
+ struct sync_fence_info* pinfo = sync_get_fence_info(finfo);
+ for (uint32_t i = 0; i < finfo->num_fences; i++) {
+ uint64_t ts_sec = pinfo[i].timestamp_ns / 1000000000LL;
+ uint64_t ts_usec = (pinfo[i].timestamp_ns % 1000000000LL) / 1000LL;
+
+ ALOGI("waitForever: sync point: timeline(%s) drv(%s) status(%d) timestamp(%" PRIu64
+ ".%06" PRIu64 ")",
+ pinfo[i].obj_name, pinfo[i].driver_name, pinfo[i].status, ts_sec, ts_usec);
+ }
+ sync_file_info_free(finfo);
+ }
+
err = sync_wait(mFenceFd, TIMEOUT_NEVER);
}
return err < 0 ? -errno : status_t(NO_ERROR);