OLD | NEW |
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 | 4 |
5 #include "base/trace_event/trace_config.h" | 5 #include "base/trace_event/trace_config.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
43 const char kSyntheticDelaysParam[] = "synthetic_delays"; | 43 const char kSyntheticDelaysParam[] = "synthetic_delays"; |
44 | 44 |
45 const char kSyntheticDelayCategoryFilterPrefix[] = "DELAY("; | 45 const char kSyntheticDelayCategoryFilterPrefix[] = "DELAY("; |
46 | 46 |
47 // String parameters that is used to parse memory dump config in trace config | 47 // String parameters that is used to parse memory dump config in trace config |
48 // string. | 48 // string. |
49 const char kMemoryDumpConfigParam[] = "memory_dump_config"; | 49 const char kMemoryDumpConfigParam[] = "memory_dump_config"; |
50 const char kTriggersParam[] = "triggers"; | 50 const char kTriggersParam[] = "triggers"; |
51 const char kPeriodicIntervalParam[] = "periodic_interval_ms"; | 51 const char kPeriodicIntervalParam[] = "periodic_interval_ms"; |
52 const char kModeParam[] = "mode"; | 52 const char kModeParam[] = "mode"; |
| 53 const char kMinAllocationSize[] = "min_allocation_size_bytes"; |
53 | 54 |
54 // Default configuration of memory dumps. | 55 // Default configuration of memory dumps. |
55 const TraceConfig::MemoryDumpTriggerConfig kDefaultHeavyMemoryDumpTrigger = { | 56 const TraceConfig::MemoryDumpTriggerConfig kDefaultHeavyMemoryDumpTrigger = { |
56 2000, // periodic_interval_ms | 57 2000, // periodic_interval_ms |
57 MemoryDumpLevelOfDetail::DETAILED}; | 58 MemoryDumpLevelOfDetail::DETAILED}; |
58 const TraceConfig::MemoryDumpTriggerConfig kDefaultLightMemoryDumpTrigger = { | 59 const TraceConfig::MemoryDumpTriggerConfig kDefaultLightMemoryDumpTrigger = { |
59 250, // periodic_interval_ms | 60 250, // periodic_interval_ms |
60 MemoryDumpLevelOfDetail::LIGHT}; | 61 MemoryDumpLevelOfDetail::LIGHT}; |
61 | 62 |
62 class ConvertableTraceConfigToTraceFormat | 63 class ConvertableTraceConfigToTraceFormat |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
116 else | 117 else |
117 InitializeDefault(); | 118 InitializeDefault(); |
118 } | 119 } |
119 | 120 |
120 TraceConfig::TraceConfig(const TraceConfig& tc) | 121 TraceConfig::TraceConfig(const TraceConfig& tc) |
121 : record_mode_(tc.record_mode_), | 122 : record_mode_(tc.record_mode_), |
122 enable_sampling_(tc.enable_sampling_), | 123 enable_sampling_(tc.enable_sampling_), |
123 enable_systrace_(tc.enable_systrace_), | 124 enable_systrace_(tc.enable_systrace_), |
124 enable_argument_filter_(tc.enable_argument_filter_), | 125 enable_argument_filter_(tc.enable_argument_filter_), |
125 memory_dump_config_(tc.memory_dump_config_), | 126 memory_dump_config_(tc.memory_dump_config_), |
| 127 min_allocation_size_bytes_(tc.min_allocation_size_bytes_), |
126 included_categories_(tc.included_categories_), | 128 included_categories_(tc.included_categories_), |
127 disabled_categories_(tc.disabled_categories_), | 129 disabled_categories_(tc.disabled_categories_), |
128 excluded_categories_(tc.excluded_categories_), | 130 excluded_categories_(tc.excluded_categories_), |
129 synthetic_delays_(tc.synthetic_delays_) {} | 131 synthetic_delays_(tc.synthetic_delays_) {} |
130 | 132 |
131 TraceConfig::~TraceConfig() { | 133 TraceConfig::~TraceConfig() { |
132 } | 134 } |
133 | 135 |
134 TraceConfig& TraceConfig::operator=(const TraceConfig& rhs) { | 136 TraceConfig& TraceConfig::operator=(const TraceConfig& rhs) { |
135 if (this == &rhs) | 137 if (this == &rhs) |
136 return *this; | 138 return *this; |
137 | 139 |
138 record_mode_ = rhs.record_mode_; | 140 record_mode_ = rhs.record_mode_; |
139 enable_sampling_ = rhs.enable_sampling_; | 141 enable_sampling_ = rhs.enable_sampling_; |
140 enable_systrace_ = rhs.enable_systrace_; | 142 enable_systrace_ = rhs.enable_systrace_; |
141 enable_argument_filter_ = rhs.enable_argument_filter_; | 143 enable_argument_filter_ = rhs.enable_argument_filter_; |
142 memory_dump_config_ = rhs.memory_dump_config_; | 144 memory_dump_config_ = rhs.memory_dump_config_; |
| 145 min_allocation_size_bytes_ = rhs.min_allocation_size_bytes_; |
143 included_categories_ = rhs.included_categories_; | 146 included_categories_ = rhs.included_categories_; |
144 disabled_categories_ = rhs.disabled_categories_; | 147 disabled_categories_ = rhs.disabled_categories_; |
145 excluded_categories_ = rhs.excluded_categories_; | 148 excluded_categories_ = rhs.excluded_categories_; |
146 synthetic_delays_ = rhs.synthetic_delays_; | 149 synthetic_delays_ = rhs.synthetic_delays_; |
147 return *this; | 150 return *this; |
148 } | 151 } |
149 | 152 |
150 const TraceConfig::StringList& TraceConfig::GetSyntheticDelayValues() const { | 153 const TraceConfig::StringList& TraceConfig::GetSyntheticDelayValues() const { |
151 return synthetic_delays_; | 154 return synthetic_delays_; |
152 } | 155 } |
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 continue; | 512 continue; |
510 } | 513 } |
511 DCHECK_GT(interval, 0); | 514 DCHECK_GT(interval, 0); |
512 dump_config.periodic_interval_ms = static_cast<uint32_t>(interval); | 515 dump_config.periodic_interval_ms = static_cast<uint32_t>(interval); |
513 std::string level_of_detail_str; | 516 std::string level_of_detail_str; |
514 trigger->GetString(kModeParam, &level_of_detail_str); | 517 trigger->GetString(kModeParam, &level_of_detail_str); |
515 dump_config.level_of_detail = | 518 dump_config.level_of_detail = |
516 StringToMemoryDumpLevelOfDetail(level_of_detail_str); | 519 StringToMemoryDumpLevelOfDetail(level_of_detail_str); |
517 memory_dump_config_.push_back(dump_config); | 520 memory_dump_config_.push_back(dump_config); |
518 } | 521 } |
| 522 |
| 523 int min_size_bytes = 0; |
| 524 if (memory_dump_config.GetInteger(kMinAllocationSize, &min_size_bytes) |
| 525 && min_size_bytes >= 0) { |
| 526 min_allocation_size_bytes_ = static_cast<size_t>(min_size_bytes); |
| 527 } else { |
| 528 min_allocation_size_bytes_ = kDefaultMinAllocationSizeBytes; |
| 529 } |
| 530 |
519 } | 531 } |
520 | 532 |
521 void TraceConfig::SetDefaultMemoryDumpConfig() { | 533 void TraceConfig::SetDefaultMemoryDumpConfig() { |
522 memory_dump_config_.clear(); | 534 memory_dump_config_.clear(); |
523 memory_dump_config_.push_back(kDefaultHeavyMemoryDumpTrigger); | 535 memory_dump_config_.push_back(kDefaultHeavyMemoryDumpTrigger); |
524 memory_dump_config_.push_back(kDefaultLightMemoryDumpTrigger); | 536 memory_dump_config_.push_back(kDefaultLightMemoryDumpTrigger); |
| 537 min_allocation_size_bytes_ = kDefaultMinAllocationSizeBytes; |
525 } | 538 } |
526 | 539 |
527 void TraceConfig::ToDict(base::DictionaryValue& dict) const { | 540 void TraceConfig::ToDict(base::DictionaryValue& dict) const { |
528 switch (record_mode_) { | 541 switch (record_mode_) { |
529 case RECORD_UNTIL_FULL: | 542 case RECORD_UNTIL_FULL: |
530 dict.SetString(kRecordModeParam, kRecordUntilFull); | 543 dict.SetString(kRecordModeParam, kRecordUntilFull); |
531 break; | 544 break; |
532 case RECORD_CONTINUOUSLY: | 545 case RECORD_CONTINUOUSLY: |
533 dict.SetString(kRecordModeParam, kRecordContinuously); | 546 dict.SetString(kRecordModeParam, kRecordContinuously); |
534 break; | 547 break; |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 trigger_dict->SetInteger(kPeriodicIntervalParam, | 588 trigger_dict->SetInteger(kPeriodicIntervalParam, |
576 static_cast<int>(config.periodic_interval_ms)); | 589 static_cast<int>(config.periodic_interval_ms)); |
577 trigger_dict->SetString( | 590 trigger_dict->SetString( |
578 kModeParam, MemoryDumpLevelOfDetailToString(config.level_of_detail)); | 591 kModeParam, MemoryDumpLevelOfDetailToString(config.level_of_detail)); |
579 triggers_list->Append(std::move(trigger_dict)); | 592 triggers_list->Append(std::move(trigger_dict)); |
580 } | 593 } |
581 | 594 |
582 // Empty triggers will still be specified explicitly since it means that | 595 // Empty triggers will still be specified explicitly since it means that |
583 // the periodic dumps are not enabled. | 596 // the periodic dumps are not enabled. |
584 memory_dump_config->Set(kTriggersParam, std::move(triggers_list)); | 597 memory_dump_config->Set(kTriggersParam, std::move(triggers_list)); |
| 598 |
| 599 if (min_allocation_size_bytes_ != kDefaultMinAllocationSizeBytes) |
| 600 memory_dump_config->SetInteger(kMinAllocationSize, |
| 601 min_allocation_size_bytes_); |
585 dict.Set(kMemoryDumpConfigParam, std::move(memory_dump_config)); | 602 dict.Set(kMemoryDumpConfigParam, std::move(memory_dump_config)); |
586 } | 603 } |
587 } | 604 } |
588 | 605 |
589 std::string TraceConfig::ToTraceOptionsString() const { | 606 std::string TraceConfig::ToTraceOptionsString() const { |
590 std::string ret; | 607 std::string ret; |
591 switch (record_mode_) { | 608 switch (record_mode_) { |
592 case RECORD_UNTIL_FULL: | 609 case RECORD_UNTIL_FULL: |
593 ret = kRecordUntilFull; | 610 ret = kRecordUntilFull; |
594 break; | 611 break; |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 str.at(0) == ' ' || | 689 str.at(0) == ' ' || |
673 str.at(str.length() - 1) == ' '; | 690 str.at(str.length() - 1) == ' '; |
674 } | 691 } |
675 | 692 |
676 bool TraceConfig::HasIncludedPatterns() const { | 693 bool TraceConfig::HasIncludedPatterns() const { |
677 return !included_categories_.empty(); | 694 return !included_categories_.empty(); |
678 } | 695 } |
679 | 696 |
680 } // namespace trace_event | 697 } // namespace trace_event |
681 } // namespace base | 698 } // namespace base |
OLD | NEW |