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

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. 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 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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698