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

Side by Side Diff: base/trace_event/trace_config.cc

Issue 2041583003: [tracing] Introduce "allowed_dump_modes" for memory dump config (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@background_config
Patch Set: rebase on 2049143002 Created 4 years, 6 months 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
OLDNEW
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698