jobjectArray RetainedSizesByClassViaDominatorTreeAction::constructResultObject()

in src/sizes/retained_size_via_dominator_tree.cpp [253:280]


jobjectArray RetainedSizesByClassViaDominatorTreeAction::constructResultObject(const std::vector<jobject> &objectsOfClass,
                                                                               const std::vector<jlong> &retainedSizes,
                                                                               const SizesViaDominatorTreeHeapDumpInfo &info,
                                                                               jlong objectsLimit) {
    size_t size = std::min(static_cast<size_t>(objectsLimit), objectsOfClass.size());
    std::vector<jlong> shallowSizes;
    std::vector<jlong> sortedRetainedSizes;
    sortedRetainedSizes.reserve(size);
    shallowSizes.reserve(size);
    for (size_t i = 0; i < size; i++) {
        jobject object = objectsOfClass[i];
        jlong tag;
        jvmti->GetTag(object, &tag);
        sortedRetainedSizes.push_back(retainedSizes[tag]);
        shallowSizes.push_back(info.sizes[tag]);
    }

    jobjectArray result = getObjectArrayOfSize(env, 3);
    jobjectArray objects = getObjectArrayOfSize(env, size);
    for (int i = 0; i < size; i++) {
        env->SetObjectArrayElement(objects, i, objectsOfClass[i]);
    }
    env->SetObjectArrayElement(result, 0, objects);
    env->SetObjectArrayElement(result, 1, toJavaArray(env, shallowSizes));
    env->SetObjectArrayElement(result, 2, toJavaArray(env, sortedRetainedSizes));

    return result;
}