in src/sizes/retained_size_via_dominator_tree.cpp [112:131]
jint JNICALL secondTraversal(jvmtiHeapReferenceKind refKind, const jvmtiHeapReferenceInfo *refInfo, jlong classTag,
jlong referrerClassTag, jlong size, jlong *tagPtr,
jlong *referrerTagPtr, jint length, void *userData) {
if (*referrerTagPtr == MOCK_REFERRER_TAG) {
return JVMTI_VISIT_OBJECTS;
}
auto *info = reinterpret_cast<SizesViaDominatorTreeHeapDumpInfo *>(userData);
if (*tagPtr == VISITED_TAG || refKind == JVMTI_HEAP_REFERENCE_JNI_LOCAL || refKind == JVMTI_HEAP_REFERENCE_JNI_GLOBAL) {
return 0;
} else if (*tagPtr == 0) {
*tagPtr = info->addNewVertex(size);
info->addNeighbour(*referrerTagPtr, *tagPtr);
} else {
info->addNeighbour(*referrerTagPtr, *tagPtr);
return 0;
}
return JVMTI_VISIT_OBJECTS;
}