// 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 BASE_METRICS_PERSISTENT_HISTOGRAM_STORAGE_H_
#define BASE_METRICS_PERSISTENT_HISTOGRAM_STORAGE_H_

#include "base/base_export.h"
#include "base/files/file_path.h"
#include "base/macros.h"
#include "base/strings/string_piece.h"

namespace base {

// This class creates a fixed sized persistent memory to allow histograms to be
// stored in it. When a PersistentHistogramStorage is destructed, histograms
// recorded during its lifetime are persisted in the directory
// |storage_base_dir_|/|allocator_name| (see the ctor for allocator_name).
// Histograms are not persisted if the storage directory does not exist on
// destruction. PersistentHistogramStorage should be instantiated as early as
// possible in the process lifetime and should never be instantiated again.
// Persisted histograms will eventually be reported by Chrome.
class BASE_EXPORT PersistentHistogramStorage {
 public:
  enum class StorageDirManagement { kCreate, kUseExisting };

  // Creates a process-wide storage location for histograms that will be written
  // to a file within a directory provided by |set_storage_base_dir()| on
  // destruction.
  // The |allocator_name| is used both as an internal name for the allocator,
  // well as the leaf directory name for the file to which the histograms are
  // persisted. The string must be ASCII.
  // |storage_dir_management| specifies if this instance reuses an existing
  // storage directory, or is responsible for creating one.
  PersistentHistogramStorage(StringPiece allocator_name,
                             StorageDirManagement storage_dir_management);

  ~PersistentHistogramStorage();

  // The storage directory isn't always known during initial construction so
  // it's set separately. The last one wins if there are multiple calls to this
  // method.
  void set_storage_base_dir(const FilePath& storage_base_dir) {
    storage_base_dir_ = storage_base_dir;
  }

  // Disables histogram storage.
  void Disable() { disabled_ = true; }

 private:
  // Metrics files are written into directory
  // |storage_base_dir_|/|allocator_name| (see the ctor for allocator_name).
  FilePath storage_base_dir_;

  // The setting of the storage directory management.
  const StorageDirManagement storage_dir_management_;

  // A flag indicating if histogram storage is disabled. It starts with false,
  // but can be set to true by the caller who decides to throw away its
  // histogram data.
  bool disabled_ = false;

  DISALLOW_COPY_AND_ASSIGN(PersistentHistogramStorage);
};

}  // namespace base

#endif  // BASE_METRICS_PERSISTENT_HISTOGRAM_STORAGE_H_
