MCPcopy Create free account
hub / github.com/async-profiler/async-profiler / add

Method add

src/objectSampler.cpp:64–95  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

62 }
63
64 void add(JNIEnv* jni, jobject object, jlong size, u64 trace) {
65 if (_full) {
66 return;
67 }
68
69 jweak wobject = jni->NewWeakGlobalRef(object);
70 if (wobject == NULL) {
71 return;
72 }
73
74 if (_lock.tryLock()) {
75 u32 start = (((uintptr_t)object >> 4) * 31 + ((uintptr_t)jni >> 4) + trace) & (MAX_REFS - 1);
76 u32 i = start;
77 do {
78 jweak w = _refs[i];
79 if (w == NULL || collected(w)) {
80 if (w != NULL) jni->DeleteWeakGlobalRef(w);
81 _refs[i] = wobject;
82 _values[i].size = size;
83 _values[i].trace = trace;
84 _values[i].time = TSC::ticks();
85 _lock.unlock();
86 return;
87 }
88 } while ((i = (i + 1) & (MAX_REFS - 1)) != start);
89
90 _full = true;
91 _lock.unlock();
92 }
93
94 jni->DeleteWeakGlobalRef(wobject);
95 }
96
97 void dump(JNIEnv* jni) {
98 _lock.lock();

Callers 1

recordAllocationMethod · 0.45

Calls 2

tryLockMethod · 0.45
unlockMethod · 0.45

Tested by

no test coverage detected