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

Unified Diff: base/debug/trace_event_impl.cc

Issue 98953002: Configure synthetic delays through TraceLog (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Only use category=value syntax for delays. Created 7 years 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
« no previous file with comments | « base/debug/trace_event_impl.h ('k') | base/debug/trace_event_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/trace_event_impl.cc
diff --git a/base/debug/trace_event_impl.cc b/base/debug/trace_event_impl.cc
index f9ff510c575356369d8af2edd8c1ad07ad29807d..611852a41d86a619f7e3ca9e965bcda1878393a9 100644
--- a/base/debug/trace_event_impl.cc
+++ b/base/debug/trace_event_impl.cc
@@ -11,6 +11,7 @@
#include "base/command_line.h"
#include "base/debug/leak_annotations.h"
#include "base/debug/trace_event.h"
+#include "base/debug/trace_event_synthetic_delay.h"
#include "base/format_macros.h"
#include "base/json/string_escape.h"
#include "base/lazy_instance.h"
@@ -1200,6 +1201,31 @@ void TraceLog::UpdateCategoryGroupEnabledFlags() {
UpdateCategoryGroupEnabledFlag(i);
}
+void TraceLog::UpdateSyntheticDelaysFromCategoryFilter() {
+ ResetTraceEventSyntheticDelays();
+ const CategoryFilter::DelayValueList& delays =
+ category_filter_.GetSyntheticDelayValues();
+ CategoryFilter::DelayValueList::const_iterator ci;
+ for (ci = delays.begin(); ci != delays.end(); ++ci) {
+ TraceEventSyntheticDelay* delay =
+ TraceEventSyntheticDelay::Lookup(ci->first);
+ StringTokenizer tokens(ci->second, ";");
+ while (tokens.GetNext()) {
+ double target_duration;
+ if (StringToDouble(tokens.token(), &target_duration)) {
+ delay->SetTargetDuration(
+ TimeDelta::FromMicroseconds(target_duration * 1e6));
+ } else if (tokens.token() == "static") {
+ delay->SetMode(TraceEventSyntheticDelay::STATIC);
+ } else if (tokens.token() == "oneshot") {
+ delay->SetMode(TraceEventSyntheticDelay::ONE_SHOT);
+ } else if (tokens.token() == "alternating") {
+ delay->SetMode(TraceEventSyntheticDelay::ALTERNATING);
+ }
+ }
+ }
+}
+
const unsigned char* TraceLog::GetCategoryGroupEnabledInternal(
const char* category_group) {
DCHECK(!strchr(category_group, '"')) <<
@@ -1290,6 +1316,7 @@ void TraceLog::SetEnabled(const CategoryFilter& category_filter,
category_filter_ = CategoryFilter(category_filter);
UpdateCategoryGroupEnabledFlags();
+ UpdateSyntheticDelaysFromCategoryFilter();
if ((options & ENABLE_SAMPLING) || (options & MONITOR_SAMPLING)) {
sampling_thread_.reset(new TraceSamplingThread);
@@ -2156,7 +2183,8 @@ CategoryFilter::CategoryFilter(const std::string& filter_string) {
CategoryFilter::CategoryFilter(const CategoryFilter& cf)
: included_(cf.included_),
disabled_(cf.disabled_),
- excluded_(cf.excluded_) {
+ excluded_(cf.excluded_),
+ delays_(cf.delays_) {
}
CategoryFilter::~CategoryFilter() {
@@ -2169,6 +2197,7 @@ CategoryFilter& CategoryFilter::operator=(const CategoryFilter& rhs) {
included_ = rhs.included_;
disabled_ = rhs.disabled_;
excluded_ = rhs.excluded_;
+ delays_ = rhs.delays_;
return *this;
}
@@ -2181,8 +2210,13 @@ void CategoryFilter::Initialize(const std::string& filter_string) {
// Ignore empty categories.
if (category.empty())
continue;
- // Excluded categories start with '-'.
- if (category.at(0) == '-') {
+ std::vector<std::string> parts;
+ SplitString(category, '=', &parts);
+ if (parts.size() == 2) {
+ // Synthetic delays are of the form 'delay=options'.
+ delays_.push_back(DelayValue(parts[0], parts[1]));
+ } else if (category.at(0) == '-') {
+ // Excluded categories start with '-'.
// Remove '-' from category string.
category = category.substr(1);
excluded_.push_back(category);
@@ -2209,11 +2243,25 @@ void CategoryFilter::WriteString(const StringList& values,
}
}
+void CategoryFilter::WriteString(const DelayValueList& delays,
+ std::string* out) const {
+ bool prepend_comma = !out->empty();
+ int token_cnt = 0;
+ for (DelayValueList::const_iterator ci = delays.begin();
+ ci != delays.end(); ++ci) {
+ if (token_cnt > 0 || prepend_comma)
+ StringAppendF(out, ",");
+ StringAppendF(out, "%s=%s", ci->first.c_str(), ci->second.c_str());
+ ++token_cnt;
+ }
+}
+
std::string CategoryFilter::ToString() const {
std::string filter_string;
WriteString(included_, &filter_string, true);
WriteString(disabled_, &filter_string, true);
WriteString(excluded_, &filter_string, false);
+ WriteString(delays_, &filter_string);
return filter_string;
}
@@ -2277,6 +2325,11 @@ void CategoryFilter::Clear() {
excluded_.clear();
}
+const CategoryFilter::DelayValueList&
+ CategoryFilter::GetSyntheticDelayValues() const {
+ return delays_;
+}
+
} // namespace debug
} // namespace base
« no previous file with comments | « base/debug/trace_event_impl.h ('k') | base/debug/trace_event_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698