Chromium Code Reviews| Index: shell/android/main.cc |
| diff --git a/shell/android/main.cc b/shell/android/main.cc |
| index aa26a13086d497f86368728544981a546fbd3e0f..8b643ec180c1cbdd98903454752f1fb009f6017c 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); |
| + 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(&Tracer::StopAndFlushToFile, base::Unretained(&tracer), |
|
qsr
2015/04/08 08:55:57
I am missing something here. tracer is a stack var
|
| + tmp_dir + "/mojo_shell.trace"), |
| + base::TimeDelta::FromSeconds(5)); |
| + } |
| + |
| // TODO(abarth): At which point should we switch to cross-platform |
| // initialization? |