| 1924 | } |
| 1925 | |
| 1926 | jstring ValdiAndroid::NativeBridge::dumpLogs( // NOLINT |
| 1927 | fbjni::alias_ref<fbjni::JClass> /* clazz */, // NOLINT |
| 1928 | jlong runtimeHandle) { |
| 1929 | auto* runtime = getRuntime(runtimeHandle); |
| 1930 | if (runtime == nullptr) { |
| 1931 | return nullptr; |
| 1932 | } |
| 1933 | |
| 1934 | auto javaEnv = ValdiAndroid::JavaEnv(); |
| 1935 | auto logs = runtime->dumpLogs(false, true, false); |
| 1936 | |
| 1937 | auto stats = IndirectJavaGlobalRef::dumpStats(); |
| 1938 | |
| 1939 | Valdi::ValueArrayBuilder builder; |
| 1940 | builder.reserve(stats.activeReferencesByTag.size()); |
| 1941 | |
| 1942 | for (const auto& it : stats.activeReferencesByTag) { |
| 1943 | auto tag = it.first == nullptr ? std::string_view("<null>") : std::string_view(it.first); |
| 1944 | builder.append(Valdi::Value(STRING_FORMAT("{} = {}", tag, it.second))); |
| 1945 | } |
| 1946 | |
| 1947 | logs.appendVerbose( |
| 1948 | STRING_LITERAL("JNI Global Refs"), |
| 1949 | Valdi::Value() |
| 1950 | .setMapValue("tableSize", Valdi::Value(static_cast<int32_t>(stats.tableSize))) |
| 1951 | .setMapValue("activeReferencesCount", Valdi::Value(static_cast<int32_t>(stats.activeReferencesCount))) |
| 1952 | .setMapValue("references", Valdi::Value(builder.build()))); |
| 1953 | |
| 1954 | auto verboseLogs = logs.verboseLogsToString(); |
| 1955 | |
| 1956 | return reinterpret_cast<jstring>(ValdiAndroid::toJavaObject(javaEnv, verboseLogs).releaseObject()); |
| 1957 | } |
| 1958 | |
| 1959 | jobject ValdiAndroid::NativeBridge::getAllContexts( // NOLINT |
| 1960 | fbjni::alias_ref<fbjni::JClass> /* clazz */, // NOLINT |
no test coverage detected