Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3504)

Unified Diff: base/debug/trace_event.cc

Issue 7495031: trace_event support for thread names (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Much cleaner, using siggi's approach.p Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: base/debug/trace_event.cc
diff --git a/base/debug/trace_event.cc b/base/debug/trace_event.cc
index d467055be9646f6aea8216eaf80f89a0b68a48e4..b0cdb76cb4a539b4a0a12aaef62d9d66096850a6 100644
--- a/base/debug/trace_event.cc
+++ b/base/debug/trace_event.cc
@@ -104,6 +104,8 @@ const char* GetPhaseStr(TraceEventPhase phase) {
return "I";
case TRACE_EVENT_PHASE_END:
return "E";
+ case TRACE_EVENT_PHASE_METADATA:
+ return "M";
default:
NOTREACHED() << "Invalid phase argument";
return "?";
@@ -295,8 +297,10 @@ void TraceLog::SetEnabled(bool enabled) {
g_categories[i].enabled = enabled;
}
} // release lock
- if (!enabled)
+ if (!enabled) {
+ AddCurrentMetadataEvents();
Flush();
+ }
}
float TraceLog::GetBufferPercentFull() const {
@@ -361,6 +365,14 @@ int TraceLog::AddTraceEvent(TraceEventPhase phase,
return -1;
if (logged_events_.size() >= kTraceEventBufferSize)
return -1;
+ PlatformThreadId thread_id = PlatformThread::CurrentId();
+ if (thread_names_.find(thread_id) == thread_names_.end()) {
Sigurður Ásgeirsson 2011/08/04 12:31:39 On Windows, thread and process IDs are reused quit
nduca 2011/08/04 18:17:38 Thats an awesome idea.
+ const char* name = PlatformThread::GetName();
+ // Store something even for unnamed threads so we don't keep searching the
+ // thread_names_ map every time.
+ thread_names_[thread_id] = name ? name : "";
+ }
+
if (threshold_begin_id > -1) {
DCHECK(phase == base::debug::TRACE_EVENT_PHASE_END);
size_t begin_i = static_cast<size_t>(threshold_begin_id);
@@ -380,7 +392,7 @@ int TraceLog::AddTraceEvent(TraceEventPhase phase,
ret_begin_id = static_cast<int>(logged_events_.size());
logged_events_.push_back(
TraceEvent(static_cast<unsigned long>(base::GetCurrentProcId()),
- PlatformThread::CurrentId(),
+ thread_id,
now, phase, category, name,
arg1_name, arg1_val,
arg2_name, arg2_val,
@@ -419,6 +431,25 @@ void TraceLog::AddTraceEventEtw(TraceEventPhase phase,
}
}
+void TraceLog::AddCurrentMetadataEvents() {
+ static const TraceCategory* metadata_category =
+ GetCategoryInternal("__metadata");
+ for(base::hash_map<PlatformThreadId, std::string>::iterator it =
Sigurður Ásgeirsson 2011/08/04 12:31:39 lock_.AssertHeld(). However, I don't think you're
nduca 2011/08/04 18:17:38 Nice catch!
+ thread_names_.begin();
+ it != thread_names_.end();
+ it++) {
+ if (!it->second.empty())
+ logged_events_.push_back(
+ TraceEvent(static_cast<unsigned long>(base::GetCurrentProcId()),
+ it->first,
+ TimeTicks(), base::debug::TRACE_EVENT_PHASE_METADATA,
+ metadata_category, "thread_name",
+ "name", it->second.c_str(),
+ NULL, 0,
+ false));
+ }
+}
+
void TraceLog::Resurrect() {
StaticMemorySingletonTraits<TraceLog>::Resurrect();
}

Powered by Google App Engine
This is Rietveld 408576698