Commit 4b8ee3d6 authored by Andrew Solovey's avatar Andrew Solovey Committed by Commit Bot

SparseHistogram: Extract header ASCII drawing code

Extract header ASCII graphic emitting code (WriteAsciiHeader) out of
the histogram content drawing method (WriteAsciiImpl) to add more
flexibility in style setup.
Rename method [WriteAsciiImpl] to [WriteAsciiBody].
Move newline symbols to constants.

R=dcheng@chromium.org, sinhak@chromium.org

Bug: 1006447
Change-Id: If4af4c82efffaca10a0c34a9bb8abc98000235b7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2019204
Commit-Queue: Andrei Salavei <solovey@google.com>
Reviewed-by: default avatarKush Sinha <sinhak@chromium.org>
Reviewed-by: default avatarDaniel Cheng <dcheng@chromium.org>
Cr-Commit-Position: refs/heads/master@{#735388}
parent 05eb9e7c
......@@ -17,6 +17,11 @@
#include "base/strings/stringprintf.h"
#include "base/synchronization/lock.h"
namespace {
constexpr char kHtmlNewLine[] = "<br>";
constexpr char kAsciiNewLine[] = "\n";
} // namespace
namespace base {
typedef HistogramBase::Count Count;
......@@ -164,13 +169,23 @@ bool SparseHistogram::AddSamplesFromPickle(PickleIterator* iter) {
}
void SparseHistogram::WriteHTMLGraph(std::string* output) const {
// Get a local copy of the data so we are consistent.
std::unique_ptr<HistogramSamples> snapshot = SnapshotSamples();
output->append("<PRE>");
WriteAsciiImpl(true, "<br>", output);
WriteAsciiHeader(*snapshot, output);
output->append(kHtmlNewLine);
WriteAsciiBody(*snapshot, true, kHtmlNewLine, output);
output->append("</PRE>");
}
void SparseHistogram::WriteAscii(std::string* output) const {
WriteAsciiImpl(true, "\n", output);
// Get a local copy of the data so we are consistent.
std::unique_ptr<HistogramSamples> snapshot = SnapshotSamples();
WriteAsciiHeader(*snapshot, output);
output->append(kAsciiNewLine);
WriteAsciiBody(*snapshot, true, kAsciiNewLine, output);
}
void SparseHistogram::SerializeInfoImpl(Pickle* pickle) const {
......@@ -227,24 +242,20 @@ void SparseHistogram::GetCountAndBucketData(Count* count,
// TODO(kaiwang): Implement. (See HistogramBase::WriteJSON.)
}
void SparseHistogram::WriteAsciiImpl(bool graph_it,
void SparseHistogram::WriteAsciiBody(const HistogramSamples& snapshot,
bool graph_it,
const std::string& newline,
std::string* output) const {
// Get a local copy of the data so we are consistent.
std::unique_ptr<HistogramSamples> snapshot = SnapshotSamples();
Count total_count = snapshot->TotalCount();
Count total_count = snapshot.TotalCount();
double scaled_total_count = total_count / 100.0;
WriteAsciiHeader(total_count, output);
output->append(newline);
// Determine how wide the largest bucket range is (how many digits to print),
// so that we'll be able to right-align starts for the graphical bars.
// Determine which bucket has the largest sample count so that we can
// normalize the graphical bar-width relative to that sample count.
Count largest_count = 0;
Sample largest_sample = 0;
std::unique_ptr<SampleCountIterator> it = snapshot->Iterator();
std::unique_ptr<SampleCountIterator> it = snapshot.Iterator();
while (!it->Done()) {
Sample min;
int64_t max;
......@@ -259,7 +270,7 @@ void SparseHistogram::WriteAsciiImpl(bool graph_it,
size_t print_width = GetSimpleAsciiBucketRange(largest_sample).size() + 1;
// iterate over each item and display them
it = snapshot->Iterator();
it = snapshot.Iterator();
while (!it->Done()) {
Sample min;
int64_t max;
......@@ -280,10 +291,10 @@ void SparseHistogram::WriteAsciiImpl(bool graph_it,
}
}
void SparseHistogram::WriteAsciiHeader(const Count total_count,
void SparseHistogram::WriteAsciiHeader(const HistogramSamples& snapshot,
std::string* output) const {
StringAppendF(output, "Histogram: %s recorded %d samples", histogram_name(),
total_count);
snapshot.TotalCount());
if (flags())
StringAppendF(output, " (flags = 0x%x)", flags());
}
......
......@@ -80,12 +80,13 @@ class BASE_EXPORT SparseHistogram : public HistogramBase {
ListValue* buckets) const override;
// Helpers for emitting Ascii graphic. Each method appends data to output.
void WriteAsciiImpl(bool graph_it,
void WriteAsciiBody(const HistogramSamples& snapshot,
bool graph_it,
const std::string& newline,
std::string* output) const;
// Write a common header message describing this histogram.
void WriteAsciiHeader(const Count total_count,
void WriteAsciiHeader(const HistogramSamples& snapshot,
std::string* output) const;
// For constuctor calling.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment