From ce534894c14b40a55855d63eb599d38f5fd0924c Mon Sep 17 00:00:00 2001 From: liujialiang Date: Mon, 20 Jun 2022 20:33:44 +0800 Subject: [PATCH] Modify class RefTracker The log of RefTracker is not so clear. The tracker should show the source and the root pointer, so that developer can see the trace more clearly. Signed-off-by: liujialiang Change-Id: Iebc8322646a5e806826f354d30b4faf142efc5b3 --- base/include/refbase.h | 24 ++++++++++------------- base/src/refbase.cpp | 43 ++++++++++++++++++------------------------ 2 files changed, 28 insertions(+), 39 deletions(-) diff --git a/base/include/refbase.h b/base/include/refbase.h index 9d43168..8122d81 100644 --- a/base/include/refbase.h +++ b/base/include/refbase.h @@ -111,37 +111,33 @@ class RefTracker { public: RefTracker() {}; - RefTracker(RefTracker* exTracker, const void* id, int strong, - int weak, int ref, uint pid, uint tid); + RefTracker(RefTracker* exTracker, const void* id, int strong, int weak, int ref, int pid, int tid); - void GetTrace(RefTracker* exTracker, const void* id, int strong, - int weak, int ref, uint pid, uint tid); + void GetTrace(RefTracker* exTracker, const void* id, int strong, int weak, int ref, int pid, int tid); // Only used for tracking the amount of Strong Reference. - void GetStrongTrace(RefTracker* exTracker, const void* id, int strong, - uint pid, uint tid); + void GetStrongTrace(RefTracker* exTracker, const void* id, int strong, int pid, int tid); // Only used for tracking the amount of Weak Reference. - void GetWeakTrace(RefTracker* exTracker, const void* id, int weak, - uint pid, uint tid); + void GetWeakTrace(RefTracker* exTracker, const void* id, int weak, int pid, int tid); - void PrintTrace(); + void PrintTrace(const void* root); - void PrintStrongTrace(); + void PrintStrongTrace(const void* root); - void PrintWeakTrace(); + void PrintWeakTrace(const void* root); RefTracker* GetexTrace(); - RefTracker* PopTrace(); + RefTracker* PopTrace(const void* root); private: const void* ptrID; int strongRefCNT; int weakRefCNT; int refCNT; - uint PID; - uint TID; + int PID; + int TID; RefTracker* exTrace; }; #endif diff --git a/base/src/refbase.cpp b/base/src/refbase.cpp index 7f7c1fc..fb46127 100644 --- a/base/src/refbase.cpp +++ b/base/src/refbase.cpp @@ -66,12 +66,12 @@ bool WeakRefCounter::AttemptIncStrongRef(const void *objectId) } #ifdef DEBUG_REFBASE -RefTracker::RefTracker(RefTracker* exTracker, const void* id, int strong, int weak, int ref, uint pid, uint tid) +RefTracker::RefTracker(RefTracker* exTracker, const void* id, int strong, int weak, int ref, int pid, int tid) : ptrID (id), strongRefCNT (strong), weakRefCNT (weak), refCNT (ref), PID (pid), TID (tid), exTrace (exTracker) { } -void RefTracker::GetTrace(RefTracker* exTracker, const void* id, int strong, int weak, int ref, uint pid, uint tid) +void RefTracker::GetTrace(RefTracker* exTracker, const void* id, int strong, int weak, int ref, int pid, int tid) { ptrID = id; strongRefCNT = strong; @@ -82,7 +82,7 @@ void RefTracker::GetTrace(RefTracker* exTracker, const void* id, int strong, int exTrace = exTracker; } -void RefTracker::GetStrongTrace(RefTracker* exTracker, const void* id, int strong, uint pid, uint tid) +void RefTracker::GetStrongTrace(RefTracker* exTracker, const void* id, int strong, int pid, int tid) { ptrID = id; strongRefCNT = strong; @@ -93,7 +93,7 @@ void RefTracker::GetStrongTrace(RefTracker* exTracker, const void* id, int stron exTrace = exTracker; } -void RefTracker::GetWeakTrace(RefTracker* exTracker, const void* id, int weak, uint pid, uint tid) +void RefTracker::GetWeakTrace(RefTracker* exTracker, const void* id, int weak, int pid, int tid) { ptrID = id; strongRefCNT = -(INITIAL_PRIMARY_VALUE); @@ -104,25 +104,23 @@ void RefTracker::GetWeakTrace(RefTracker* exTracker, const void* id, int weak, u exTrace = exTracker; } -void RefTracker::PrintTrace() +void RefTracker::PrintTrace(const void* root) { - UTILS_LOGI("ptrID: %{public}016x strongcnt: %{public}d weakcnt: \ - %{public}d refcnt: %{public}d PID: %{public}d TID: %{public}d", \ - ptrID, strongRefCNT, weakRefCNT, refCNT, PID, TID); + UTILS_LOGI("ptrID(%{public}lx) call %{public}lx. strongcnt: %{public}d weakcnt: %{public}d " \ + "refcnt: %{public}d PID: %{public}d TID: %{public}d", + reinterpret_cast(ptrID), reinterpret_cast(root), strongRefCNT, weakRefCNT, refCNT, PID, TID); } -void RefTracker::PrintStrongTrace() +void RefTracker::PrintStrongTrace(const void* root) { - UTILS_LOGI("ptrID: %{public}016x strongcnt: %{public}d \ - PID: %{public}d TID: %{public}d", ptrID, strongRefCNT,\ - PID, TID); + UTILS_LOGI("ptrID(%{public}lx) call %{public}lx. strongcnt: %{public}d PID: %{public}d TID: %{public}d", + reinterpret_cast(ptrID), reinterpret_cast(root), strongRefCNT, PID, TID); } -void RefTracker::PrintWeakTrace() +void RefTracker::PrintWeakTrace(const void* root) { - UTILS_LOGI("ptrID: %{public}016x weakcnt: %{public}d \ - PID: %{public}d TID: %{public}d", ptrID, weakRefCNT,\ - PID, TID); + UTILS_LOGI("ptrID(%{public}lx) call %{public}lx. weakcnt: %{public}d PID: %{public}d TID: %{public}d", + reinterpret_cast(ptrID), reinterpret_cast(root), weakRefCNT, PID, TID); } RefTracker* RefTracker::GetexTrace() @@ -130,10 +128,10 @@ RefTracker* RefTracker::GetexTrace() return exTrace; } -RefTracker* RefTracker::PopTrace() +RefTracker* RefTracker::PopTrace(const void* root) { RefTracker* ref = exTrace; - PrintTrace(); + PrintTrace(root); delete this; return ref; } @@ -151,7 +149,7 @@ void RefCounter::PrintTracker() { std::lock_guard lock(trackerMutex); while (refTracker) { - refTracker = refTracker->PopTrace(); + refTracker = refTracker->PopTrace(this); } } #endif @@ -198,12 +196,7 @@ bool RefCounter::IsRefPtrValid() RefCounter::~RefCounter() { #ifdef DEBUG_REFBASE - while (refTracker) { - RefTracker* ref = refTracker; - ref->PrintTrace(); - refTracker = ref->GetexTrace(); - delete ref; - } + PrintTracker(); #endif } -- Gitee