OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "components/feedback/tracing_manager.h" | 5 #include "components/feedback/tracing_manager.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/location.h" |
8 #include "base/memory/ref_counted_memory.h" | 9 #include "base/memory/ref_counted_memory.h" |
9 #include "base/message_loop/message_loop_proxy.h" | 10 #include "base/single_thread_task_runner.h" |
| 11 #include "base/thread_task_runner_handle.h" |
10 #include "components/feedback/feedback_util.h" | 12 #include "components/feedback/feedback_util.h" |
11 #include "content/public/browser/tracing_controller.h" | 13 #include "content/public/browser/tracing_controller.h" |
12 | 14 |
13 namespace { | 15 namespace { |
14 | 16 |
15 // Only once trace manager can exist at a time. | 17 // Only once trace manager can exist at a time. |
16 TracingManager* g_tracing_manager = NULL; | 18 TracingManager* g_tracing_manager = NULL; |
17 // Trace IDs start at 1 and increase. | 19 // Trace IDs start at 1 and increase. |
18 int g_next_trace_id = 1; | 20 int g_next_trace_id = 1; |
19 // Name of the file to store the tracing data as. | 21 // Name of the file to store the tracing data as. |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 } else { | 61 } else { |
60 return false; | 62 return false; |
61 } | 63 } |
62 } else { | 64 } else { |
63 std::map<int, scoped_refptr<base::RefCountedString> >::iterator data = | 65 std::map<int, scoped_refptr<base::RefCountedString> >::iterator data = |
64 trace_data_.find(id); | 66 trace_data_.find(id); |
65 if (data == trace_data_.end()) | 67 if (data == trace_data_.end()) |
66 return false; | 68 return false; |
67 | 69 |
68 // Always return the data asychronously, so the behavior is consistant. | 70 // Always return the data asychronously, so the behavior is consistant. |
69 base::MessageLoopProxy::current()->PostTask( | 71 base::ThreadTaskRunnerHandle::Get()->PostTask( |
70 FROM_HERE, | 72 FROM_HERE, base::Bind(callback, data->second)); |
71 base::Bind(callback, data->second)); | |
72 return true; | 73 return true; |
73 } | 74 } |
74 } | 75 } |
75 | 76 |
76 void TracingManager::DiscardTraceData(int id) { | 77 void TracingManager::DiscardTraceData(int id) { |
77 trace_data_.erase(id); | 78 trace_data_.erase(id); |
78 | 79 |
79 // If the trace is discarded before it is complete, clean up the accumulators. | 80 // If the trace is discarded before it is complete, clean up the accumulators. |
80 if (id == current_trace_id_) { | 81 if (id == current_trace_id_) { |
81 current_trace_id_ = 0; | 82 current_trace_id_ = 0; |
(...skipping 28 matching lines...) Expand all Loading... |
110 | 111 |
111 if (!trace_callback_.is_null()) { | 112 if (!trace_callback_.is_null()) { |
112 trace_callback_.Run(output); | 113 trace_callback_.Run(output); |
113 trace_callback_.Reset(); | 114 trace_callback_.Reset(); |
114 } | 115 } |
115 | 116 |
116 current_trace_id_ = 0; | 117 current_trace_id_ = 0; |
117 | 118 |
118 // Tracing has to be restarted asynchronous, so the TracingController can | 119 // Tracing has to be restarted asynchronous, so the TracingController can |
119 // clean up. | 120 // clean up. |
120 base::MessageLoopProxy::current()->PostTask( | 121 base::ThreadTaskRunnerHandle::Get()->PostTask( |
121 FROM_HERE, | 122 FROM_HERE, base::Bind(&TracingManager::StartTracing, |
122 base::Bind(&TracingManager::StartTracing, | 123 weak_ptr_factory_.GetWeakPtr())); |
123 weak_ptr_factory_.GetWeakPtr())); | |
124 } | 124 } |
125 | 125 |
126 // static | 126 // static |
127 scoped_ptr<TracingManager> TracingManager::Create() { | 127 scoped_ptr<TracingManager> TracingManager::Create() { |
128 if (g_tracing_manager) | 128 if (g_tracing_manager) |
129 return scoped_ptr<TracingManager>(); | 129 return scoped_ptr<TracingManager>(); |
130 return scoped_ptr<TracingManager>(new TracingManager()); | 130 return scoped_ptr<TracingManager>(new TracingManager()); |
131 } | 131 } |
132 | 132 |
133 TracingManager* TracingManager::Get() { | 133 TracingManager* TracingManager::Get() { |
134 return g_tracing_manager; | 134 return g_tracing_manager; |
135 } | 135 } |
OLD | NEW |