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 |