jint JNICALL secondTraversal()

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;
    }