| // 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_ |