diff --git a/base/include/refbase.h b/base/include/refbase.h index 9d4316806624b26b35c842c844c60977e8afe030..c8107cf0ca65d9618dd4722289e432692ab0d361 100644 --- a/base/include/refbase.h +++ b/base/include/refbase.h @@ -18,6 +18,9 @@ #include #include +#ifndef DEBUG_REFBASE +#define DEBUG_REFBASE 1 +#endif #ifdef DEBUG_REFBASE #include #endif @@ -111,37 +114,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 7f7c1fc94deb772c8467ae0b03d41f7c65cb9c3c..8dc5523fcce6d3b15d8579c777a29714a0cd85e2 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 }