| Index: shell/android/main.cc
|
| diff --git a/shell/android/main.cc b/shell/android/main.cc
|
| index aa26a13086d497f86368728544981a546fbd3e0f..a6edc249797248aea47597b9d76923c2bdf661e8 100644
|
| --- a/shell/android/main.cc
|
| +++ b/shell/android/main.cc
|
| @@ -19,6 +19,7 @@
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/run_loop.h"
|
| #include "base/threading/simple_thread.h"
|
| +#include "base/trace_event/trace_event.h"
|
| #include "jni/ShellMain_jni.h"
|
| #include "mojo/common/message_pump_mojo.h"
|
| #include "shell/android/android_handler_loader.h"
|
| @@ -29,6 +30,8 @@
|
| #include "shell/command_line_util.h"
|
| #include "shell/context.h"
|
| #include "shell/init.h"
|
| +#include "shell/switches.h"
|
| +#include "shell/tracer.h"
|
| #include "ui/gl/gl_surface_egl.h"
|
|
|
| using base::LazyInstance;
|
| @@ -69,7 +72,7 @@ LazyInstance<scoped_ptr<MojoShellRunner>> g_shell_runner =
|
| LazyInstance<scoped_ptr<base::DelegateSimpleThread>> g_shell_thread =
|
| LAZY_INSTANCE_INITIALIZER;
|
|
|
| -LazyInstance<base::android::ScopedJavaGlobalRef<jobject>> g_main_activiy =
|
| +LazyInstance<base::android::ScopedJavaGlobalRef<jobject>> g_main_activity =
|
| LAZY_INSTANCE_INITIALIZER;
|
|
|
| void ConfigureAndroidServices(Context* context) {
|
| @@ -97,7 +100,7 @@ void QuitShellThread() {
|
| g_shell_thread.Get()->Join();
|
| g_shell_thread.Pointer()->reset();
|
| Java_ShellMain_finishActivity(base::android::AttachCurrentThread(),
|
| - g_main_activiy.Get().obj());
|
| + g_main_activity.Get().obj());
|
| exit(0);
|
| }
|
|
|
| @@ -145,13 +148,12 @@ static void Init(JNIEnv* env,
|
| jobjectArray jparameters,
|
| jstring j_local_apps_directory,
|
| jstring j_tmp_dir) {
|
| - g_main_activiy.Get().Reset(env, activity);
|
| + g_main_activity.Get().Reset(env, activity);
|
|
|
| + std::string tmp_dir = base::android::ConvertJavaStringToUTF8(env, j_tmp_dir);
|
| // Setting the TMPDIR environment variable so that applications can use it.
|
| // TODO(qsr) We will need our subprocesses to inherit this.
|
| - int return_value =
|
| - setenv("TMPDIR",
|
| - base::android::ConvertJavaStringToUTF8(env, j_tmp_dir).c_str(), 1);
|
| + int return_value = setenv("TMPDIR", tmp_dir.c_str(), 1);
|
| DCHECK_EQ(return_value, 0);
|
|
|
| base::android::ScopedJavaLocalRef<jobject> scoped_activity(env, activity);
|
| @@ -163,7 +165,13 @@ static void Init(JNIEnv* env,
|
| base::android::AppendJavaStringArrayToStringVector(env, jparameters,
|
| ¶meters);
|
| base::CommandLine::Init(0, nullptr);
|
| - base::CommandLine::ForCurrentProcess()->InitFromArgv(parameters);
|
| + base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
|
| + command_line->InitFromArgv(parameters);
|
| + ::shell::Tracer tracer;
|
| + bool trace_startup = command_line->HasSwitch(switches::kTraceStartup);
|
| + if (trace_startup)
|
| + tracer.Start(command_line->GetSwitchValueASCII(switches::kTraceStartup));
|
| +
|
| g_shell_runner.Get().reset(new MojoShellRunner(parameters));
|
|
|
| InitializeLogging();
|
| @@ -181,6 +189,14 @@ static void Init(JNIEnv* env,
|
| g_java_message_loop.Get().reset(new base::MessageLoopForUI);
|
| base::MessageLoopForUI::current()->Start();
|
|
|
| + if (trace_startup) {
|
| + g_java_message_loop.Get()->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&::shell::Tracer::StopAndFlushToFile,
|
| + base::Unretained(&tracer), tmp_dir + "/mojo_shell.trace"),
|
| + base::TimeDelta::FromSeconds(5));
|
| + }
|
| +
|
| // TODO(abarth): At which point should we switch to cross-platform
|
| // initialization?
|
|
|
|
|