OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/feedback/tracing_manager.h" | 5 #include "chrome/browser/feedback/tracing_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/prefs/pref_service.h" | 8 #include "base/prefs/pref_service.h" |
9 #include "chrome/browser/browser_process.h" | 9 #include "chrome/browser/browser_process.h" |
10 #include "chrome/browser/feedback/feedback_util.h" | 10 #include "chrome/browser/feedback/feedback_util.h" |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
86 void TracingManager::StartTracing() { | 86 void TracingManager::StartTracing() { |
87 content::TraceController::GetInstance()->BeginTracing( | 87 content::TraceController::GetInstance()->BeginTracing( |
88 this, "-test_*", | 88 this, "-test_*", |
89 base::debug::TraceLog::RECORD_CONTINUOUSLY); | 89 base::debug::TraceLog::RECORD_CONTINUOUSLY); |
90 } | 90 } |
91 | 91 |
92 void TracingManager::OnEndTracingComplete() { | 92 void TracingManager::OnEndTracingComplete() { |
93 if (!current_trace_id_) | 93 if (!current_trace_id_) |
94 return; | 94 return; |
95 | 95 |
| 96 data_ = std::string("[") + data_ + "]"; |
| 97 |
96 std::string output_val; | 98 std::string output_val; |
97 feedback_util::ZipString(data_, &output_val); | 99 feedback_util::ZipString(data_, &output_val); |
98 | 100 |
99 scoped_refptr<base::RefCountedString> output( | 101 scoped_refptr<base::RefCountedString> output( |
100 base::RefCountedString::TakeString(&output_val)); | 102 base::RefCountedString::TakeString(&output_val)); |
101 | 103 |
102 trace_data_[current_trace_id_] = output; | 104 trace_data_[current_trace_id_] = output; |
103 | 105 |
104 if (!trace_callback_.is_null()) { | 106 if (!trace_callback_.is_null()) { |
105 trace_callback_.Run(output); | 107 trace_callback_.Run(output); |
106 trace_callback_.Reset(); | 108 trace_callback_.Reset(); |
107 } | 109 } |
108 | 110 |
109 current_trace_id_ = 0; | 111 current_trace_id_ = 0; |
110 data_ = ""; | 112 data_ = ""; |
111 | 113 |
112 // Tracing has to be restarted asynchronous, so the TracingController can | 114 // Tracing has to be restarted asynchronous, so the TracingController can |
113 // clean up. | 115 // clean up. |
114 base::MessageLoopProxy::current()->PostTask( | 116 base::MessageLoopProxy::current()->PostTask( |
115 FROM_HERE, | 117 FROM_HERE, |
116 base::Bind(&TracingManager::StartTracing, | 118 base::Bind(&TracingManager::StartTracing, |
117 weak_ptr_factory_.GetWeakPtr())); | 119 weak_ptr_factory_.GetWeakPtr())); |
118 } | 120 } |
119 | 121 |
120 void TracingManager::OnTraceDataCollected( | 122 void TracingManager::OnTraceDataCollected( |
121 const scoped_refptr<base::RefCountedString>& trace_fragment) { | 123 const scoped_refptr<base::RefCountedString>& trace_fragment) { |
122 if (current_trace_id_) | 124 if (current_trace_id_) { |
| 125 if (!data_.empty()) |
| 126 data_ += ","; |
123 data_ += trace_fragment->data(); | 127 data_ += trace_fragment->data(); |
| 128 } |
124 } | 129 } |
125 | 130 |
126 // static | 131 // static |
127 scoped_ptr<TracingManager> TracingManager::Create() { | 132 scoped_ptr<TracingManager> TracingManager::Create() { |
128 if (g_tracing_manager) | 133 if (g_tracing_manager) |
129 return scoped_ptr<TracingManager>(); | 134 return scoped_ptr<TracingManager>(); |
130 return scoped_ptr<TracingManager>(new TracingManager()); | 135 return scoped_ptr<TracingManager>(new TracingManager()); |
131 } | 136 } |
132 | 137 |
133 TracingManager* TracingManager::Get() { | 138 TracingManager* TracingManager::Get() { |
134 return g_tracing_manager; | 139 return g_tracing_manager; |
135 } | 140 } |
OLD | NEW |