blob: 66200380d8b82dd360b8277c776c5db8a69ff517 [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "flutter/shell/platform/android/flutter_main.h"
#include <vector>
#include "dart/runtime/include/dart_tools_api.h"
#include "flutter/fml/platform/android/jni_util.h"
#include "flutter/runtime/start_up.h"
#include "flutter/shell/common/shell.h"
#include "lib/fxl/arraysize.h"
#include "lib/fxl/command_line.h"
#include "lib/fxl/macros.h"
namespace shell {
static void Init(JNIEnv* env,
jclass clazz,
jobject context,
jobjectArray jargs) {
// Prepare command line arguments and initialize the shell.
std::vector<std::string> args;
args.push_back("flutter_tester");
for (auto& arg : fml::jni::StringArrayToVector(env, jargs)) {
args.push_back(std::move(arg));
}
auto command_line = fxl::CommandLineFromIterators(args.begin(), args.end());
std::string icu_data_path =
command_line.GetOptionValueWithDefault("icu-data-file-path", "");
Shell::InitStandalone(std::move(command_line), std::move(icu_data_path));
}
static void RecordStartTimestamp(JNIEnv* env,
jclass jcaller,
jlong initTimeMillis) {
int64_t initTimeMicros =
static_cast<int64_t>(initTimeMillis) * static_cast<int64_t>(1000);
blink::engine_main_enter_ts = Dart_TimelineGetMicros() - initTimeMicros;
}
bool RegisterFlutterMain(JNIEnv* env) {
static const JNINativeMethod methods[] = {
{
.name = "nativeInit",
.signature = "(Landroid/content/Context;[Ljava/lang/String;)V",
.fnPtr = reinterpret_cast<void*>(&Init),
},
{
.name = "nativeRecordStartTimestamp",
.signature = "(J)V",
.fnPtr = reinterpret_cast<void*>(&RecordStartTimestamp),
},
};
jclass clazz = env->FindClass("io/flutter/view/FlutterMain");
if (clazz == nullptr) {
return false;
}
return env->RegisterNatives(clazz, methods, arraysize(methods)) == 0;
}
} // namespace shell