Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 #include "content/browser/tracing/tracing_controller_impl.h" | 4 #include "content/browser/tracing/tracing_controller_impl.h" |
| 5 | 5 |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/files/file_util.h" | 7 #include "base/files/file_util.h" |
| 8 #include "base/json/string_escape.h" | 8 #include "base/json/string_escape.h" |
| 9 #include "base/macros.h" | 9 #include "base/macros.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 168 pending_trace_log_status_ack_count_(0), | 168 pending_trace_log_status_ack_count_(0), |
| 169 maximum_trace_buffer_usage_(0), | 169 maximum_trace_buffer_usage_(0), |
| 170 approximate_event_count_(0), | 170 approximate_event_count_(0), |
| 171 // Tracing may have been enabled by ContentMainRunner if kTraceStartup | 171 // Tracing may have been enabled by ContentMainRunner if kTraceStartup |
| 172 // is specified in command line. | 172 // is specified in command line. |
| 173 #if defined(OS_CHROMEOS) || defined(OS_WIN) | 173 #if defined(OS_CHROMEOS) || defined(OS_WIN) |
| 174 is_system_tracing_(false), | 174 is_system_tracing_(false), |
| 175 #endif | 175 #endif |
| 176 is_recording_(TraceLog::GetInstance()->IsEnabled()), | 176 is_recording_(TraceLog::GetInstance()->IsEnabled()), |
| 177 is_monitoring_(false) { | 177 is_monitoring_(false) { |
| 178 base::trace_event::MemoryDumpManager::GetInstance()->SetDelegate(this); | |
| 178 } | 179 } |
| 179 | 180 |
| 180 TracingControllerImpl::~TracingControllerImpl() { | 181 TracingControllerImpl::~TracingControllerImpl() { |
| 181 // This is a Leaky instance. | 182 // This is a Leaky instance. |
| 182 NOTREACHED(); | 183 NOTREACHED(); |
| 183 } | 184 } |
| 184 | 185 |
| 185 TracingControllerImpl* TracingControllerImpl::GetInstance() { | 186 TracingControllerImpl* TracingControllerImpl::GetInstance() { |
| 186 return g_controller.Pointer(); | 187 return g_controller.Pointer(); |
| 187 } | 188 } |
| (...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 872 DCHECK(tracing_uis_.find(tracing_ui) == tracing_uis_.end()); | 873 DCHECK(tracing_uis_.find(tracing_ui) == tracing_uis_.end()); |
| 873 tracing_uis_.insert(tracing_ui); | 874 tracing_uis_.insert(tracing_ui); |
| 874 } | 875 } |
| 875 | 876 |
| 876 void TracingControllerImpl::UnregisterTracingUI(TracingUI* tracing_ui) { | 877 void TracingControllerImpl::UnregisterTracingUI(TracingUI* tracing_ui) { |
| 877 std::set<TracingUI*>::iterator it = tracing_uis_.find(tracing_ui); | 878 std::set<TracingUI*>::iterator it = tracing_uis_.find(tracing_ui); |
| 878 DCHECK(it != tracing_uis_.end()); | 879 DCHECK(it != tracing_uis_.end()); |
| 879 tracing_uis_.erase(it); | 880 tracing_uis_.erase(it); |
| 880 } | 881 } |
| 881 | 882 |
| 883 void TracingControllerImpl::RequestGlobalMemoryDump( | |
| 884 const base::trace_event::MemoryDumpRequestArgs& args, | |
| 885 const base::trace_event::MemoryDumpCallback& callback) { | |
| 886 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | |
| 887 BrowserThread::PostTask( | |
| 888 BrowserThread::UI, FROM_HERE, | |
| 889 base::Bind(&TracingControllerImpl::RequestGlobalMemoryDump, | |
| 890 base::Unretained(this), args, callback)); | |
| 891 return; | |
| 892 } | |
| 893 // TODO(primiano): send a local dump request to each of the child processes | |
| 894 // and do the bookkeping to keep track of the outstanding requests. | |
|
Sami
2015/03/31 14:54:36
s/bookkeping/bookkeeping/
Primiano Tucci (use gerrit)
2015/04/01 11:05:41
Done.
| |
| 895 // Also, at this point, this should check for collisions and bail out if a | |
| 896 // global dump is requested while another is already in progress. | |
| 897 NOTIMPLEMENTED(); | |
| 898 } | |
| 899 | |
| 900 void TracingControllerImpl::OnProcessMemoryDumpResponse( | |
| 901 TraceMessageFilter* trace_message_filter, | |
| 902 uint64 dump_guid, | |
| 903 bool success) { | |
| 904 if (!BrowserThread::CurrentlyOn(BrowserThread::UI)) { | |
| 905 BrowserThread::PostTask( | |
| 906 BrowserThread::UI, FROM_HERE, | |
| 907 base::Bind(&TracingControllerImpl::OnProcessMemoryDumpResponse, | |
| 908 base::Unretained(this), | |
| 909 make_scoped_refptr(trace_message_filter), dump_guid, | |
| 910 success)); | |
| 911 return; | |
| 912 } | |
| 913 // TODO(primiano): update the bookkeping structs and, if this was the response | |
|
Sami
2015/03/31 14:54:36
s/bookkeping/bookkeeping/
Primiano Tucci (use gerrit)
2015/04/01 11:05:41
Done.
| |
| 914 // from the last pending child, fire the completion callback, which in turn | |
| 915 // will cause a GlobalMemoryDumpResponse message to be sent back to the child, | |
| 916 // if this global dump was NOT initiated by the browser. | |
| 917 NOTIMPLEMENTED(); | |
| 918 } | |
| 919 | |
| 882 void TracingControllerImpl::OnMonitoringStateChanged(bool is_monitoring) { | 920 void TracingControllerImpl::OnMonitoringStateChanged(bool is_monitoring) { |
| 883 if (is_monitoring_ == is_monitoring) | 921 if (is_monitoring_ == is_monitoring) |
| 884 return; | 922 return; |
| 885 | 923 |
| 886 is_monitoring_ = is_monitoring; | 924 is_monitoring_ = is_monitoring; |
| 887 #if !defined(OS_ANDROID) | 925 #if !defined(OS_ANDROID) |
| 888 for (std::set<TracingUI*>::iterator it = tracing_uis_.begin(); | 926 for (std::set<TracingUI*>::iterator it = tracing_uis_.begin(); |
| 889 it != tracing_uis_.end(); it++) { | 927 it != tracing_uis_.end(); it++) { |
| 890 (*it)->OnMonitoringStateChanged(is_monitoring); | 928 (*it)->OnMonitoringStateChanged(is_monitoring); |
| 891 } | 929 } |
| 892 #endif | 930 #endif |
| 893 } | 931 } |
| 894 | 932 |
| 895 } // namespace content | 933 } // namespace content |
| OLD | NEW |