blob: a990d0c64463e25f4138138341a381cd0c7dd21c [file] [log] [blame]
// Copyright 2018 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 COMPONENTS_LIVE_TAB_COUNT_METRICS_LIVE_TAB_COUNT_METRICS_H_
#define COMPONENTS_LIVE_TAB_COUNT_METRICS_LIVE_TAB_COUNT_METRICS_H_
#include <string>
#include "base/component_export.h"
// This namespace contains functions for creating histograms bucketed by number
// of live tabs.
//
// All bucket parameters --- number of buckets, bucket sizes, bucket names ---
// are determined at compile time, and these methods are safe to call from any
// thread.
//
// A typical example of creating a histogram bucketed by live tab count using
// STATIC_HISTOGRAM_POINTER_GROUP looks something like this:
// const size_t live_tab_count = GetLiveTabCount();
// const size_t bucket =
// live_tab_count_metrics::BucketForLiveTabCount(live_tab_count);
// STATIC_HISTOGRAM_POINTER_GROUP(
// live_tab_count_metrics::HistogramName(constant_histogram_prefix,
// bucket),
// static_cast<int>(bucket),
// static_cast<int>(live_tab_count_metrics::kNumLiveTabCountBuckets),
// Add(sample),
// base::Histogram::FactoryGet(
// live_tab_count_metrics::HistogramName(constant_histogram_prefix,
// bucket),
// MINIMUM_SAMPLE, MAXIMUM_SAMPLE, BUCKET_COUNT,
// base::HistogramBase::kUmaTargetedHistogramFlag));
// }
namespace live_tab_count_metrics {
// |kNumLiveTabCountBuckets| is used in various constexpr arrays and as a bound
// on the histogram array when using STATIC_HISTOGRAM_POINTER_GROUP. This value
// must be equal to the length of the array of live tab count bucket min values
// (|kLiveTabCountBucketMins|) and the array of bucket names
// (|kLiveTabCountBucketNames|) found in the corresponding .cc file.
constexpr size_t kNumLiveTabCountBuckets = 8;
// Returns the histogram name for |bucket|. The histogram name is the
// concatenation of |prefix| and the name corresponding to |bucket|, which is of
// the form |prefix| + ".ByLiveTabCount." + <BucketRangeText>, where
// <BucketRangeText> is a string describing the bucket range, e.g. "1Tab",
// "3To4Tabs", etc. See |kLiveTabCountBucketNames| for all of the bucket names.
// |bucket| must be in the interval [0, |kNumLiveTabCountBuckets|).
COMPONENT_EXPORT(LIVE_TAB_COUNT_METRICS)
std::string HistogramName(const std::string prefix, size_t bucket);
// Return the bucket index for the |num_live_tabs|.
COMPONENT_EXPORT(LIVE_TAB_COUNT_METRICS)
size_t BucketForLiveTabCount(size_t num_live_tabs);
// These are exposed for unit tests.
namespace internal {
// Returns the number of tabs corresponding to the minimum value of |bucket|.
// |bucket| must be in the interval [0, |kNumLiveTabCountBuckets|).
COMPONENT_EXPORT(LIVE_TAB_COUNT_METRICS)
size_t BucketMin(size_t bucket);
// Returns the number of tabs corresponding to the maximum value of |bucket|.
// |bucket| must be in the interval [0, |kNumLiveTabCountBuckets|).
COMPONENT_EXPORT(LIVE_TAB_COUNT_METRICS)
size_t BucketMax(size_t bucket);
// Returns true if |num_live_tabs| falls within |bucket|.
// |bucket| must be in the interval [0, |kNumLiveTabCountBuckets|).
COMPONENT_EXPORT(LIVE_TAB_COUNT_METRICS)
bool IsInBucket(size_t num_live_tabs, size_t bucket);
} // namespace internal
} // namespace live_tab_count_metrics
#endif // COMPONENTS_LIVE_TAB_COUNT_METRICS_LIVE_TAB_COUNT_METRICS_H_