diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-12 14:27:29 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2020-10-13 09:35:20 +0000 |
commit | c30a6232df03e1efbd9f3b226777b07e087a1122 (patch) | |
tree | e992f45784689f373bcc38d1b79a239ebe17ee23 /chromium/base/metrics | |
parent | 7b5b123ac58f58ffde0f4f6e488bcd09aa4decd3 (diff) | |
download | qtwebengine-chromium-85-based.tar.gz |
BASELINE: Update Chromium to 85.0.4183.14085-based
Change-Id: Iaa42f4680837c57725b1344f108c0196741f6057
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/base/metrics')
-rw-r--r-- | chromium/base/metrics/dummy_histogram.cc | 5 | ||||
-rw-r--r-- | chromium/base/metrics/dummy_histogram.h | 3 | ||||
-rw-r--r-- | chromium/base/metrics/field_trial.cc | 15 | ||||
-rw-r--r-- | chromium/base/metrics/field_trial.h | 8 | ||||
-rw-r--r-- | chromium/base/metrics/field_trial_params.h | 1 | ||||
-rw-r--r-- | chromium/base/metrics/field_trial_unittest.cc | 81 | ||||
-rw-r--r-- | chromium/base/metrics/histogram.cc | 21 | ||||
-rw-r--r-- | chromium/base/metrics/histogram.h | 9 | ||||
-rw-r--r-- | chromium/base/metrics/histogram_base.cc | 24 | ||||
-rw-r--r-- | chromium/base/metrics/histogram_base.h | 9 | ||||
-rw-r--r-- | chromium/base/metrics/histogram_macros_internal.h | 2 | ||||
-rw-r--r-- | chromium/base/metrics/histogram_macros_local.h | 1 | ||||
-rw-r--r-- | chromium/base/metrics/histogram_unittest.cc | 49 | ||||
-rw-r--r-- | chromium/base/metrics/sparse_histogram.cc | 10 | ||||
-rw-r--r-- | chromium/base/metrics/sparse_histogram.h | 6 | ||||
-rw-r--r-- | chromium/base/metrics/sparse_histogram_unittest.cc | 47 | ||||
-rw-r--r-- | chromium/base/metrics/ukm_source_id.cc | 3 | ||||
-rw-r--r-- | chromium/base/metrics/ukm_source_id.h | 6 | ||||
-rw-r--r-- | chromium/base/metrics/user_metrics.cc | 2 |
19 files changed, 161 insertions, 141 deletions
diff --git a/chromium/base/metrics/dummy_histogram.cc b/chromium/base/metrics/dummy_histogram.cc index ca7c4d9d30d..45ae7f2fb11 100644 --- a/chromium/base/metrics/dummy_histogram.cc +++ b/chromium/base/metrics/dummy_histogram.cc @@ -101,10 +101,7 @@ std::unique_ptr<HistogramSamples> DummyHistogram::SnapshotFinalDelta() const { } base::DictionaryValue DummyHistogram::ToGraphDict() const { - base::DictionaryValue dict; - dict.SetString("header", "dummy"); - dict.SetString("body", "dummy"); - return dict; + return base::DictionaryValue(); } } // namespace base diff --git a/chromium/base/metrics/dummy_histogram.h b/chromium/base/metrics/dummy_histogram.h index 6c17cc8924b..08fd36374a0 100644 --- a/chromium/base/metrics/dummy_histogram.h +++ b/chromium/base/metrics/dummy_histogram.h @@ -44,9 +44,6 @@ class BASE_EXPORT DummyHistogram : public HistogramBase { // HistogramBase: void SerializeInfoImpl(Pickle* pickle) const override {} void GetParameters(DictionaryValue* params) const override {} - void GetCountAndBucketData(Count* count, - int64_t* sum, - ListValue* buckets) const override {} private: friend class NoDestructor<DummyHistogram>; diff --git a/chromium/base/metrics/field_trial.cc b/chromium/base/metrics/field_trial.cc index 05470a4deec..9799bfc9713 100644 --- a/chromium/base/metrics/field_trial.cc +++ b/chromium/base/metrics/field_trial.cc @@ -719,9 +719,7 @@ void FieldTrialList::GetInitiallyActiveFieldTrials( } // static -bool FieldTrialList::CreateTrialsFromString( - const std::string& trials_string, - const std::set<std::string>& ignored_trial_names) { +bool FieldTrialList::CreateTrialsFromString(const std::string& trials_string) { DCHECK(global_); if (trials_string.empty() || !global_) return true; @@ -734,14 +732,6 @@ bool FieldTrialList::CreateTrialsFromString( const std::string trial_name = entry.trial_name.as_string(); const std::string group_name = entry.group_name.as_string(); - if (Contains(ignored_trial_names, trial_name)) { - // This is to warn that the field trial forced through command-line - // input is unforcable. - // Use --enable-logging or --enable-logging=stderr to see this warning. - LOG(WARNING) << "Field trial: " << trial_name << " cannot be forced."; - continue; - } - FieldTrial* trial = CreateFieldTrial(trial_name, group_name); if (!trial) return false; @@ -787,8 +777,7 @@ void FieldTrialList::CreateTrialsFromCommandLine( if (cmd_line.HasSwitch(switches::kForceFieldTrials)) { bool result = FieldTrialList::CreateTrialsFromString( - cmd_line.GetSwitchValueASCII(switches::kForceFieldTrials), - std::set<std::string>()); + cmd_line.GetSwitchValueASCII(switches::kForceFieldTrials)); UMA_HISTOGRAM_BOOLEAN("ChildProcess.FieldTrials.CreateFromSwitchSuccess", result); DCHECK(result); diff --git a/chromium/base/metrics/field_trial.h b/chromium/base/metrics/field_trial.h index d0fd3c12d6a..00448389e0d 100644 --- a/chromium/base/metrics/field_trial.h +++ b/chromium/base/metrics/field_trial.h @@ -59,7 +59,6 @@ #include <map> #include <memory> -#include <set> #include <string> #include <vector> @@ -543,11 +542,8 @@ class BASE_EXPORT FieldTrialList { // browser process into this non-browser process, but could also be invoked // through a command line argument to the browser process. Created field // trials will be marked "used" for the purposes of active trial reporting - // if they are prefixed with |kActivationMarker|. Trial names in - // |ignored_trial_names| are ignored when parsing |trials_string|. - static bool CreateTrialsFromString( - const std::string& trials_string, - const std::set<std::string>& ignored_trial_names); + // if they are prefixed with |kActivationMarker|. + static bool CreateTrialsFromString(const std::string& trials_string); // Achieves the same thing as CreateTrialsFromString, except wraps the logic // by taking in the trials from the command line, either via shared memory diff --git a/chromium/base/metrics/field_trial_params.h b/chromium/base/metrics/field_trial_params.h index 7b4bd5b37cc..056b50b230f 100644 --- a/chromium/base/metrics/field_trial_params.h +++ b/chromium/base/metrics/field_trial_params.h @@ -10,6 +10,7 @@ #include "base/base_export.h" #include "base/logging.h" +#include "base/notreached.h" namespace base { diff --git a/chromium/base/metrics/field_trial_unittest.cc b/chromium/base/metrics/field_trial_unittest.cc index 18723053c00..52e590561c4 100644 --- a/chromium/base/metrics/field_trial_unittest.cc +++ b/chromium/base/metrics/field_trial_unittest.cc @@ -527,8 +527,7 @@ TEST_F(FieldTrialTest, Restore) { ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); ASSERT_FALSE(FieldTrialList::TrialExists("xxx")); - FieldTrialList::CreateTrialsFromString("Some_name/Winner/xxx/yyyy/", - std::set<std::string>()); + FieldTrialList::CreateTrialsFromString("Some_name/Winner/xxx/yyyy/"); FieldTrial* trial = FieldTrialList::Find("Some_name"); ASSERT_NE(static_cast<FieldTrial*>(nullptr), trial); @@ -542,8 +541,7 @@ TEST_F(FieldTrialTest, Restore) { } TEST_F(FieldTrialTest, RestoreNotEndingWithSlash) { - EXPECT_TRUE(FieldTrialList::CreateTrialsFromString("tname/gname", - std::set<std::string>())); + EXPECT_TRUE(FieldTrialList::CreateTrialsFromString("tname/gname")); FieldTrial* trial = FieldTrialList::Find("tname"); ASSERT_NE(static_cast<FieldTrial*>(nullptr), trial); @@ -552,16 +550,11 @@ TEST_F(FieldTrialTest, RestoreNotEndingWithSlash) { } TEST_F(FieldTrialTest, BogusRestore) { - EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingSlash", - std::set<std::string>())); - EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingGroupName/", - std::set<std::string>())); - EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("noname, only group/", - std::set<std::string>())); - EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("/emptyname", - std::set<std::string>())); - EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("*/emptyname", - std::set<std::string>())); + EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingSlash")); + EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("MissingGroupName/")); + EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("noname, only group/")); + EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("/emptyname")); + EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("*/emptyname")); } TEST_F(FieldTrialTest, DuplicateRestore) { @@ -575,19 +568,16 @@ TEST_F(FieldTrialTest, DuplicateRestore) { EXPECT_EQ("Some name/Winner/", save_string); // It is OK if we redundantly specify a winner. - EXPECT_TRUE(FieldTrialList::CreateTrialsFromString(save_string, - std::set<std::string>())); + EXPECT_TRUE(FieldTrialList::CreateTrialsFromString(save_string)); // But it is an error to try to change to a different winner. - EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("Some name/Loser/", - std::set<std::string>())); + EXPECT_FALSE(FieldTrialList::CreateTrialsFromString("Some name/Loser/")); } TEST_F(FieldTrialTest, CreateTrialsFromStringNotActive) { ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); - ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/Xyz/zyx/", - std::set<std::string>())); + ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/Xyz/zyx/")); FieldTrial::ActiveGroups active_groups; FieldTrialList::GetActiveFieldTrialGroups(&active_groups); @@ -609,8 +599,8 @@ TEST_F(FieldTrialTest, CreateTrialsFromStringForceActivation) { ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); ASSERT_FALSE(FieldTrialList::TrialExists("def")); ASSERT_FALSE(FieldTrialList::TrialExists("Xyz")); - ASSERT_TRUE(FieldTrialList::CreateTrialsFromString( - "*Abc/cba/def/fed/*Xyz/zyx/", std::set<std::string>())); + ASSERT_TRUE( + FieldTrialList::CreateTrialsFromString("*Abc/cba/def/fed/*Xyz/zyx/")); FieldTrial::ActiveGroups active_groups; FieldTrialList::GetActiveFieldTrialGroups(&active_groups); @@ -625,8 +615,7 @@ TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) { ASSERT_FALSE(FieldTrialList::TrialExists("Abc")); TestFieldTrialObserver observer(TestFieldTrialObserver::ASYNCHRONOUS); - ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/", - std::set<std::string>())); + ASSERT_TRUE(FieldTrialList::CreateTrialsFromString("Abc/def/")); RunLoop().RunUntilIdle(); // Observer shouldn't be notified. EXPECT_TRUE(observer.trial_name().empty()); @@ -639,47 +628,6 @@ TEST_F(FieldTrialTest, CreateTrialsFromStringNotActiveObserver) { EXPECT_EQ("def", observer.group_name()); } -TEST_F(FieldTrialTest, CreateTrialsFromStringWithIgnoredFieldTrials) { - ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted1")); - ASSERT_FALSE(FieldTrialList::TrialExists("Foo")); - ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted2")); - ASSERT_FALSE(FieldTrialList::TrialExists("Bar")); - ASSERT_FALSE(FieldTrialList::TrialExists("Unaccepted3")); - - std::set<std::string> ignored_trial_names; - ignored_trial_names.insert("Unaccepted1"); - ignored_trial_names.insert("Unaccepted2"); - ignored_trial_names.insert("Unaccepted3"); - - FieldTrialList::CreateTrialsFromString( - "Unaccepted1/Unaccepted1_name/" - "Foo/Foo_name/" - "Unaccepted2/Unaccepted2_name/" - "Bar/Bar_name/" - "Unaccepted3/Unaccepted3_name/", - ignored_trial_names); - - EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted1")); - EXPECT_TRUE(FieldTrialList::TrialExists("Foo")); - EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted2")); - EXPECT_TRUE(FieldTrialList::TrialExists("Bar")); - EXPECT_FALSE(FieldTrialList::TrialExists("Unaccepted3")); - - FieldTrial::ActiveGroups active_groups; - FieldTrialList::GetActiveFieldTrialGroups(&active_groups); - EXPECT_TRUE(active_groups.empty()); - - FieldTrial* trial = FieldTrialList::Find("Foo"); - ASSERT_NE(static_cast<FieldTrial*>(nullptr), trial); - EXPECT_EQ("Foo", trial->trial_name()); - EXPECT_EQ("Foo_name", trial->group_name()); - - trial = FieldTrialList::Find("Bar"); - ASSERT_NE(static_cast<FieldTrial*>(nullptr), trial); - EXPECT_EQ("Bar", trial->trial_name()); - EXPECT_EQ("Bar_name", trial->group_name()); -} - TEST_F(FieldTrialTest, CreateFieldTrial) { ASSERT_FALSE(FieldTrialList::TrialExists("Some_name")); @@ -1154,8 +1102,7 @@ TEST(FieldTrialTestWithoutList, StatesStringFormat) { // Starting with a new blank FieldTrialList. FieldTrialList field_trial_list(nullptr); - ASSERT_TRUE(field_trial_list.CreateTrialsFromString(save_string, - std::set<std::string>())); + ASSERT_TRUE(field_trial_list.CreateTrialsFromString(save_string)); FieldTrial::ActiveGroups active_groups; field_trial_list.GetActiveFieldTrialGroups(&active_groups); diff --git a/chromium/base/metrics/histogram.cc b/chromium/base/metrics/histogram.cc index 12782db9a9d..7e9ea3c7d0d 100644 --- a/chromium/base/metrics/histogram.cc +++ b/chromium/base/metrics/histogram.cc @@ -821,27 +821,6 @@ void Histogram::GetParameters(DictionaryValue* params) const { params->SetIntKey("bucket_count", static_cast<int>(bucket_count())); } -void Histogram::GetCountAndBucketData(Count* count, - int64_t* sum, - ListValue* buckets) const { - std::unique_ptr<SampleVector> snapshot = SnapshotAllSamples(); - *count = snapshot->TotalCount(); - *sum = snapshot->sum(); - uint32_t index = 0; - for (uint32_t i = 0; i < bucket_count(); ++i) { - Sample count_at_index = snapshot->GetCountAtIndex(i); - if (count_at_index > 0) { - std::unique_ptr<DictionaryValue> bucket_value(new DictionaryValue()); - bucket_value->SetIntKey("low", ranges(i)); - if (i != bucket_count() - 1) - bucket_value->SetIntKey("high", ranges(i + 1)); - bucket_value->SetIntKey("count", count_at_index); - buckets->Set(index, std::move(bucket_value)); - ++index; - } - } -} - //------------------------------------------------------------------------------ // LinearHistogram: This histogram uses a traditional set of evenly spaced // buckets. diff --git a/chromium/base/metrics/histogram.h b/chromium/base/metrics/histogram.h index ba300c70917..3e1c51f46ee 100644 --- a/chromium/base/metrics/histogram.h +++ b/chromium/base/metrics/histogram.h @@ -73,10 +73,10 @@ #include <vector> #include "base/base_export.h" +#include "base/check_op.h" #include "base/compiler_specific.h" #include "base/containers/span.h" #include "base/gtest_prod_util.h" -#include "base/logging.h" #include "base/macros.h" #include "base/metrics/bucket_ranges.h" #include "base/metrics/histogram_base.h" @@ -314,13 +314,10 @@ class BASE_EXPORT Histogram : public HistogramBase { const uint32_t i, std::string* output) const; - // WriteJSON calls these. + // Writes the type, min, max, and bucket count information of the histogram in + // |params|. void GetParameters(DictionaryValue* params) const override; - void GetCountAndBucketData(Count* count, - int64_t* sum, - ListValue* buckets) const override; - // Samples that have not yet been logged with SnapshotDelta(). std::unique_ptr<SampleVectorBase> unlogged_samples_; diff --git a/chromium/base/metrics/histogram_base.cc b/chromium/base/metrics/histogram_base.cc index 8d55e92e1dd..ce7fbf16e38 100644 --- a/chromium/base/metrics/histogram_base.cc +++ b/chromium/base/metrics/histogram_base.cc @@ -179,6 +179,30 @@ void HistogramBase::FindAndRunCallback(HistogramBase::Sample sample) const { cb.Run(sample); } +void HistogramBase::GetCountAndBucketData(Count* count, + int64_t* sum, + ListValue* buckets) const { + std::unique_ptr<HistogramSamples> snapshot = SnapshotSamples(); + *count = snapshot->TotalCount(); + *sum = snapshot->sum(); + std::unique_ptr<SampleCountIterator> it = snapshot->Iterator(); + uint32_t index = 0; + while (!it->Done()) { + std::unique_ptr<DictionaryValue> bucket_value(new DictionaryValue()); + Sample bucket_min; + int64_t bucket_max; + Count bucket_count; + it->Get(&bucket_min, &bucket_max, &bucket_count); + + bucket_value->SetIntKey("low", bucket_min); + bucket_value->SetIntKey("high", bucket_max); + bucket_value->SetIntKey("count", bucket_count); + buckets->Set(index, std::move(bucket_value)); + it->Next(); + ++index; + } +} + void HistogramBase::WriteAsciiBucketGraph(double current_size, double max_size, std::string* output) const { diff --git a/chromium/base/metrics/histogram_base.h b/chromium/base/metrics/histogram_base.h index de3a2cc6427..7a12fc1989e 100644 --- a/chromium/base/metrics/histogram_base.h +++ b/chromium/base/metrics/histogram_base.h @@ -236,7 +236,8 @@ class BASE_EXPORT HistogramBase { // The following method provides graphical histogram displays. virtual void WriteAscii(std::string* output) const = 0; - // Returns histogram data as a Dict with the following format: + // Returns histograms data as a Dict (or an empty dict if not available), + // with the following format: // {"header": "Name of the histogram with samples, mean, and/or flags", // "body": "ASCII histogram representation"} virtual base::DictionaryValue ToGraphDict() const = 0; @@ -262,9 +263,9 @@ class BASE_EXPORT HistogramBase { // Writes information about the current (non-empty) buckets and their sample // counts to |buckets|, the total sample count to |count| and the total sum // to |sum|. - virtual void GetCountAndBucketData(Count* count, - int64_t* sum, - ListValue* buckets) const = 0; + void GetCountAndBucketData(Count* count, + int64_t* sum, + ListValue* buckets) const; //// Produce actual graph (set of blank vs non blank char's) for a bucket. void WriteAsciiBucketGraph(double current_size, diff --git a/chromium/base/metrics/histogram_macros_internal.h b/chromium/base/metrics/histogram_macros_internal.h index dcbff508e8e..9f68583d8af 100644 --- a/chromium/base/metrics/histogram_macros_internal.h +++ b/chromium/base/metrics/histogram_macros_internal.h @@ -12,7 +12,7 @@ #include <memory> #include <type_traits> -#include "base/logging.h" +#include "base/check_op.h" #include "base/metrics/histogram.h" #include "base/metrics/sparse_histogram.h" #include "base/time/time.h" diff --git a/chromium/base/metrics/histogram_macros_local.h b/chromium/base/metrics/histogram_macros_local.h index 38a2d785202..47e5ba42f49 100644 --- a/chromium/base/metrics/histogram_macros_local.h +++ b/chromium/base/metrics/histogram_macros_local.h @@ -5,7 +5,6 @@ #ifndef BASE_METRICS_HISTOGRAM_MACROS_LOCAL_H_ #define BASE_METRICS_HISTOGRAM_MACROS_LOCAL_H_ -#include "base/logging.h" #include "base/metrics/histogram.h" #include "base/metrics/histogram_macros_internal.h" #include "base/time/time.h" diff --git a/chromium/base/metrics/histogram_unittest.cc b/chromium/base/metrics/histogram_unittest.cc index aef19340d4b..d7addaaa266 100644 --- a/chromium/base/metrics/histogram_unittest.cc +++ b/chromium/base/metrics/histogram_unittest.cc @@ -101,6 +101,15 @@ class HistogramTest : public testing::TestWithParam<bool> { return h->SnapshotAllSamples(); } + void GetCountAndBucketData(Histogram* histogram, + base::Histogram::Count* count, + int64_t* sum, + base::ListValue* buckets) { + // A simple wrapper around |GetCountAndBucketData| to make it visible for + // testing. + histogram->GetCountAndBucketData(count, sum, buckets); + } + const bool use_persistent_histogram_allocator_; std::unique_ptr<StatisticsRecorder> statistics_recorder_; @@ -899,6 +908,46 @@ TEST_P(HistogramTest, ExpiredHistogramTest) { EXPECT_EQ(2, samples->TotalCount()); } +TEST_P(HistogramTest, CheckGetCountAndBucketData) { + const size_t kBucketCount = 50; + Histogram* histogram = static_cast<Histogram*>(Histogram::FactoryGet( + "AddCountHistogram", 10, 100, kBucketCount, HistogramBase::kNoFlags)); + // Add samples in reverse order and make sure the output is in correct order. + histogram->AddCount(/*sample=*/30, /*value=*/14); + histogram->AddCount(/*sample=*/20, /*value=*/15); + histogram->AddCount(/*sample=*/20, /*value=*/15); + histogram->AddCount(/*sample=*/30, /*value=*/14); + + base::Histogram::Count total_count; + int64_t sum; + base::ListValue buckets; + GetCountAndBucketData(histogram, &total_count, &sum, &buckets); + EXPECT_EQ(58, total_count); + EXPECT_EQ(1440, sum); + EXPECT_EQ(2u, buckets.GetSize()); + + int low, high, count; + // Check the first bucket. + base::DictionaryValue* bucket1; + EXPECT_TRUE(buckets.GetDictionary(0, &bucket1)); + EXPECT_TRUE(bucket1->GetInteger("low", &low)); + EXPECT_TRUE(bucket1->GetInteger("high", &high)); + EXPECT_TRUE(bucket1->GetInteger("count", &count)); + EXPECT_EQ(20, low); + EXPECT_EQ(21, high); + EXPECT_EQ(30, count); + + // Check the second bucket. + base::DictionaryValue* bucket2; + EXPECT_TRUE(buckets.GetDictionary(1, &bucket2)); + EXPECT_TRUE(bucket2->GetInteger("low", &low)); + EXPECT_TRUE(bucket2->GetInteger("high", &high)); + EXPECT_TRUE(bucket2->GetInteger("count", &count)); + EXPECT_EQ(30, low); + EXPECT_EQ(31, high); + EXPECT_EQ(28, count); +} + TEST_P(HistogramTest, WriteAscii) { HistogramBase* histogram = LinearHistogram::FactoryGet("AsciiOut", /*minimum=*/1, /*maximum=*/10, diff --git a/chromium/base/metrics/sparse_histogram.cc b/chromium/base/metrics/sparse_histogram.cc index 61635d0417f..6d2720c2369 100644 --- a/chromium/base/metrics/sparse_histogram.cc +++ b/chromium/base/metrics/sparse_histogram.cc @@ -238,13 +238,9 @@ HistogramBase* SparseHistogram::DeserializeInfoImpl(PickleIterator* iter) { } void SparseHistogram::GetParameters(DictionaryValue* params) const { - // TODO(kaiwang): Implement. (See HistogramBase::WriteJSON.) -} - -void SparseHistogram::GetCountAndBucketData(Count* count, - int64_t* sum, - ListValue* buckets) const { - // TODO(kaiwang): Implement. (See HistogramBase::WriteJSON.) + // Unlike Histogram::GetParameters, only set the type here, and no other + // params. The other params do not make sense for sparse histograms. + params->SetString("type", HistogramTypeToString(GetHistogramType())); } void SparseHistogram::WriteAsciiBody(const HistogramSamples& snapshot, diff --git a/chromium/base/metrics/sparse_histogram.h b/chromium/base/metrics/sparse_histogram.h index ab1d9157063..ff1ce569b92 100644 --- a/chromium/base/metrics/sparse_histogram.h +++ b/chromium/base/metrics/sparse_histogram.h @@ -75,10 +75,8 @@ class BASE_EXPORT SparseHistogram : public HistogramBase { base::PickleIterator* iter); static HistogramBase* DeserializeInfoImpl(base::PickleIterator* iter); + // Writes the type of the sparse histogram in the |params|. void GetParameters(DictionaryValue* params) const override; - void GetCountAndBucketData(Count* count, - int64_t* sum, - ListValue* buckets) const override; // Helpers for emitting Ascii graphic. Each method appends data to output. void WriteAsciiBody(const HistogramSamples& snapshot, @@ -90,7 +88,7 @@ class BASE_EXPORT SparseHistogram : public HistogramBase { void WriteAsciiHeader(const HistogramSamples& snapshot, std::string* output) const; - // For constuctor calling. + // For constructor calling. friend class SparseHistogramTest; // Protects access to |samples_|. diff --git a/chromium/base/metrics/sparse_histogram_unittest.cc b/chromium/base/metrics/sparse_histogram_unittest.cc index a92b68b4a6d..47d8b818920 100644 --- a/chromium/base/metrics/sparse_histogram_unittest.cc +++ b/chromium/base/metrics/sparse_histogram_unittest.cc @@ -78,6 +78,15 @@ class SparseHistogramTest : public testing::TestWithParam<bool> { return std::unique_ptr<SparseHistogram>(new SparseHistogram(name)); } + void GetCountAndBucketData(SparseHistogram* histogram, + base::Histogram::Count* count, + int64_t* sum, + base::ListValue* buckets) { + // A simple wrapper around |GetCountAndBucketData| to make it visible for + // testing. + histogram->GetCountAndBucketData(count, sum, buckets); + } + const bool use_persistent_histogram_allocator_; std::unique_ptr<StatisticsRecorder> statistics_recorder_; @@ -387,6 +396,44 @@ TEST_P(SparseHistogramTest, HistogramNameHash) { EXPECT_EQ(histogram->name_hash(), HashMetricName(kName)); } +TEST_P(SparseHistogramTest, CheckGetCountAndBucketData) { + std::unique_ptr<SparseHistogram> histogram(NewSparseHistogram("Sparse")); + // Add samples in reverse order and make sure the output is in correct order. + histogram->AddCount(/*sample=*/200, /*value=*/15); + histogram->AddCount(/*sample=*/100, /*value=*/5); + // Add samples to the same bucket and make sure they'll be aggregated. + histogram->AddCount(/*sample=*/100, /*value=*/5); + + base::Histogram::Count total_count; + int64_t sum; + base::ListValue buckets; + GetCountAndBucketData(histogram.get(), &total_count, &sum, &buckets); + EXPECT_EQ(25, total_count); + EXPECT_EQ(4000, sum); + EXPECT_EQ(2u, buckets.GetSize()); + + int low, high, count; + // Check the first bucket. + base::DictionaryValue* bucket1; + EXPECT_TRUE(buckets.GetDictionary(0, &bucket1)); + EXPECT_TRUE(bucket1->GetInteger("low", &low)); + EXPECT_TRUE(bucket1->GetInteger("high", &high)); + EXPECT_TRUE(bucket1->GetInteger("count", &count)); + EXPECT_EQ(100, low); + EXPECT_EQ(101, high); + EXPECT_EQ(10, count); + + // Check the second bucket. + base::DictionaryValue* bucket2; + EXPECT_TRUE(buckets.GetDictionary(1, &bucket2)); + EXPECT_TRUE(bucket2->GetInteger("low", &low)); + EXPECT_TRUE(bucket2->GetInteger("high", &high)); + EXPECT_TRUE(bucket2->GetInteger("count", &count)); + EXPECT_EQ(200, low); + EXPECT_EQ(201, high); + EXPECT_EQ(15, count); +} + TEST_P(SparseHistogramTest, WriteAscii) { HistogramBase* histogram = SparseHistogram::FactoryGet("AsciiOut", HistogramBase::kNoFlags); diff --git a/chromium/base/metrics/ukm_source_id.cc b/chromium/base/metrics/ukm_source_id.cc index 3513b954a36..0b2a8baf296 100644 --- a/chromium/base/metrics/ukm_source_id.cc +++ b/chromium/base/metrics/ukm_source_id.cc @@ -33,7 +33,8 @@ UkmSourceId UkmSourceId::New() { static_cast<int64_t>(RandUint64()) & ~kLowBitsMask; // Generate some bits which are unique within the process, using a counter. static AtomicSequenceNumber seq; - UkmSourceId local_id = FromOtherId(seq.GetNext() + 1, UkmSourceId::Type::UKM); + UkmSourceId local_id = + FromOtherId(seq.GetNext() + 1, UkmSourceId::Type::DEFAULT); // Combine the local and process bits to generate a unique ID. return UkmSourceId((local_id.value_ & kLowBitsMask) | process_id_bits); } diff --git a/chromium/base/metrics/ukm_source_id.h b/chromium/base/metrics/ukm_source_id.h index 3ba01a0d64c..1b9bdccece7 100644 --- a/chromium/base/metrics/ukm_source_id.h +++ b/chromium/base/metrics/ukm_source_id.h @@ -13,7 +13,9 @@ namespace base { // An ID used to identify a Source to UKM, for recording information about it. // These objects are copyable, assignable, and occupy 64-bits per instance. -// Prefer passing them by value. +// Prefer passing them by value. When a new type is added, please also update +// the enum type in third_party/metrics_proto/ukm/source.proto and the +// converting function ToProtobufSourceType. class BASE_EXPORT UkmSourceId { public: enum class Type : int64_t { @@ -21,7 +23,7 @@ class BASE_EXPORT UkmSourceId { // 'custom' source other than the types below. Source of this type has // additional restrictions with logging, as determined by // IsWhitelistedSourceId. - UKM = 0, + DEFAULT = 0, // Sources created by navigation. They will be kept in memory as long as // the associated tab is still alive and the number of sources are within // the max threshold. diff --git a/chromium/base/metrics/user_metrics.cc b/chromium/base/metrics/user_metrics.cc index b007d62af3d..24a44515e60 100644 --- a/chromium/base/metrics/user_metrics.cc +++ b/chromium/base/metrics/user_metrics.cc @@ -14,7 +14,7 @@ #include "base/macros.h" #include "base/threading/thread_checker.h" #include "base/time/time.h" -#include "base/trace_event/trace_event.h" +#include "base/trace_event/base_tracing.h" namespace base { namespace { |