| Index: trunk/src/chrome/browser/feedback/tracing_manager.cc
|
| ===================================================================
|
| --- trunk/src/chrome/browser/feedback/tracing_manager.cc (revision 237451)
|
| +++ trunk/src/chrome/browser/feedback/tracing_manager.cc (working copy)
|
| @@ -5,21 +5,20 @@
|
| #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/tracing_controller.h"
|
| +#include "content/public/browser/trace_controller.h"
|
|
|
| namespace {
|
| // Only once trace manager can exist at a time.
|
| TracingManager* g_tracing_manager = NULL;
|
| // Trace IDs start at 1 and increase.
|
| int g_next_trace_id = 1;
|
| +// Name of the file to store the tracing data as.
|
| +const base::FilePath::CharType kTracingFilename[] =
|
| + FILE_PATH_LITERAL("tracing.json");
|
| }
|
|
|
| TracingManager::TracingManager()
|
| @@ -42,10 +41,7 @@
|
|
|
| current_trace_id_ = g_next_trace_id;
|
| ++g_next_trace_id;
|
| - content::TracingController::GetInstance()->DisableRecording(
|
| - base::FilePath(),
|
| - base::Bind(&TracingManager::OnTraceDataCollected,
|
| - weak_ptr_factory_.GetWeakPtr()));
|
| + content::TraceController::GetInstance()->EndTracingAsync(this);
|
| return current_trace_id_;
|
| }
|
|
|
| @@ -80,6 +76,7 @@
|
| // 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()) {
|
| @@ -90,18 +87,20 @@
|
| }
|
|
|
| void TracingManager::StartTracing() {
|
| - content::TracingController::GetInstance()->EnableRecording(
|
| - "", content::TracingController::DEFAULT_OPTIONS,
|
| - content::TracingController::EnableRecordingDoneCallback());
|
| + content::TraceController::GetInstance()->BeginTracing(
|
| + this, "-test_*",
|
| + base::debug::TraceLog::RECORD_CONTINUOUSLY);
|
| }
|
|
|
| -void TracingManager::OnTraceDataCollected(const base::FilePath& path) {
|
| +void TracingManager::OnEndTracingComplete() {
|
| if (!current_trace_id_)
|
| return;
|
|
|
| + data_ = std::string("[") + data_ + "]";
|
| +
|
| std::string output_val;
|
| - feedback_util::ZipFile(path, &output_val);
|
| - base::DeleteFile(path, false);
|
| + feedback_util::ZipString(
|
| + base::FilePath(kTracingFilename), data_, &output_val);
|
|
|
| scoped_refptr<base::RefCountedString> output(
|
| base::RefCountedString::TakeString(&output_val));
|
| @@ -114,6 +113,7 @@
|
| }
|
|
|
| current_trace_id_ = 0;
|
| + data_ = "";
|
|
|
| // Tracing has to be restarted asynchronous, so the TracingController can
|
| // clean up.
|
| @@ -123,6 +123,15 @@
|
| 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)
|
|
|