Index: base/metrics/sparse_histogram.cc |
diff --git a/base/metrics/sparse_histogram.cc b/base/metrics/sparse_histogram.cc |
index e2bf4bfed18a949d8a95177287f9c432541c731a..f9529f7431c926233cb23abbe20922de4cf990d4 100644 |
--- a/base/metrics/sparse_histogram.cc |
+++ b/base/metrics/sparse_histogram.cc |
@@ -146,14 +146,16 @@ bool SparseHistogram::AddSamplesFromPickle(PickleIterator* iter) { |
return samples_->AddFromPickle(iter); |
} |
-void SparseHistogram::WriteHTMLGraph(std::string* output) const { |
+void SparseHistogram::WriteHTMLGraph(const HistogramSamples* snapshot, |
+ std::string* output) const { |
output->append("<PRE>"); |
- WriteAsciiImpl(true, "<br>", output); |
+ WriteAsciiImpl(true, "<br>", snapshot, output); |
output->append("</PRE>"); |
} |
-void SparseHistogram::WriteAscii(std::string* output) const { |
- WriteAsciiImpl(true, "\n", output); |
+void SparseHistogram::WriteAscii(const HistogramSamples* snapshot, |
+ std::string* output) const { |
+ WriteAsciiImpl(true, "\n", snapshot, output); |
} |
bool SparseHistogram::SerializeInfoImpl(Pickle* pickle) const { |
@@ -211,9 +213,15 @@ void SparseHistogram::GetCountAndBucketData(Count* count, |
void SparseHistogram::WriteAsciiImpl(bool graph_it, |
const std::string& newline, |
+ const HistogramSamples* snapshot, |
std::string* output) const { |
- // Get a local copy of the data so we are consistent. |
- std::unique_ptr<HistogramSamples> snapshot = SnapshotSamples(); |
+ std::unique_ptr<HistogramSamples> local_snapshot; |
+ if (!snapshot) { |
+ // Get local (stack) copies of all effectively volatile class data so |
+ // that we are consistent across our output activities. |
+ local_snapshot = SnapshotSamples(); |
+ snapshot = local_snapshot.get(); |
+ } |
Count total_count = snapshot->TotalCount(); |
double scaled_total_count = total_count / 100.0; |