in BenchmarkNdkSample/benchmark/cpp/googlebenchmarkrunner/googlebenchmarkrunner.cpp [130:155]
void ReportRuns(const std::vector<Run> &reports) override {
for (auto &run : reports) {
if (run.error_occurred) {
ScopedLocalRef<jstring> jmessage(mEnv, mEnv->NewStringUTF(run.error_message.c_str()));
ScopedLocalRef<jobject> jthrowable(mEnv, mEnv->NewObject(
gAssertionFailure.clazz, gAssertionFailure.ctor, jmessage.get()));
ScopedLocalRef<jobject> jfailure(mEnv, mEnv->NewObject(
gFailure.clazz, gFailure.ctor, mCurrentTestDescription.get(), jthrowable.get()));
mEnv->CallVoidMethod(mRunNotifier, gRunNotifier.fireTestFailure, jfailure.get());
} else {
ScopedLocalRef<jstring> jTestName(mEnv, mEnv->NewStringUTF(run.benchmark_name().data()));
double resultNs = run.GetAdjustedRealTime() * (1e9 / ::benchmark::GetTimeUnitMultiplier(run.time_unit));
mEnv->CallStaticVoidMethod(
gGoogleBenchmarkRunner.clazz,
gGoogleBenchmarkRunner.reportRun,
jTestName.get(),
(int64_t) resultNs);
}
// always fire finished, even if error occurred
notify(gRunNotifier.fireTestFinished);
// notify next test starting, if one exists
notifyTestStarted();
}
}