Chromium Code Reviews| Index: content/shell/android/tracing_shell.cc |
| diff --git a/content/shell/android/tracing_shell.cc b/content/shell/android/tracing_shell.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..9ce19e49012ad3c41f899370d42212a7a745ed4e |
| --- /dev/null |
| +++ b/content/shell/android/tracing_shell.cc |
| @@ -0,0 +1,91 @@ |
| +// Copyright (c) 2012 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 "tracing_shell.h" |
|
Ted C
2012/12/26 16:18:28
should be the full path
|
| + |
| +#include "base/android/jni_android.h" |
| +#include "base/android/jni_string.h" |
| +#include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| +#include "base/lazy_instance.h" |
| +#include "base/logging.h" |
| +#include "content/public/browser/browser_thread.h" |
| +#include "content/public/browser/trace_controller.h" |
| +#include "jni/TraceController_jni.h" |
| + |
| +namespace content { |
| + |
| +base::LazyInstance<TracingIntentHandler> g_traceIntentHandler = |
|
Ted C
2012/12/26 16:18:28
no camel caps in the name, so this should be g_tra
|
| + LAZY_INSTANCE_INITIALIZER; |
| + |
| +void WriteTraceFileCallback(const FilePath& path, std::string* contents) { |
| + if (file_util::WriteFile(path, contents->c_str(), contents->size()) <= 0) |
| + LOG(INFO) << "fail to write trace file"; |
| +} |
| + |
| +TracingIntentHandler::TracingIntentHandler() |
| + : in_tracing_(false) { |
|
Ted C
2012/12/26 16:18:28
indent to 4
|
| +} |
| + |
| +void TracingIntentHandler::OnEndTracingComplete() { |
| + trace_data_to_save_.Finish(); |
| + BrowserThread::PostTask( |
| + BrowserThread::FILE, FROM_HERE, |
| + base::Bind(&WriteTraceFileCallback, |
| + path_to_save_, |
|
Ted C
2012/12/26 16:18:28
align with the (
|
| + &trace_data_to_save_.data_)); |
| + SetInTracing(false); |
| +} |
| + |
| +void TracingIntentHandler::OnTraceDataCollected( |
| + const scoped_refptr<base::RefCountedString>& trace_fragment) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + |
| + trace_data_to_save_.AddFragment(trace_fragment->data()); |
| +} |
| + |
| +void TracingIntentHandler::OnBeginTracing(std::string path) { |
| + SetInTracing(true); |
| + path_to_save_ = FilePath(path); |
| + trace_data_to_save_.Start(); |
| + TraceController::GetInstance()->BeginTracing(this, std::string("-test*")); |
| +} |
| + |
| +void TracingIntentHandler::OnEndTracing() { |
| + if (in_tracing() && !TraceController::GetInstance()->EndTracingAsync(this)) |
| + OnEndTracingComplete(); |
| +} |
| + |
| +void TracingIntentHandler::JsonString::Start() { |
| + first_ = true; |
| + data_ = "["; |
| +} |
| + |
| +void TracingIntentHandler::JsonString::Finish() { |
| + data_ += "]"; |
| +} |
| + |
| +void TracingIntentHandler::JsonString::AddFragment( |
| + const std::string& fragment) { |
| + if (first_) |
| + first_ = false; |
| + else |
| + data_ += ","; |
| + data_ += fragment; |
| +} |
| + |
| +static void BeginTracing(JNIEnv* env, jclass clazz, jstring jspath) { |
| + std::string path(base::android::ConvertJavaStringToUTF8(env, jspath)); |
| + g_traceIntentHandler.Get().OnBeginTracing(path); |
| +} |
| + |
| +static void EndTracing(JNIEnv* env, jclass clazz) { |
| + g_traceIntentHandler.Get().OnEndTracing(); |
| +} |
| + |
| +bool RegisterTracingHandler(JNIEnv* env) { |
| + return RegisterNativesImpl(env); |
| +} |
| + |
| +} // namespace content |