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

Side by Side Diff: content/browser/tracing/background_tracing_rule.cc

Issue 1427873003: Background tracing: Added trace_chance (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Oops Created 5 years, 1 month 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 unified diff | Download patch
« no previous file with comments | « content/browser/tracing/background_tracing_rule.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/background_tracing_rule.h" 4 #include "content/browser/tracing/background_tracing_rule.h"
5 5
6 #include <string> 6 #include <string>
7 7
8 #include "base/bind.h" 8 #include "base/bind.h"
9 #include "base/metrics/histogram_macros.h" 9 #include "base/metrics/histogram_macros.h"
10 #include "base/metrics/statistics_recorder.h" 10 #include "base/metrics/statistics_recorder.h"
11 #include "base/rand_util.h" 11 #include "base/rand_util.h"
12 #include "base/strings/safe_sprintf.h" 12 #include "base/strings/safe_sprintf.h"
13 #include "base/values.h" 13 #include "base/values.h"
14 #include "components/tracing/tracing_messages.h" 14 #include "components/tracing/tracing_messages.h"
15 #include "content/browser/tracing/background_tracing_manager_impl.h" 15 #include "content/browser/tracing/background_tracing_manager_impl.h"
16 #include "content/browser/tracing/trace_message_filter.h" 16 #include "content/browser/tracing/trace_message_filter.h"
17 #include "content/public/browser/browser_thread.h" 17 #include "content/public/browser/browser_thread.h"
18 18
19 namespace { 19 namespace {
20 20
21 const char kConfigRuleKey[] = "rule"; 21 const char kConfigRuleKey[] = "rule";
22 const char kConfigCategoryKey[] = "category"; 22 const char kConfigCategoryKey[] = "category";
23 const char kConfigRuleTriggerNameKey[] = "trigger_name"; 23 const char kConfigRuleTriggerNameKey[] = "trigger_name";
24 const char kConfigRuleTriggerDelay[] = "trigger_delay"; 24 const char kConfigRuleTriggerDelay[] = "trigger_delay";
25 const char kConfigRuleTriggerChance[] = "trigger_chance";
25 26
26 const char kConfigRuleHistogramNameKey[] = "histogram_name"; 27 const char kConfigRuleHistogramNameKey[] = "histogram_name";
27 const char kConfigRuleHistogramValueOldKey[] = "histogram_value"; 28 const char kConfigRuleHistogramValueOldKey[] = "histogram_value";
28 const char kConfigRuleHistogramValue1Key[] = "histogram_lower_value"; 29 const char kConfigRuleHistogramValue1Key[] = "histogram_lower_value";
29 const char kConfigRuleHistogramValue2Key[] = "histogram_upper_value"; 30 const char kConfigRuleHistogramValue2Key[] = "histogram_upper_value";
30 const char kConfigRuleHistogramRepeatKey[] = "histogram_repeat"; 31 const char kConfigRuleHistogramRepeatKey[] = "histogram_repeat";
31 32
32 const char kConfigRuleRandomIntervalTimeoutMin[] = "timeout_min"; 33 const char kConfigRuleRandomIntervalTimeoutMin[] = "timeout_min";
33 const char kConfigRuleRandomIntervalTimeoutMax[] = "timeout_max"; 34 const char kConfigRuleRandomIntervalTimeoutMax[] = "timeout_max";
34 35
(...skipping 13 matching lines...) Expand all
48 "ReactiveTraceAtRandomIntervals"; 49 "ReactiveTraceAtRandomIntervals";
49 50
50 const int kReactiveConfigNavigationTimeout = 30; 51 const int kReactiveConfigNavigationTimeout = 30;
51 const int kReactiveTraceRandomStartTimeMin = 60; 52 const int kReactiveTraceRandomStartTimeMin = 60;
52 const int kReactiveTraceRandomStartTimeMax = 120; 53 const int kReactiveTraceRandomStartTimeMax = 120;
53 54
54 } // namespace 55 } // namespace
55 56
56 namespace content { 57 namespace content {
57 58
58 BackgroundTracingRule::BackgroundTracingRule() {} 59 BackgroundTracingRule::BackgroundTracingRule() : trigger_chance_(1.0) {}
59 60
60 BackgroundTracingRule::~BackgroundTracingRule() {} 61 BackgroundTracingRule::~BackgroundTracingRule() {}
61 62
62 bool BackgroundTracingRule::ShouldTriggerNamedEvent( 63 bool BackgroundTracingRule::ShouldTriggerNamedEvent(
63 const std::string& named_event) const { 64 const std::string& named_event) const {
64 return false; 65 return false;
65 } 66 }
66 67
67 BackgroundTracingConfigImpl::CategoryPreset 68 BackgroundTracingConfigImpl::CategoryPreset
68 BackgroundTracingRule::GetCategoryPreset() const { 69 BackgroundTracingRule::GetCategoryPreset() const {
69 return BackgroundTracingConfigImpl::BENCHMARK; 70 return BackgroundTracingConfigImpl::BENCHMARK;
70 } 71 }
71 72
72 int BackgroundTracingRule::GetTraceTimeout() const { 73 int BackgroundTracingRule::GetTraceTimeout() const {
73 return -1; 74 return -1;
74 } 75 }
75 76
77 void BackgroundTracingRule::IntoDict(base::DictionaryValue* dict) const {
78 DCHECK(dict);
79 if (trigger_chance_ < 1.0)
80 dict->SetDouble(kConfigRuleTriggerChance, trigger_chance_);
81 }
82
83 void BackgroundTracingRule::Setup(const base::DictionaryValue* dict) {
84 dict->GetDouble(kConfigRuleTriggerChance, &trigger_chance_);
85 }
86
76 namespace { 87 namespace {
77 88
78 class NamedTriggerRule : public BackgroundTracingRule { 89 class NamedTriggerRule : public BackgroundTracingRule {
79 private: 90 private:
80 NamedTriggerRule(const std::string& named_event) 91 NamedTriggerRule(const std::string& named_event)
81 : named_event_(named_event) {} 92 : named_event_(named_event) {}
82 93
83 public: 94 public:
84 static scoped_ptr<BackgroundTracingRule> Create( 95 static scoped_ptr<BackgroundTracingRule> Create(
85 const base::DictionaryValue* dict) { 96 const base::DictionaryValue* dict) {
86 std::string trigger_name; 97 std::string trigger_name;
87 if (!dict->GetString(kConfigRuleTriggerNameKey, &trigger_name)) 98 if (!dict->GetString(kConfigRuleTriggerNameKey, &trigger_name))
88 return nullptr; 99 return nullptr;
89 100
90 return scoped_ptr<BackgroundTracingRule>( 101 return scoped_ptr<BackgroundTracingRule>(
91 new NamedTriggerRule(trigger_name)); 102 new NamedTriggerRule(trigger_name));
92 } 103 }
93 104
94 void IntoDict(base::DictionaryValue* dict) const override { 105 void IntoDict(base::DictionaryValue* dict) const override {
95 DCHECK(dict); 106 DCHECK(dict);
107 BackgroundTracingRule::IntoDict(dict);
96 dict->SetString(kConfigRuleKey, kPreemptiveConfigRuleMonitorNamed); 108 dict->SetString(kConfigRuleKey, kPreemptiveConfigRuleMonitorNamed);
97 dict->SetString(kConfigRuleTriggerNameKey, named_event_.c_str()); 109 dict->SetString(kConfigRuleTriggerNameKey, named_event_.c_str());
98 } 110 }
99 111
100 bool ShouldTriggerNamedEvent(const std::string& named_event) const override { 112 bool ShouldTriggerNamedEvent(const std::string& named_event) const override {
101 return named_event == named_event_; 113 return named_event == named_event_;
102 } 114 }
103 115
104 private: 116 private:
105 std::string named_event_; 117 std::string named_event_;
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 histogram_name_, 178 histogram_name_,
167 base::Bind(&HistogramRule::OnHistogramChangedCallback, 179 base::Bind(&HistogramRule::OnHistogramChangedCallback,
168 base::Unretained(this), histogram_name_, 180 base::Unretained(this), histogram_name_,
169 histogram_lower_value_, histogram_upper_value_, repeat_)); 181 histogram_lower_value_, histogram_upper_value_, repeat_));
170 182
171 TracingControllerImpl::GetInstance()->AddTraceMessageFilterObserver(this); 183 TracingControllerImpl::GetInstance()->AddTraceMessageFilterObserver(this);
172 } 184 }
173 185
174 void IntoDict(base::DictionaryValue* dict) const override { 186 void IntoDict(base::DictionaryValue* dict) const override {
175 DCHECK(dict); 187 DCHECK(dict);
188 BackgroundTracingRule::IntoDict(dict);
176 dict->SetString(kConfigRuleKey, kPreemptiveConfigRuleMonitorHistogram); 189 dict->SetString(kConfigRuleKey, kPreemptiveConfigRuleMonitorHistogram);
177 dict->SetString(kConfigRuleHistogramNameKey, histogram_name_.c_str()); 190 dict->SetString(kConfigRuleHistogramNameKey, histogram_name_.c_str());
178 dict->SetInteger(kConfigRuleHistogramValue1Key, histogram_lower_value_); 191 dict->SetInteger(kConfigRuleHistogramValue1Key, histogram_lower_value_);
179 dict->SetInteger(kConfigRuleHistogramValue2Key, histogram_upper_value_); 192 dict->SetInteger(kConfigRuleHistogramValue2Key, histogram_upper_value_);
180 dict->SetBoolean(kConfigRuleHistogramRepeatKey, repeat_); 193 dict->SetBoolean(kConfigRuleHistogramRepeatKey, repeat_);
181 if (trigger_delay_ != -1) 194 if (trigger_delay_ != -1)
182 dict->SetInteger(kConfigRuleTriggerDelay, trigger_delay_); 195 dict->SetInteger(kConfigRuleTriggerDelay, trigger_delay_);
183 } 196 }
184 197
185 void OnHistogramTrigger(const std::string& histogram_name) const override { 198 void OnHistogramTrigger(const std::string& histogram_name) const override {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 return nullptr; 271 return nullptr;
259 272
260 return scoped_ptr<BackgroundTracingRule>( 273 return scoped_ptr<BackgroundTracingRule>(
261 new ReactiveTraceForNSOrTriggerOrFullRule(trigger_name, 274 new ReactiveTraceForNSOrTriggerOrFullRule(trigger_name,
262 category_preset)); 275 category_preset));
263 } 276 }
264 277
265 // BackgroundTracingRule implementation 278 // BackgroundTracingRule implementation
266 void IntoDict(base::DictionaryValue* dict) const override { 279 void IntoDict(base::DictionaryValue* dict) const override {
267 DCHECK(dict); 280 DCHECK(dict);
281 BackgroundTracingRule::IntoDict(dict);
268 dict->SetString( 282 dict->SetString(
269 kConfigCategoryKey, 283 kConfigCategoryKey,
270 BackgroundTracingConfigImpl::CategoryPresetToString(category_preset_)); 284 BackgroundTracingConfigImpl::CategoryPresetToString(category_preset_));
271 dict->SetString(kConfigRuleKey, 285 dict->SetString(kConfigRuleKey,
272 kReactiveConfigRuleTraceOnNavigationUntilTriggerOrFull); 286 kReactiveConfigRuleTraceOnNavigationUntilTriggerOrFull);
273 dict->SetString(kConfigRuleTriggerNameKey, named_event_.c_str()); 287 dict->SetString(kConfigRuleTriggerNameKey, named_event_.c_str());
274 } 288 }
275 289
276 bool ShouldTriggerNamedEvent(const std::string& named_event) const override { 290 bool ShouldTriggerNamedEvent(const std::string& named_event) const override {
277 return named_event == named_event_; 291 return named_event == named_event_;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 return nullptr; 333 return nullptr;
320 334
321 return scoped_ptr<BackgroundTracingRule>( 335 return scoped_ptr<BackgroundTracingRule>(
322 new ReactiveTraceAtRandomIntervalsRule(category_preset, timeout_min, 336 new ReactiveTraceAtRandomIntervalsRule(category_preset, timeout_min,
323 timeout_max)); 337 timeout_max));
324 } 338 }
325 ~ReactiveTraceAtRandomIntervalsRule() override {} 339 ~ReactiveTraceAtRandomIntervalsRule() override {}
326 340
327 void IntoDict(base::DictionaryValue* dict) const override { 341 void IntoDict(base::DictionaryValue* dict) const override {
328 DCHECK(dict); 342 DCHECK(dict);
343 BackgroundTracingRule::IntoDict(dict);
329 dict->SetString( 344 dict->SetString(
330 kConfigCategoryKey, 345 kConfigCategoryKey,
331 BackgroundTracingConfigImpl::CategoryPresetToString(category_preset_)); 346 BackgroundTracingConfigImpl::CategoryPresetToString(category_preset_));
332 dict->SetString(kConfigRuleKey, kReactiveConfigRuleTraceAtRandomIntervals); 347 dict->SetString(kConfigRuleKey, kReactiveConfigRuleTraceAtRandomIntervals);
333 dict->SetInteger(kConfigRuleRandomIntervalTimeoutMin, timeout_min_); 348 dict->SetInteger(kConfigRuleRandomIntervalTimeoutMin, timeout_min_);
334 dict->SetInteger(kConfigRuleRandomIntervalTimeoutMax, timeout_max_); 349 dict->SetInteger(kConfigRuleRandomIntervalTimeoutMax, timeout_max_);
335 } 350 }
336 351
337 void Install() override { 352 void Install() override {
338 handle_ = BackgroundTracingManagerImpl::GetInstance()->RegisterTriggerType( 353 handle_ = BackgroundTracingManagerImpl::GetInstance()->RegisterTriggerType(
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
397 } // namespace 412 } // namespace
398 413
399 scoped_ptr<BackgroundTracingRule> BackgroundTracingRule::PreemptiveRuleFromDict( 414 scoped_ptr<BackgroundTracingRule> BackgroundTracingRule::PreemptiveRuleFromDict(
400 const base::DictionaryValue* dict) { 415 const base::DictionaryValue* dict) {
401 DCHECK(dict); 416 DCHECK(dict);
402 417
403 std::string type; 418 std::string type;
404 if (!dict->GetString(kConfigRuleKey, &type)) 419 if (!dict->GetString(kConfigRuleKey, &type))
405 return nullptr; 420 return nullptr;
406 421
422 scoped_ptr<BackgroundTracingRule> tracing_rule;
407 if (type == kPreemptiveConfigRuleMonitorNamed) 423 if (type == kPreemptiveConfigRuleMonitorNamed)
408 return NamedTriggerRule::Create(dict); 424 tracing_rule = NamedTriggerRule::Create(dict);
425 else if (type == kPreemptiveConfigRuleMonitorHistogram)
426 tracing_rule = HistogramRule::Create(dict);
409 427
410 if (type == kPreemptiveConfigRuleMonitorHistogram) 428 if (tracing_rule)
411 return HistogramRule::Create(dict); 429 tracing_rule->Setup(dict);
412 430
413 return nullptr; 431 return tracing_rule;
414 } 432 }
415 433
416 scoped_ptr<BackgroundTracingRule> BackgroundTracingRule::ReactiveRuleFromDict( 434 scoped_ptr<BackgroundTracingRule> BackgroundTracingRule::ReactiveRuleFromDict(
417 const base::DictionaryValue* dict, 435 const base::DictionaryValue* dict,
418 BackgroundTracingConfigImpl::CategoryPreset category_preset) { 436 BackgroundTracingConfigImpl::CategoryPreset category_preset) {
419 DCHECK(dict); 437 DCHECK(dict);
420 438
421 std::string type; 439 std::string type;
422 if (!dict->GetString(kConfigRuleKey, &type)) 440 if (!dict->GetString(kConfigRuleKey, &type))
423 return nullptr; 441 return nullptr;
424 442
425 if (type == kReactiveConfigRuleTraceOnNavigationUntilTriggerOrFull) 443 scoped_ptr<BackgroundTracingRule> tracing_rule;
426 return ReactiveTraceForNSOrTriggerOrFullRule::Create(dict, category_preset);
427 444
428 if (type == kReactiveConfigRuleTraceAtRandomIntervals) 445 if (type == kReactiveConfigRuleTraceOnNavigationUntilTriggerOrFull) {
429 return ReactiveTraceAtRandomIntervalsRule::Create(dict, category_preset); 446 tracing_rule =
447 ReactiveTraceForNSOrTriggerOrFullRule::Create(dict, category_preset);
448 } else if (type == kReactiveConfigRuleTraceAtRandomIntervals) {
449 tracing_rule =
450 ReactiveTraceAtRandomIntervalsRule::Create(dict, category_preset);
451 }
430 452
431 return nullptr; 453 if (tracing_rule)
454 tracing_rule->Setup(dict);
455
456 return tracing_rule;
432 } 457 }
433 458
434 } // namespace content 459 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/tracing/background_tracing_rule.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698