1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "components/flags_ui/flags_ui_metrics.h"
- #include <set>
- #include <string>
- #include "base/logging.h"
- #include "base/metrics/histogram_functions.h"
- #include "base/metrics/metrics_hashes.h"
- #include "base/notreached.h"
- #include "base/strings/string_util.h"
- namespace flags_ui {
- namespace {
- // Records a set of feature switches (prefixed with "--").
- void ReportAboutFlagsHistogramSwitches(const std::string& uma_histogram_name,
- const std::set<std::string>& switches) {
- for (const std::string& flag : switches) {
- int uma_id = testing::kBadSwitchFormatHistogramId;
- if (base::StartsWith(flag, "--", base::CompareCase::SENSITIVE)) {
- // Skip '--' before switch name.
- std::string switch_name(flag.substr(2));
- // Kill value, if any.
- const size_t value_pos = switch_name.find('=');
- if (value_pos != std::string::npos)
- switch_name.resize(value_pos);
- uma_id = GetSwitchUMAId(switch_name);
- } else {
- NOTREACHED() << "ReportAboutFlagsHistogram(): flag '" << flag
- << "' has incorrect format.";
- }
- DVLOG(1) << "ReportAboutFlagsHistogram(): histogram='" << uma_histogram_name
- << "' '" << flag << "', uma_id=" << uma_id;
- base::UmaHistogramSparse(uma_histogram_name, uma_id);
- }
- }
- // Records a set of FEATURE_VALUE_TYPE features (suffixed with ":enabled" or
- // "disabled", depending on their state).
- void ReportAboutFlagsHistogramFeatures(const std::string& uma_histogram_name,
- const std::set<std::string>& features) {
- for (const std::string& feature : features) {
- int uma_id = GetSwitchUMAId(feature);
- DVLOG(1) << "ReportAboutFlagsHistogram(): histogram='" << uma_histogram_name
- << "' '" << feature << "', uma_id=" << uma_id;
- base::UmaHistogramSparse(uma_histogram_name, uma_id);
- }
- }
- } // namespace
- base::HistogramBase::Sample GetSwitchUMAId(const std::string& switch_name) {
- return static_cast<base::HistogramBase::Sample>(
- base::HashMetricName(switch_name));
- }
- void ReportAboutFlagsHistogram(const std::string& uma_histogram_name,
- const std::set<std::string>& switches,
- const std::set<std::string>& features) {
- ReportAboutFlagsHistogramSwitches(uma_histogram_name, switches);
- ReportAboutFlagsHistogramFeatures(uma_histogram_name, features);
- }
- namespace testing {
- const base::HistogramBase::Sample kBadSwitchFormatHistogramId = 0;
- } // namespace testing
- } // namespace flags_ui
|