Upstream version 7.35.144.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / feedback / tracing_manager.cc
index 92dba45..577a7c1 100644 (file)
@@ -5,11 +5,15 @@
 #include "chrome/browser/feedback/tracing_manager.h"
 
 #include "base/bind.h"
+#include "base/file_util.h"
+#include "base/location.h"
+#include "base/memory/ref_counted_memory.h"
+#include "base/message_loop/message_loop_proxy.h"
 #include "base/prefs/pref_service.h"
 #include "chrome/browser/browser_process.h"
 #include "chrome/browser/feedback/feedback_util.h"
 #include "chrome/common/pref_names.h"
-#include "content/public/browser/trace_controller.h"
+#include "content/public/browser/tracing_controller.h"
 
 namespace {
 // Only once trace manager can exist at a time.
@@ -41,7 +45,10 @@ int TracingManager::RequestTrace() {
 
   current_trace_id_ = g_next_trace_id;
   ++g_next_trace_id;
-  content::TraceController::GetInstance()->EndTracingAsync(this);
+  content::TracingController::GetInstance()->DisableRecording(
+      base::FilePath(),
+      base::Bind(&TracingManager::OnTraceDataCollected,
+                 weak_ptr_factory_.GetWeakPtr()));
   return current_trace_id_;
 }
 
@@ -76,7 +83,6 @@ void TracingManager::DiscardTraceData(int id) {
   // If the trace is discarded before it is complete, clean up the accumulators.
   if (id == current_trace_id_) {
     current_trace_id_ = 0;
-    data_ = "";
 
     // If the trace has already been requested, provide an empty string.
     if (!trace_callback_.is_null()) {
@@ -87,20 +93,25 @@ void TracingManager::DiscardTraceData(int id) {
 }
 
 void TracingManager::StartTracing() {
-  content::TraceController::GetInstance()->BeginTracing(
-      this, "-test_*",
-      base::debug::TraceLog::RECORD_CONTINUOUSLY);
+  content::TracingController::GetInstance()->EnableRecording(
+      "", content::TracingController::DEFAULT_OPTIONS,
+      content::TracingController::EnableRecordingDoneCallback());
 }
 
-void TracingManager::OnEndTracingComplete() {
+void TracingManager::OnTraceDataCollected(const base::FilePath& path) {
   if (!current_trace_id_)
     return;
 
-  data_ = std::string("[") + data_ + "]";
+  std::string data;
+  if (!base::ReadFileToString(path, &data)) {
+    LOG(ERROR) << "Failed to read trace data from: " << path.value();
+    return;
+  }
+  base::DeleteFile(path, false);
 
   std::string output_val;
   feedback_util::ZipString(
-      base::FilePath(kTracingFilename), data_, &output_val);
+      base::FilePath(kTracingFilename), data, &output_val);
 
   scoped_refptr<base::RefCountedString> output(
       base::RefCountedString::TakeString(&output_val));
@@ -113,7 +124,6 @@ void TracingManager::OnEndTracingComplete() {
   }
 
   current_trace_id_ = 0;
-  data_ = "";
 
   // Tracing has to be restarted asynchronous, so the TracingController can
   // clean up.
@@ -123,15 +133,6 @@ void TracingManager::OnEndTracingComplete() {
                  weak_ptr_factory_.GetWeakPtr()));
 }
 
-void TracingManager::OnTraceDataCollected(
-    const scoped_refptr<base::RefCountedString>& trace_fragment) {
-  if (current_trace_id_) {
-    if (!data_.empty())
-      data_ += ",";
-    data_ += trace_fragment->data();
-  }
-}
-
 // static
 scoped_ptr<TracingManager> TracingManager::Create() {
   if (g_tracing_manager)