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 std::set<MemoryDumpLevelOfDetail> all_modes; | |
81 for (auto mode = MemoryDumpLevelOfDetail::FIRST; | |
82 mode <= MemoryDumpLevelOfDetail::LAST; | |
83 mode = static_cast<MemoryDumpLevelOfDetail>(static_cast<uint32_t>(mode) + | |
oystein (OOO til 10th of July)
2016/06/20 17:02:18
This seems a little awkward. Maybe just make 'mode
ssid
2016/06/20 19:12:06
This is awkward at only one place.
MemoryDumpLevel
ssid
2016/06/21 01:06:08
Sorry, I just understood what you said. I made mod
| |
84 1)) { | |
85 all_modes.insert(mode); | |
86 } | |
87 return all_modes; | |
88 } | |
89 | |
78 } // namespace | 90 } // namespace |
79 | 91 |
80 | 92 |
81 TraceConfig::MemoryDumpConfig::HeapProfiler::HeapProfiler() : | 93 TraceConfig::MemoryDumpConfig::HeapProfiler::HeapProfiler() : |
82 breakdown_threshold_bytes(kDefaultBreakdownThresholdBytes) {}; | 94 breakdown_threshold_bytes(kDefaultBreakdownThresholdBytes) {}; |
83 | 95 |
84 void TraceConfig::MemoryDumpConfig::HeapProfiler::Clear() { | 96 void TraceConfig::MemoryDumpConfig::HeapProfiler::Clear() { |
85 breakdown_threshold_bytes = kDefaultBreakdownThresholdBytes; | 97 breakdown_threshold_bytes = kDefaultBreakdownThresholdBytes; |
86 } | 98 } |
87 | 99 |
88 void TraceConfig::ResetMemoryDumpConfig( | 100 void TraceConfig::ResetMemoryDumpConfig( |
89 const TraceConfig::MemoryDumpConfig& memory_dump_config) { | 101 const TraceConfig::MemoryDumpConfig& memory_dump_config) { |
90 memory_dump_config_.Clear(); | 102 memory_dump_config_.Clear(); |
91 memory_dump_config_ = memory_dump_config; | 103 memory_dump_config_ = memory_dump_config; |
92 } | 104 } |
93 | 105 |
94 TraceConfig::MemoryDumpConfig::MemoryDumpConfig() {}; | 106 TraceConfig::MemoryDumpConfig::MemoryDumpConfig() {}; |
95 | 107 |
96 TraceConfig::MemoryDumpConfig::MemoryDumpConfig( | 108 TraceConfig::MemoryDumpConfig::MemoryDumpConfig( |
97 const MemoryDumpConfig& other) = default; | 109 const MemoryDumpConfig& other) = default; |
98 | 110 |
99 TraceConfig::MemoryDumpConfig::~MemoryDumpConfig() {}; | 111 TraceConfig::MemoryDumpConfig::~MemoryDumpConfig() {}; |
100 | 112 |
101 void TraceConfig::MemoryDumpConfig::Clear() { | 113 void TraceConfig::MemoryDumpConfig::Clear() { |
114 allowed_dump_modes.clear(); | |
102 triggers.clear(); | 115 triggers.clear(); |
103 heap_profiler_options.Clear(); | 116 heap_profiler_options.Clear(); |
104 } | 117 } |
105 | 118 |
106 TraceConfig::TraceConfig() { | 119 TraceConfig::TraceConfig() { |
107 InitializeDefault(); | 120 InitializeDefault(); |
108 } | 121 } |
109 | 122 |
110 TraceConfig::TraceConfig(const std::string& category_filter_string, | 123 TraceConfig::TraceConfig(const std::string& category_filter_string, |
111 const std::string& trace_options_string) { | 124 const std::string& trace_options_string) { |
(...skipping 396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
508 ci != categories.end(); | 521 ci != categories.end(); |
509 ++ci) { | 522 ++ci) { |
510 list->AppendString(*ci); | 523 list->AppendString(*ci); |
511 } | 524 } |
512 | 525 |
513 dict.Set(param, std::move(list)); | 526 dict.Set(param, std::move(list)); |
514 } | 527 } |
515 | 528 |
516 void TraceConfig::SetMemoryDumpConfigFromConfigDict( | 529 void TraceConfig::SetMemoryDumpConfigFromConfigDict( |
517 const base::DictionaryValue& memory_dump_config) { | 530 const base::DictionaryValue& memory_dump_config) { |
531 // Set allowed dump modes. | |
532 memory_dump_config_.allowed_dump_modes.clear(); | |
533 const base::ListValue* allowed_modes_list; | |
534 if (memory_dump_config.GetList(kAllowedDumpModesParam, &allowed_modes_list)) { | |
535 for (size_t i = 0; i < allowed_modes_list->GetSize(); ++i) { | |
536 std::string level_of_detail_str; | |
537 allowed_modes_list->GetString(i, &level_of_detail_str); | |
538 memory_dump_config_.allowed_dump_modes.insert( | |
539 StringToMemoryDumpLevelOfDetail(level_of_detail_str)); | |
540 } | |
541 } else { | |
542 // If allowed modes param is not given then allow all modes by default. | |
543 memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); | |
544 } | |
545 | |
518 // Set triggers | 546 // Set triggers |
519 memory_dump_config_.triggers.clear(); | 547 memory_dump_config_.triggers.clear(); |
520 | |
521 const base::ListValue* trigger_list = nullptr; | 548 const base::ListValue* trigger_list = nullptr; |
522 if (memory_dump_config.GetList(kTriggersParam, &trigger_list) && | 549 if (memory_dump_config.GetList(kTriggersParam, &trigger_list) && |
523 trigger_list->GetSize() > 0) { | 550 trigger_list->GetSize() > 0) { |
524 for (size_t i = 0; i < trigger_list->GetSize(); ++i) { | 551 for (size_t i = 0; i < trigger_list->GetSize(); ++i) { |
525 const base::DictionaryValue* trigger = nullptr; | 552 const base::DictionaryValue* trigger = nullptr; |
526 if (!trigger_list->GetDictionary(i, &trigger)) | 553 if (!trigger_list->GetDictionary(i, &trigger)) |
527 continue; | 554 continue; |
528 | 555 |
529 MemoryDumpConfig::Trigger dump_config; | 556 MemoryDumpConfig::Trigger dump_config; |
530 int interval = 0; | 557 int interval = 0; |
(...skipping 25 matching lines...) Expand all Loading... | |
556 memory_dump_config_.heap_profiler_options.breakdown_threshold_bytes = | 583 memory_dump_config_.heap_profiler_options.breakdown_threshold_bytes = |
557 MemoryDumpConfig::HeapProfiler::kDefaultBreakdownThresholdBytes; | 584 MemoryDumpConfig::HeapProfiler::kDefaultBreakdownThresholdBytes; |
558 } | 585 } |
559 } | 586 } |
560 } | 587 } |
561 | 588 |
562 void TraceConfig::SetDefaultMemoryDumpConfig() { | 589 void TraceConfig::SetDefaultMemoryDumpConfig() { |
563 memory_dump_config_.Clear(); | 590 memory_dump_config_.Clear(); |
564 memory_dump_config_.triggers.push_back(kDefaultHeavyMemoryDumpTrigger); | 591 memory_dump_config_.triggers.push_back(kDefaultHeavyMemoryDumpTrigger); |
565 memory_dump_config_.triggers.push_back(kDefaultLightMemoryDumpTrigger); | 592 memory_dump_config_.triggers.push_back(kDefaultLightMemoryDumpTrigger); |
593 memory_dump_config_.allowed_dump_modes = GetDefaultAllowedMemoryDumpModes(); | |
566 } | 594 } |
567 | 595 |
568 void TraceConfig::ToDict(base::DictionaryValue& dict) const { | 596 void TraceConfig::ToDict(base::DictionaryValue& dict) const { |
569 switch (record_mode_) { | 597 switch (record_mode_) { |
570 case RECORD_UNTIL_FULL: | 598 case RECORD_UNTIL_FULL: |
571 dict.SetString(kRecordModeParam, kRecordUntilFull); | 599 dict.SetString(kRecordModeParam, kRecordUntilFull); |
572 break; | 600 break; |
573 case RECORD_CONTINUOUSLY: | 601 case RECORD_CONTINUOUSLY: |
574 dict.SetString(kRecordModeParam, kRecordContinuously); | 602 dict.SetString(kRecordModeParam, kRecordContinuously); |
575 break; | 603 break; |
(...skipping 26 matching lines...) Expand all Loading... | |
602 categories.insert(categories.end(), | 630 categories.insert(categories.end(), |
603 disabled_categories_.begin(), | 631 disabled_categories_.begin(), |
604 disabled_categories_.end()); | 632 disabled_categories_.end()); |
605 AddCategoryToDict(dict, kIncludedCategoriesParam, categories); | 633 AddCategoryToDict(dict, kIncludedCategoriesParam, categories); |
606 AddCategoryToDict(dict, kExcludedCategoriesParam, excluded_categories_); | 634 AddCategoryToDict(dict, kExcludedCategoriesParam, excluded_categories_); |
607 AddCategoryToDict(dict, kSyntheticDelaysParam, synthetic_delays_); | 635 AddCategoryToDict(dict, kSyntheticDelaysParam, synthetic_delays_); |
608 | 636 |
609 if (IsCategoryEnabled(MemoryDumpManager::kTraceCategory)) { | 637 if (IsCategoryEnabled(MemoryDumpManager::kTraceCategory)) { |
610 std::unique_ptr<base::DictionaryValue> memory_dump_config( | 638 std::unique_ptr<base::DictionaryValue> memory_dump_config( |
611 new base::DictionaryValue()); | 639 new base::DictionaryValue()); |
640 std::unique_ptr<base::ListValue> allowed_modes_list(new base::ListValue()); | |
641 for (MemoryDumpLevelOfDetail dump_mode : | |
642 memory_dump_config_.allowed_dump_modes) { | |
643 allowed_modes_list->AppendString( | |
644 MemoryDumpLevelOfDetailToString(dump_mode)); | |
645 } | |
646 memory_dump_config->Set(kAllowedDumpModesParam, | |
647 std::move(allowed_modes_list)); | |
648 | |
612 std::unique_ptr<base::ListValue> triggers_list(new base::ListValue()); | 649 std::unique_ptr<base::ListValue> triggers_list(new base::ListValue()); |
613 for (const MemoryDumpConfig::Trigger& config | 650 for (const MemoryDumpConfig::Trigger& config |
614 : memory_dump_config_.triggers) { | 651 : memory_dump_config_.triggers) { |
615 std::unique_ptr<base::DictionaryValue> trigger_dict( | 652 std::unique_ptr<base::DictionaryValue> trigger_dict( |
616 new base::DictionaryValue()); | 653 new base::DictionaryValue()); |
617 trigger_dict->SetInteger(kPeriodicIntervalParam, | 654 trigger_dict->SetInteger(kPeriodicIntervalParam, |
618 static_cast<int>(config.periodic_interval_ms)); | 655 static_cast<int>(config.periodic_interval_ms)); |
619 trigger_dict->SetString( | 656 trigger_dict->SetString( |
620 kModeParam, MemoryDumpLevelOfDetailToString(config.level_of_detail)); | 657 kModeParam, MemoryDumpLevelOfDetailToString(config.level_of_detail)); |
621 triggers_list->Append(std::move(trigger_dict)); | 658 triggers_list->Append(std::move(trigger_dict)); |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
725 str.at(0) == ' ' || | 762 str.at(0) == ' ' || |
726 str.at(str.length() - 1) == ' '; | 763 str.at(str.length() - 1) == ' '; |
727 } | 764 } |
728 | 765 |
729 bool TraceConfig::HasIncludedPatterns() const { | 766 bool TraceConfig::HasIncludedPatterns() const { |
730 return !included_categories_.empty(); | 767 return !included_categories_.empty(); |
731 } | 768 } |
732 | 769 |
733 } // namespace trace_event | 770 } // namespace trace_event |
734 } // namespace base | 771 } // namespace base |
OLD | NEW |