| 1649 | } |
| 1650 | |
| 1651 | jobject ValdiAndroid::NativeBridge::captureJavaScriptStackTraces( // NOLINT |
| 1652 | fbjni::alias_ref<fbjni::JClass> /* clazz */, // NOLINT |
| 1653 | jlong runtimeHandle, |
| 1654 | jlong timeoutMs) { |
| 1655 | Valdi::Ref<Valdi::ValueArray> retval; |
| 1656 | |
| 1657 | auto runtime = getRuntime(runtimeHandle); |
| 1658 | if (runtime != nullptr) { |
| 1659 | // TODO(rjaber): Move to better duration |
| 1660 | const std::vector<Valdi::JavaScriptCapturedStacktrace> threadStacks = |
| 1661 | runtime->getJavaScriptRuntime()->captureStackTraces(std::chrono::steady_clock::duration(timeoutMs * 1000)); |
| 1662 | retval = Valdi::ValueArray::make(threadStacks.size()); |
| 1663 | for (size_t i = 0; i < threadStacks.size(); i++) { // NOLINT |
| 1664 | auto currentStack = threadStacks[i]; |
| 1665 | auto threadStackPacked = Valdi::ValueArray::make(2); |
| 1666 | threadStackPacked->emplace(0, Valdi::Value(currentStack.getStackTrace())); |
| 1667 | threadStackPacked->emplace(1, Valdi::Value(static_cast<int32_t>(currentStack.getStatus()))); |
| 1668 | retval->emplace(i, Valdi::Value(threadStackPacked)); |
| 1669 | } |
| 1670 | } |
| 1671 | |
| 1672 | return ValdiAndroid::toJavaObject(ValdiAndroid::JavaEnv(), retval).releaseObject(); |
| 1673 | } |
| 1674 | |
| 1675 | /** |
| 1676 | * Java->C++ entry point for getting all hashes of loaded modules. |
nothing calls this directly
no test coverage detected