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 29 matching lines...) Expand all Loading... | |
40 const char kEnableArgumentFilterParam[] = "enable_argument_filter"; | 40 const char kEnableArgumentFilterParam[] = "enable_argument_filter"; |
41 const char kIncludedCategoriesParam[] = "included_categories"; | 41 const char kIncludedCategoriesParam[] = "included_categories"; |
42 const char kExcludedCategoriesParam[] = "excluded_categories"; | 42 const char kExcludedCategoriesParam[] = "excluded_categories"; |
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 kAllowedDumpModesParam[] = "allowed_dump_modes"; | |
50 const char kTriggersParam[] = "triggers"; | 51 const char kTriggersParam[] = "triggers"; |
51 const char kPeriodicIntervalParam[] = "periodic_interval_ms"; | 52 const char kPeriodicIntervalParam[] = "periodic_interval_ms"; |
52 const char kModeParam[] = "mode"; | 53 const char kModeParam[] = "mode"; |
53 const char kHeapProfilerOptions[] = "heap_profiler_options"; | 54 const char kHeapProfilerOptions[] = "heap_profiler_options"; |
54 const char kBreakdownThresholdBytes[] = "breakdown_threshold_bytes"; | 55 const char kBreakdownThresholdBytes[] = "breakdown_threshold_bytes"; |
55 | 56 |
56 // Default configuration of memory dumps. | 57 // Default configuration of memory dumps. |
57 const TraceConfig::MemoryDumpConfig::Trigger kDefaultHeavyMemoryDumpTrigger = { | 58 const TraceConfig::MemoryDumpConfig::Trigger kDefaultHeavyMemoryDumpTrigger = { |
58 2000, // periodic_interval_ms | 59 2000, // periodic_interval_ms |
59 MemoryDumpLevelOfDetail::DETAILED}; | 60 MemoryDumpLevelOfDetail::DETAILED}; |
60 const TraceConfig::MemoryDumpConfig::Trigger kDefaultLightMemoryDumpTrigger = { | 61 const TraceConfig::MemoryDumpConfig::Trigger kDefaultLightMemoryDumpTrigger = { |
61 250, // periodic_interval_ms | 62 250, // periodic_interval_ms |
62 MemoryDumpLevelOfDetail::LIGHT}; | 63 MemoryDumpLevelOfDetail::LIGHT}; |
63 | 64 |
64 class ConvertableTraceConfigToTraceFormat | 65 class ConvertableTraceConfigToTraceFormat |
65 : public base::trace_event::ConvertableToTraceFormat { | 66 : public base::trace_event::ConvertableToTraceFormat { |
66 public: | 67 public: |
67 explicit ConvertableTraceConfigToTraceFormat(const TraceConfig& trace_config) | 68 explicit ConvertableTraceConfigToTraceFormat(const TraceConfig& trace_config) |
68 : trace_config_(trace_config) {} | 69 : trace_config_(trace_config) {} |
69 ~ConvertableTraceConfigToTraceFormat() override {} | 70 ~ConvertableTraceConfigToTraceFormat() override {} |
70 void AppendAsTraceFormat(std::string* out) const override { | 71 void AppendAsTraceFormat(std::string* out) const override { |
71 out->append(trace_config_.ToString()); | 72 out->append(trace_config_.ToString()); |
72 } | 73 } |
73 | 74 |
74 private: | 75 private: |
75 const TraceConfig trace_config_; | 76 const TraceConfig trace_config_; |
76 }; | 77 }; |
77 | 78 |
79 std::set<MemoryDumpLevelOfDetail> GetDefaultAllowedMemoryDumpModes() { | |
80 const MemoryDumpLevelOfDetail kDefaultAllowedDumpModes[] = { | |
81 MemoryDumpLevelOfDetail::BACKGROUND, MemoryDumpLevelOfDetail::LIGHT, | |
82 MemoryDumpLevelOfDetail::DETAILED}; | |
83 std::set<MemoryDumpLevelOfDetail> modes(kDefaultAllowedDumpModes, | |
Primiano Tucci (use gerrit)
2016/06/09 18:46:39
Hmm I'll make this a bit more self-maintaining and
ssid
2016/06/09 21:34:15
didn't know I could iterate here, thanks.
| |
84 kDefaultAllowedDumpModes + 3); | |
85 // To keep the |kDefaultAllowedDumpModes| updated with new modes added. | |
86 DCHECK_EQ(static_cast<uint32_t>(MemoryDumpLevelOfDetail::LAST), | |
Primiano Tucci (use gerrit)
2016/06/09 18:46:39
at which point you get rid of the dcheck
ssid
2016/06/09 21:34:15
Done.
| |
87 modes.size() - 1); | |
88 return modes; | |
89 } | |
90 | |
78 } // namespace | 91 } // namespace |
79 | 92 |
80 | 93 |
81 TraceConfig::MemoryDumpConfig::HeapProfiler::HeapProfiler() : | 94 TraceConfig::MemoryDumpConfig::HeapProfiler::HeapProfiler() : |
82 breakdown_threshold_bytes(kDefaultBreakdownThresholdBytes) {}; | 95 breakdown_threshold_bytes(kDefaultBreakdownThresholdBytes) {}; |
83 | 96 |
84 void TraceConfig::MemoryDumpConfig::HeapProfiler::Clear() { | 97 void TraceConfig::MemoryDumpConfig::HeapProfiler::Clear() { |
85 breakdown_threshold_bytes = kDefaultBreakdownThresholdBytes; | 98 breakdown_threshold_bytes = kDefaultBreakdownThresholdBytes; |
86 } | 99 } |
87 | 100 |
88 void TraceConfig::ResetMemoryDumpConfig( | 101 void TraceConfig::ResetMemoryDumpConfig( |
89 const TraceConfig::MemoryDumpConfig& memory_dump_config) { | 102 const TraceConfig::MemoryDumpConfig& memory_dump_config) { |
90 memory_dump_config_.Clear(); | 103 memory_dump_config_.Clear(); |
91 memory_dump_config_ = memory_dump_config; | 104 memory_dump_config_ = memory_dump_config; |
92 } | 105 } |
93 | 106 |
94 TraceConfig::MemoryDumpConfig::MemoryDumpConfig() {}; | 107 TraceConfig::MemoryDumpConfig::MemoryDumpConfig() {}; |
95 | 108 |
96 TraceConfig::MemoryDumpConfig::MemoryDumpConfig( | 109 TraceConfig::MemoryDumpConfig::MemoryDumpConfig( |
97 const MemoryDumpConfig& other) = default; | 110 const MemoryDumpConfig& other) = default; |
98 | 111 |
99 TraceConfig::MemoryDumpConfig::~MemoryDumpConfig() {}; | 112 TraceConfig::MemoryDumpConfig::~MemoryDumpConfig() {}; |
100 | 113 |
101 void TraceConfig::MemoryDumpConfig::Clear() { | 114 void TraceConfig::MemoryDumpConfig::Clear() { |
115 allowed_dump_modes.clear(); | |
102 triggers.clear(); | 116 triggers.clear(); |
103 heap_profiler_options.Clear(); | 117 heap_profiler_options.Clear(); |
104 } | 118 } |
105 | 119 |
106 TraceConfig::TraceConfig() { | 120 TraceConfig::TraceConfig() { |
107 InitializeDefault(); | 121 InitializeDefault(); |
108 } | 122 } |
109 | 123 |
110 TraceConfig::TraceConfig(const std::string& category_filter_string, | 124 TraceConfig::TraceConfig(const std::string& category_filter_string, |
111 const std::string& trace_options_string) { | 125 const std::string& trace_options_string) { |
(...skipping 398 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
510 ci != categories.end(); | 524 ci != categories.end(); |
511 ++ci) { | 525 ++ci) { |
512 list->AppendString(*ci); | 526 list->AppendString(*ci); |
513 } | 527 } |
514 | 528 |
515 dict.Set(param, std::move(list)); | 529 dict.Set(param, std::move(list)); |
516 } | 530 } |
517 | 531 |
518 void TraceConfig::SetMemoryDumpConfigFromConfigDict( | 532 void TraceConfig::SetMemoryDumpConfigFromConfigDict( |
519 const base::DictionaryValue& memory_dump_config) { | 533 const base::DictionaryValue& memory_dump_config) { |
534 // Set allowed dump modes. | |
535 memory_dump_config_.allowed_dump_modes.clear(); | |
536 const base::ListValue* allowed_modes_list; | |
537 if (memory_dump_config.GetList(kAllowedDumpModesParam, &allowed_modes_list)) { | |
538 for (size_t i = 0; i < allowed_modes_list->GetSize(); ++i) { | |
539 std::string level_of_detail_str; | |
540 allowed_modes_list->GetString(i, &level_of_detail_str); | |
541 memory_dump_config_.allowed_dump_modes.insert( | |
542 StringToMemoryDumpLevelOfDetail(level_of_detail_str)); | |
543 } | |
544 } else { | |
545 // If allowed modes param is not given then allow all modes by default. | |
546 memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); | |
547 } | |
548 | |
520 // Set triggers | 549 // Set triggers |
521 memory_dump_config_.triggers.clear(); | 550 memory_dump_config_.triggers.clear(); |
522 | |
523 const base::ListValue* trigger_list = nullptr; | 551 const base::ListValue* trigger_list = nullptr; |
524 if (memory_dump_config.GetList(kTriggersParam, &trigger_list) && | 552 if (memory_dump_config.GetList(kTriggersParam, &trigger_list) && |
525 trigger_list->GetSize() > 0) { | 553 trigger_list->GetSize() > 0) { |
526 for (size_t i = 0; i < trigger_list->GetSize(); ++i) { | 554 for (size_t i = 0; i < trigger_list->GetSize(); ++i) { |
527 const base::DictionaryValue* trigger = nullptr; | 555 const base::DictionaryValue* trigger = nullptr; |
528 if (!trigger_list->GetDictionary(i, &trigger)) | 556 if (!trigger_list->GetDictionary(i, &trigger)) |
529 continue; | 557 continue; |
530 | 558 |
531 MemoryDumpConfig::Trigger dump_config; | 559 MemoryDumpConfig::Trigger dump_config; |
532 int interval = 0; | 560 int interval = 0; |
(...skipping 25 matching lines...) Expand all Loading... | |
558 memory_dump_config_.heap_profiler_options.breakdown_threshold_bytes = | 586 memory_dump_config_.heap_profiler_options.breakdown_threshold_bytes = |
559 MemoryDumpConfig::HeapProfiler::kDefaultBreakdownThresholdBytes; | 587 MemoryDumpConfig::HeapProfiler::kDefaultBreakdownThresholdBytes; |
560 } | 588 } |
561 } | 589 } |
562 } | 590 } |
563 | 591 |
564 void TraceConfig::SetDefaultMemoryDumpConfig() { | 592 void TraceConfig::SetDefaultMemoryDumpConfig() { |
565 memory_dump_config_.Clear(); | 593 memory_dump_config_.Clear(); |
566 memory_dump_config_.triggers.push_back(kDefaultHeavyMemoryDumpTrigger); | 594 memory_dump_config_.triggers.push_back(kDefaultHeavyMemoryDumpTrigger); |
567 memory_dump_config_.triggers.push_back(kDefaultLightMemoryDumpTrigger); | 595 memory_dump_config_.triggers.push_back(kDefaultLightMemoryDumpTrigger); |
596 memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); | |
568 } | 597 } |
569 | 598 |
570 void TraceConfig::ToDict(base::DictionaryValue& dict) const { | 599 void TraceConfig::ToDict(base::DictionaryValue& dict) const { |
571 switch (record_mode_) { | 600 switch (record_mode_) { |
572 case RECORD_UNTIL_FULL: | 601 case RECORD_UNTIL_FULL: |
573 dict.SetString(kRecordModeParam, kRecordUntilFull); | 602 dict.SetString(kRecordModeParam, kRecordUntilFull); |
574 break; | 603 break; |
575 case RECORD_CONTINUOUSLY: | 604 case RECORD_CONTINUOUSLY: |
576 dict.SetString(kRecordModeParam, kRecordContinuously); | 605 dict.SetString(kRecordModeParam, kRecordContinuously); |
577 break; | 606 break; |
(...skipping 26 matching lines...) Expand all Loading... | |
604 categories.insert(categories.end(), | 633 categories.insert(categories.end(), |
605 disabled_categories_.begin(), | 634 disabled_categories_.begin(), |
606 disabled_categories_.end()); | 635 disabled_categories_.end()); |
607 AddCategoryToDict(dict, kIncludedCategoriesParam, categories); | 636 AddCategoryToDict(dict, kIncludedCategoriesParam, categories); |
608 AddCategoryToDict(dict, kExcludedCategoriesParam, excluded_categories_); | 637 AddCategoryToDict(dict, kExcludedCategoriesParam, excluded_categories_); |
609 AddCategoryToDict(dict, kSyntheticDelaysParam, synthetic_delays_); | 638 AddCategoryToDict(dict, kSyntheticDelaysParam, synthetic_delays_); |
610 | 639 |
611 if (IsCategoryEnabled(MemoryDumpManager::kTraceCategory)) { | 640 if (IsCategoryEnabled(MemoryDumpManager::kTraceCategory)) { |
612 std::unique_ptr<base::DictionaryValue> memory_dump_config( | 641 std::unique_ptr<base::DictionaryValue> memory_dump_config( |
613 new base::DictionaryValue()); | 642 new base::DictionaryValue()); |
643 std::unique_ptr<base::ListValue> allowed_modes_list(new base::ListValue()); | |
644 for (MemoryDumpLevelOfDetail dump_mode : | |
645 memory_dump_config_.allowed_dump_modes) { | |
646 allowed_modes_list->AppendString( | |
647 MemoryDumpLevelOfDetailToString(dump_mode)); | |
648 } | |
649 memory_dump_config->Set(kAllowedDumpModesParam, | |
650 std::move(allowed_modes_list)); | |
651 | |
614 std::unique_ptr<base::ListValue> triggers_list(new base::ListValue()); | 652 std::unique_ptr<base::ListValue> triggers_list(new base::ListValue()); |
615 for (const MemoryDumpConfig::Trigger& config | 653 for (const MemoryDumpConfig::Trigger& config |
616 : memory_dump_config_.triggers) { | 654 : memory_dump_config_.triggers) { |
617 std::unique_ptr<base::DictionaryValue> trigger_dict( | 655 std::unique_ptr<base::DictionaryValue> trigger_dict( |
618 new base::DictionaryValue()); | 656 new base::DictionaryValue()); |
619 trigger_dict->SetInteger(kPeriodicIntervalParam, | 657 trigger_dict->SetInteger(kPeriodicIntervalParam, |
620 static_cast<int>(config.periodic_interval_ms)); | 658 static_cast<int>(config.periodic_interval_ms)); |
621 trigger_dict->SetString( | 659 trigger_dict->SetString( |
622 kModeParam, MemoryDumpLevelOfDetailToString(config.level_of_detail)); | 660 kModeParam, MemoryDumpLevelOfDetailToString(config.level_of_detail)); |
623 triggers_list->Append(std::move(trigger_dict)); | 661 triggers_list->Append(std::move(trigger_dict)); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
727 str.at(0) == ' ' || | 765 str.at(0) == ' ' || |
728 str.at(str.length() - 1) == ' '; | 766 str.at(str.length() - 1) == ' '; |
729 } | 767 } |
730 | 768 |
731 bool TraceConfig::HasIncludedPatterns() const { | 769 bool TraceConfig::HasIncludedPatterns() const { |
732 return !included_categories_.empty(); | 770 return !included_categories_.empty(); |
733 } | 771 } |
734 | 772 |
735 } // namespace trace_event | 773 } // namespace trace_event |
736 } // namespace base | 774 } // namespace base |
OLD | NEW |