123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- // Copyright (c) 2012 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.
- #ifndef BASE_METRICS_SPARSE_HISTOGRAM_H_
- #define BASE_METRICS_SPARSE_HISTOGRAM_H_
- #include <stddef.h>
- #include <stdint.h>
- #include <map>
- #include <memory>
- #include <string>
- #include "base/base_export.h"
- #include "base/macros.h"
- #include "base/metrics/histogram_base.h"
- #include "base/metrics/histogram_samples.h"
- #include "base/synchronization/lock.h"
- #include "base/values.h"
- namespace base {
- class HistogramSamples;
- class PersistentHistogramAllocator;
- class Pickle;
- class PickleIterator;
- class BASE_EXPORT SparseHistogram : public HistogramBase {
- public:
- // If there's one with same name, return the existing one. If not, create a
- // new one.
- static HistogramBase* FactoryGet(const std::string& name, int32_t flags);
- // Create a histogram using data in persistent storage. The allocator must
- // live longer than the created sparse histogram.
- static std::unique_ptr<HistogramBase> PersistentCreate(
- PersistentHistogramAllocator* allocator,
- const char* name,
- HistogramSamples::Metadata* meta,
- HistogramSamples::Metadata* logged_meta);
- ~SparseHistogram() override;
- // HistogramBase implementation:
- uint64_t name_hash() const override;
- HistogramType GetHistogramType() const override;
- bool HasConstructionArguments(Sample expected_minimum,
- Sample expected_maximum,
- uint32_t expected_bucket_count) const override;
- void Add(Sample value) override;
- void AddCount(Sample value, int count) override;
- void AddSamples(const HistogramSamples& samples) override;
- bool AddSamplesFromPickle(base::PickleIterator* iter) override;
- std::unique_ptr<HistogramSamples> SnapshotSamples() const override;
- std::unique_ptr<HistogramSamples> SnapshotDelta() override;
- std::unique_ptr<HistogramSamples> SnapshotFinalDelta() const override;
- void WriteAscii(std::string* output) const override;
- base::DictionaryValue ToGraphDict() const override;
- protected:
- // HistogramBase implementation:
- void SerializeInfoImpl(base::Pickle* pickle) const override;
- private:
- // Clients should always use FactoryGet to create SparseHistogram.
- explicit SparseHistogram(const char* name);
- SparseHistogram(PersistentHistogramAllocator* allocator,
- const char* name,
- HistogramSamples::Metadata* meta,
- HistogramSamples::Metadata* logged_meta);
- friend BASE_EXPORT HistogramBase* DeserializeHistogramInfo(
- 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;
- // Helpers for emitting Ascii graphic. Each method appends data to output.
- 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 HistogramSamples& snapshot,
- std::string* output) const;
- // For constructor calling.
- friend class SparseHistogramTest;
- // Protects access to |samples_|.
- mutable base::Lock lock_;
- // Flag to indicate if PrepareFinalDelta has been previously called.
- mutable bool final_delta_created_ = false;
- std::unique_ptr<HistogramSamples> unlogged_samples_;
- std::unique_ptr<HistogramSamples> logged_samples_;
- DISALLOW_COPY_AND_ASSIGN(SparseHistogram);
- };
- } // namespace base
- #endif // BASE_METRICS_SPARSE_HISTOGRAM_H_
|