| 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 <algorithm> | 6 #include <algorithm> | 
| 7 #include <memory> | 7 #include <memory> | 
| 8 #include <utility> | 8 #include <utility> | 
| 9 | 9 | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 59 #include "content/browser/tracing/etw_tracing_agent_win.h" | 59 #include "content/browser/tracing/etw_tracing_agent_win.h" | 
| 60 #endif | 60 #endif | 
| 61 | 61 | 
| 62 using base::trace_event::TraceLog; | 62 using base::trace_event::TraceLog; | 
| 63 using base::trace_event::TraceConfig; | 63 using base::trace_event::TraceConfig; | 
| 64 | 64 | 
| 65 namespace content { | 65 namespace content { | 
| 66 | 66 | 
| 67 namespace { | 67 namespace { | 
| 68 | 68 | 
| 69 base::LazyInstance<TracingControllerImpl>::Leaky g_controller = | 69 base::LazyInstance<TracingControllerImpl>::Leaky g_tracing_controller = | 
| 70     LAZY_INSTANCE_INITIALIZER; | 70     LAZY_INSTANCE_INITIALIZER; | 
| 71 | 71 | 
| 72 const char kChromeTracingAgentName[] = "chrome"; | 72 const char kChromeTracingAgentName[] = "chrome"; | 
| 73 const char kETWTracingAgentName[] = "etw"; | 73 const char kETWTracingAgentNameCopy[] = "etw"; | 
| 74 const char kArcTracingAgentName[] = "arc"; | 74 const char kArcTracingAgentNameCopy[] = "arc"; | 
| 75 const char kChromeTraceLabel[] = "traceEvents"; | 75 const char kChromeTraceLabel[] = "traceEvents"; | 
| 76 | 76 | 
| 77 const int kStartTracingTimeoutSeconds = 30; | 77 const int kStartTracingTimeoutSeconds = 30; | 
| 78 const int kIssueClockSyncTimeoutSeconds = 30; | 78 const int kIssueClockSyncTimeoutSeconds = 30; | 
| 79 const int kStopTracingRetryTimeMilliseconds = 100; | 79 const int kStopTracingRetryTimeMilliseconds = 100; | 
| 80 | 80 | 
| 81 std::string GetNetworkTypeString() { | 81 std::string GetNetworkTypeString() { | 
| 82   switch (net::NetworkChangeNotifier::GetConnectionType()) { | 82   switch (net::NetworkChangeNotifier::GetConnectionType()) { | 
| 83     case net::NetworkChangeNotifier::CONNECTION_ETHERNET: | 83     case net::NetworkChangeNotifier::CONNECTION_ETHERNET: | 
| 84       return "Ethernet"; | 84       return "Ethernet"; | 
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 138   // Deliberately leaked, like this class. | 138   // Deliberately leaked, like this class. | 
| 139   base::FileTracing::SetProvider(new FileTracingProviderImpl); | 139   base::FileTracing::SetProvider(new FileTracingProviderImpl); | 
| 140 } | 140 } | 
| 141 | 141 | 
| 142 TracingControllerImpl::~TracingControllerImpl() { | 142 TracingControllerImpl::~TracingControllerImpl() { | 
| 143   // This is a Leaky instance. | 143   // This is a Leaky instance. | 
| 144   NOTREACHED(); | 144   NOTREACHED(); | 
| 145 } | 145 } | 
| 146 | 146 | 
| 147 TracingControllerImpl* TracingControllerImpl::GetInstance() { | 147 TracingControllerImpl* TracingControllerImpl::GetInstance() { | 
| 148   return g_controller.Pointer(); | 148   return g_tracing_controller.Pointer(); | 
| 149 } | 149 } | 
| 150 | 150 | 
| 151 bool TracingControllerImpl::GetCategories( | 151 bool TracingControllerImpl::GetCategories( | 
| 152     const GetCategoriesDoneCallback& callback) { | 152     const GetCategoriesDoneCallback& callback) { | 
| 153   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 153   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| 154 | 154 | 
| 155   // Known categories come back from child processes with the EndTracingAck | 155   // Known categories come back from child processes with the EndTracingAck | 
| 156   // message. So to get known categories, just begin and end tracing immediately | 156   // message. So to get known categories, just begin and end tracing immediately | 
| 157   // afterwards. This will ping all the child processes for categories. | 157   // afterwards. This will ping all the child processes for categories. | 
| 158   pending_get_categories_done_callback_ = callback; | 158   pending_get_categories_done_callback_ = callback; | 
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 454 #if defined(OS_CHROMEOS) | 454 #if defined(OS_CHROMEOS) | 
| 455   auto* debug_daemon = | 455   auto* debug_daemon = | 
| 456       chromeos::DBusThreadManager::Get()->GetDebugDaemonClient(); | 456       chromeos::DBusThreadManager::Get()->GetDebugDaemonClient(); | 
| 457   if (agent_name == debug_daemon->GetTracingAgentName()) { | 457   if (agent_name == debug_daemon->GetTracingAgentName()) { | 
| 458     additional_tracing_agents_.push_back(debug_daemon); | 458     additional_tracing_agents_.push_back(debug_daemon); | 
| 459     debug_daemon->SetStopAgentTracingTaskRunner( | 459     debug_daemon->SetStopAgentTracingTaskRunner( | 
| 460         BrowserThread::GetBlockingPool()); | 460         BrowserThread::GetBlockingPool()); | 
| 461     return; | 461     return; | 
| 462   } | 462   } | 
| 463 | 463 | 
| 464   if (agent_name == kArcTracingAgentName) { | 464   if (agent_name == kArcTracingAgentNameCopy) { | 
| 465     additional_tracing_agents_.push_back(ArcTracingAgent::GetInstance()); | 465     additional_tracing_agents_.push_back(ArcTracingAgent::GetInstance()); | 
| 466     return; | 466     return; | 
| 467   } | 467   } | 
| 468 #elif defined(OS_WIN) | 468 #elif defined(OS_WIN) | 
| 469   auto* etw_agent = EtwTracingAgent::GetInstance(); | 469   auto* etw_agent = EtwTracingAgent::GetInstance(); | 
| 470   if (agent_name == etw_agent->GetTracingAgentName()) { | 470   if (agent_name == etw_agent->GetTracingAgentName()) { | 
| 471     additional_tracing_agents_.push_back(etw_agent); | 471     additional_tracing_agents_.push_back(etw_agent); | 
| 472     return; | 472     return; | 
| 473   } | 473   } | 
| 474 #endif | 474 #endif | 
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 562 } | 562 } | 
| 563 | 563 | 
| 564 void TracingControllerImpl::OnEndAgentTracingAcked( | 564 void TracingControllerImpl::OnEndAgentTracingAcked( | 
| 565     const std::string& agent_name, | 565     const std::string& agent_name, | 
| 566     const std::string& events_label, | 566     const std::string& events_label, | 
| 567     const scoped_refptr<base::RefCountedString>& events_str_ptr) { | 567     const scoped_refptr<base::RefCountedString>& events_str_ptr) { | 
| 568   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 568   DCHECK_CURRENTLY_ON(BrowserThread::UI); | 
| 569 | 569 | 
| 570   if (trace_data_sink_.get() && events_str_ptr && | 570   if (trace_data_sink_.get() && events_str_ptr && | 
| 571       !events_str_ptr->data().empty()) { | 571       !events_str_ptr->data().empty()) { | 
| 572     if (agent_name == kETWTracingAgentName) { | 572     if (agent_name == kETWTracingAgentNameCopy) { | 
| 573       // The Windows kernel events are kept into a JSON format stored as string | 573       // The Windows kernel events are kept into a JSON format stored as string | 
| 574       // and must not be escaped. | 574       // and must not be escaped. | 
| 575       trace_data_sink_->AddAgentTrace(events_label, events_str_ptr->data()); | 575       trace_data_sink_->AddAgentTrace(events_label, events_str_ptr->data()); | 
| 576     } else if (agent_name == kArcTracingAgentName) { | 576     } else if (agent_name == kArcTracingAgentNameCopy) { | 
| 577       // The ARC events are kept into a JSON format stored as string | 577       // The ARC events are kept into a JSON format stored as string | 
| 578       // and must not be escaped. | 578       // and must not be escaped. | 
| 579       trace_data_sink_->AddTraceChunk(events_str_ptr->data()); | 579       trace_data_sink_->AddTraceChunk(events_str_ptr->data()); | 
| 580     } else { | 580     } else { | 
| 581       trace_data_sink_->AddAgentTrace( | 581       trace_data_sink_->AddAgentTrace( | 
| 582           events_label, base::GetQuotedJSONString(events_str_ptr->data())); | 582           events_label, base::GetQuotedJSONString(events_str_ptr->data())); | 
| 583     } | 583     } | 
| 584   } | 584   } | 
| 585   std::vector<std::string> category_groups; | 585   std::vector<std::string> category_groups; | 
| 586   OnStopTracingAcked(NULL, category_groups); | 586   OnStopTracingAcked(NULL, category_groups); | 
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 890   base::Time::Now().UTCExplode(&ctime); | 890   base::Time::Now().UTCExplode(&ctime); | 
| 891   std::string time_string = base::StringPrintf( | 891   std::string time_string = base::StringPrintf( | 
| 892       "%u-%u-%u %d:%d:%d", ctime.year, ctime.month, ctime.day_of_month, | 892       "%u-%u-%u %d:%d:%d", ctime.year, ctime.month, ctime.day_of_month, | 
| 893       ctime.hour, ctime.minute, ctime.second); | 893       ctime.hour, ctime.minute, ctime.second); | 
| 894   metadata_dict->SetString("trace-capture-datetime", time_string); | 894   metadata_dict->SetString("trace-capture-datetime", time_string); | 
| 895 | 895 | 
| 896   return metadata_dict; | 896   return metadata_dict; | 
| 897 } | 897 } | 
| 898 | 898 | 
| 899 }  // namespace content | 899 }  // namespace content | 
| OLD | NEW | 
|---|