jint JNICALL visitReference()

in src/sizes/retained_size_action.cpp [59:77]


jint JNICALL visitReference(jvmtiHeapReferenceKind refKind, const jvmtiHeapReferenceInfo *refInfo, jlong classTag,
                            jlong referrerClassTag, jlong size, jlong *tagPtr,
                            jlong *referrerTagPtr, jint length, void *userData) {
    if (refKind == JVMTI_HEAP_REFERENCE_JNI_LOCAL || refKind == JVMTI_HEAP_REFERENCE_JNI_GLOBAL ||
        handleReferrersWithNoInfo(referrerTagPtr, tagPtr)) {
        return JVMTI_VISIT_OBJECTS;
    } else if (*tagPtr == 0) {
        *tagPtr = pointerToTag(tagToPointer(*referrerTagPtr)->share());
    } else if (isTagWithNewInfo(*tagPtr)) {
        *tagPtr = pointerToTag(tagToPointer(*referrerTagPtr)->share());
        tagsWithNewInfo.insert(*tagPtr);
    } else if (tagsAreValidForMerge(*tagPtr, *referrerTagPtr)) {
        tagsWithNewInfo.erase(*tagPtr);
        *tagPtr = pointerToTag(merge(*tagPtr, *referrerTagPtr));
        tagsWithNewInfo.insert(*tagPtr);
    }

    return JVMTI_VISIT_OBJECTS;
}