86 lines
4.4 KiB
C++
86 lines
4.4 KiB
C++
// Copyright 2018 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef COMPONENTS_METRICS_PERSISTENT_HISTOGRAMS_H_
|
|
#define COMPONENTS_METRICS_PERSISTENT_HISTOGRAMS_H_
|
|
|
|
#include <string>
|
|
|
|
#include "base/feature_list.h"
|
|
#include "base/files/file_path.h"
|
|
#include "base/metrics/field_trial_params.h"
|
|
#include "base/strings/string_piece_forward.h"
|
|
|
|
// Feature definition for enabling histogram persistence. Note that this feature
|
|
// (along with its param `kPersistentHistogramsStorage`, declared below) is not
|
|
// used for Chrome on Linux, ChromeOS, Windows, macOS, and Android. Instead,
|
|
// histograms are persisted to a memory-mapped file, and set up before field
|
|
// trial initialization (see //chrome/app/chrome_main_delegate.cc).
|
|
BASE_DECLARE_FEATURE(kPersistentHistogramsFeature);
|
|
|
|
// If `kPersistentHistogramsStorage` is set to this, histograms will be
|
|
// allocated in a memory region backed by a file.
|
|
extern const char kPersistentHistogramStorageMappedFile[];
|
|
|
|
// If `kPersistentHistogramsStorage` is set to this, histograms will be
|
|
// allocated on the heap, but using the same allocator as the one used for
|
|
// file-backed persistent histograms.
|
|
extern const char kPersistentHistogramStorageLocalMemory[];
|
|
|
|
// Determines where histograms will be allocated (should either be
|
|
// `kPersistentHistogramStorageMappedFile` or
|
|
// `kPersistentHistogramStorageLocalMemory`).
|
|
extern const base::FeatureParam<std::string> kPersistentHistogramsStorage;
|
|
|
|
// Persistent browser metrics need to be persisted somewhere. This constant
|
|
// provides a known string to be used for both the allocator's internal name and
|
|
// for a file on disk (relative to metrics_dir) to which they can be saved. This
|
|
// is exported so the name can also be used as a "pref" during configuration.
|
|
extern const char kBrowserMetricsName[];
|
|
|
|
// Like above, this provides a known string to be used for persistent browser
|
|
// metrics. However, metrics under this are "deferred" and sent along with a
|
|
// future session's metrics instead of independently.
|
|
extern const char kDeferredBrowserMetricsName[];
|
|
|
|
// Do all the checking and work necessary to enable persistent histograms.
|
|
// `metrics_dir` specifies the root directory where persistent histograms will
|
|
// live. If `persistent_histograms_enabled` is false, this is essentially a
|
|
// no-op (histograms will continue being allocated on the heap). Otherwise,
|
|
// `storage`, which should be either `kPersistentHistogramStorageMappedFile` or
|
|
// `kPersistentHistogramStorageLocalMemory`, determines where histograms will be
|
|
// allocated.
|
|
// Note: After a call to this, a call toPersistentHistogramsCleanup() below
|
|
// should be made when appropriate.
|
|
void InstantiatePersistentHistograms(const base::FilePath& metrics_dir,
|
|
bool persistent_histograms_enabled,
|
|
base::StringPiece storage);
|
|
|
|
// Schedule the tasks required to cleanup the persistent metrics files.
|
|
void PersistentHistogramsCleanup(const base::FilePath& metrics_dir);
|
|
|
|
// Calls InstantiatePersistentHistograms() using `kPersistentHistogramsFeature`
|
|
// and `kPersistentHistogramsStorage` as params. PersistentHistogramsCleanup()
|
|
// is also called immediately after.
|
|
void InstantiatePersistentHistogramsWithFeaturesAndCleanup(
|
|
const base::FilePath& metrics_dir);
|
|
|
|
// After calling this, histograms from this session that were not sent (i.e.,
|
|
// unlogged samples) will be sent along with a future session's metrics.
|
|
// Normally, those unlogged samples are sent as an "independent log", which uses
|
|
// the system profile in the persistent file. However, there are scenarios where
|
|
// the browser must exit before a system profile is written to the file, which
|
|
// results in the metrics from that session being lost. Calling this function
|
|
// will make so that the unlogged samples are sent with a future session's
|
|
// metrics (whichever is the first to read the file). Note that this may come at
|
|
// the cost of associating the metrics with an incorrect system profile. Returns
|
|
// whether the operation was successful.
|
|
// Note: If you plan on using this, please make sure to get a review from the
|
|
// metrics team. Using this may lead to reporting additional histograms that
|
|
// may not be relevant to what is being experimented with, which can cause
|
|
// confusing/disruptive data.
|
|
bool DeferBrowserMetrics(const base::FilePath& metrics_dir);
|
|
|
|
#endif // COMPONENTS_METRICS_PERSISTENT_HISTOGRAMS_H_
|