diff options
author | Dmitry Vyukov <dvyukov@google.com> | 2012-05-22 11:33:03 +0000 |
---|---|---|
committer | Dmitry Vyukov <dvyukov@google.com> | 2012-05-22 11:33:03 +0000 |
commit | 26127735454fddae3495794f38189d57dde6510f (patch) | |
tree | 62cc5338cb4528534fd34bfa0328881a61bd7f14 /lib/tsan/rtl/tsan_sync.cc | |
parent | 9003eae323f92d68b834f649de17774a21866f0d (diff) |
tsan: simple memory profiler
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@157248 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/tsan/rtl/tsan_sync.cc')
-rw-r--r-- | lib/tsan/rtl/tsan_sync.cc | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/tsan/rtl/tsan_sync.cc b/lib/tsan/rtl/tsan_sync.cc index 0b31ab9ce..2910ead10 100644 --- a/lib/tsan/rtl/tsan_sync.cc +++ b/lib/tsan/rtl/tsan_sync.cc @@ -107,6 +107,26 @@ SyncVar* SyncTab::GetAndRemove(ThreadState *thr, uptr pc, uptr addr) { return res; } +uptr SyncVar::GetMemoryConsumption() { + return sizeof(*this) + + clock.size() * sizeof(u64) + + read_clock.size() * sizeof(u64) + + creation_stack.Size() * sizeof(uptr); +} + +uptr SyncTab::GetMemoryConsumption(uptr *nsync) { + uptr mem = 0; + for (int i = 0; i < kPartCount; i++) { + Part *p = &tab_[i]; + Lock l(&p->mtx); + for (SyncVar *s = p->val; s; s = s->next) { + *nsync += 1; + mem += s->GetMemoryConsumption(); + } + } + return mem; +} + int SyncTab::PartIdx(uptr addr) { return (addr >> 3) % kPartCount; } |