Index: base/metrics/statistics_recorder.cc |
diff --git a/base/metrics/statistics_recorder.cc b/base/metrics/statistics_recorder.cc |
index 460c75e8491c9c853389a0744172e08315066c4a..b19a897a96c1ab6e2d7737bd2648100c9bd10281 100644 |
--- a/base/metrics/statistics_recorder.cc |
+++ b/base/metrics/statistics_recorder.cc |
@@ -113,11 +113,11 @@ HistogramBase* StatisticsRecorder::RegisterOrDeleteDuplicate( |
histogram_to_return = histogram; |
} else { |
const std::string& name = histogram->histogram_name(); |
- const uint64_t name_hash = histogram->name_hash(); |
- DCHECK_NE(0U, name_hash); |
- HistogramMap::iterator it = histograms_->find(name_hash); |
+ HistogramMap::iterator it = histograms_->find(name); |
if (histograms_->end() == it) { |
- (*histograms_)[name_hash] = histogram; |
+ // The StringKey references the name within |histogram| rather than |
+ // making a copy. |
+ (*histograms_)[name] = histogram; |
ANNOTATE_LEAKING_OBJECT_PTR(histogram); // see crbug.com/79322 |
// If there are callbacks for this histogram, we set the kCallbackExists |
// flag. |
@@ -261,7 +261,6 @@ void StatisticsRecorder::GetHistograms(Histograms* output) { |
return; |
for (const auto& entry : *histograms_) { |
- DCHECK_EQ(entry.first, entry.second->name_hash()); |
output->push_back(entry.second); |
} |
} |
@@ -298,10 +297,9 @@ HistogramBase* StatisticsRecorder::FindHistogram(base::StringPiece name) { |
if (allocator) |
allocator->ImportHistogramsToStatisticsRecorder(); |
- HistogramMap::iterator it = histograms_->find(HashMetricName(name)); |
+ HistogramMap::iterator it = histograms_->find(name); |
if (histograms_->end() == it) |
return NULL; |
- DCHECK_EQ(name, it->second->histogram_name()) << "hash collision"; |
return it->second; |
} |
@@ -346,11 +344,9 @@ bool StatisticsRecorder::SetCallback( |
return false; |
callbacks_->insert(std::make_pair(name, cb)); |
- auto it = histograms_->find(HashMetricName(name)); |
- if (it != histograms_->end()) { |
- DCHECK_EQ(name, it->second->histogram_name()) << "hash collision"; |
+ auto it = histograms_->find(name); |
+ if (it != histograms_->end()) |
it->second->SetFlags(HistogramBase::kCallbackExists); |
- } |
return true; |
} |
@@ -366,11 +362,9 @@ void StatisticsRecorder::ClearCallback(const std::string& name) { |
callbacks_->erase(name); |
// We also clear the flag from the histogram (if it exists). |
- auto it = histograms_->find(HashMetricName(name)); |
- if (it != histograms_->end()) { |
- DCHECK_EQ(name, it->second->histogram_name()) << "hash collision"; |
+ auto it = histograms_->find(name); |
+ if (it != histograms_->end()) |
it->second->ClearFlags(HistogramBase::kCallbackExists); |
- } |
} |
// static |
@@ -407,7 +401,7 @@ void StatisticsRecorder::ResetForTesting() { |
// static |
void StatisticsRecorder::ForgetHistogramForTesting(base::StringPiece name) { |
if (histograms_) |
- histograms_->erase(HashMetricName(name.as_string())); |
+ histograms_->erase(name); |
} |
// This singleton instance should be started during the single threaded portion |