| // Copyright 2022 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_SEGMENTATION_PLATFORM_INTERNAL_SIGNALS_UKM_CONFIG_H_ |
| #define COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_SIGNALS_UKM_CONFIG_H_ |
| |
| #include <cstdint> |
| |
| #include "base/containers/flat_map.h" |
| #include "base/containers/flat_set.h" |
| #include "components/segmentation_platform/internal/database/ukm_types.h" |
| |
| namespace segmentation_platform { |
| |
| // Config for observation and storage of UKM. |
| class UkmConfig { |
| public: |
| using EventsToMetricsMap = |
| base::flat_map<UkmEventHash, base::flat_set<UkmMetricHash>>; |
| |
| UkmConfig(); |
| ~UkmConfig(); |
| |
| UkmConfig(const UkmConfig&) = delete; |
| UkmConfig& operator=(const UkmConfig&) = delete; |
| |
| // Merge all the events from the given |config|. Returns whether new UKM |
| // events were added to the current config as a result of merging. |
| enum MergeResult { |
| // A new event hash that was not being observed, was added to the config as |
| // a result of the merge. |
| NEW_EVENT_ADDED, |
| // No new event hash was added. NO_NEW_EVENT is returned even if new metrics |
| // were added to existing event hashes. |
| NO_NEW_EVENT |
| }; |
| MergeResult Merge(const UkmConfig& config); |
| |
| // Returns a list of observed event hashes, for sending it to UkmRecorderImpl. |
| base::flat_set<uint64_t> GetRawObservedEvents() const; |
| |
| // Returns a list of metrics observed for the given |event|. Returns nullptr |
| // if the event is not observed. |
| const base::flat_set<UkmMetricHash>* GetObservedMetrics(UkmEventHash event); |
| |
| // Add the given event and metrics for observation. |
| void AddEvent(UkmEventHash event_hash, |
| const base::flat_set<UkmMetricHash>& metrics); |
| |
| const EventsToMetricsMap& metrics_for_event_for_testing() const { |
| return metrics_for_event_; |
| } |
| |
| bool operator==(const UkmConfig& other) const; |
| |
| private: |
| EventsToMetricsMap metrics_for_event_; |
| }; |
| |
| } // namespace segmentation_platform |
| |
| #endif // COMPONENTS_SEGMENTATION_PLATFORM_INTERNAL_SIGNALS_UKM_CONFIG_H_ |