1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
ash / system / input_device_settings / settings_updated_metrics_info.h [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_SYSTEM_INPUT_DEVICE_SETTINGS_SETTINGS_UPDATED_METRICS_INFO_H_
#define ASH_SYSTEM_INPUT_DEVICE_SETTINGS_SETTINGS_UPDATED_METRICS_INFO_H_
#include <array>
#include <cstdint>
#include "ash/ash_export.h"
#include "base/time/time.h"
#include "base/values.h"
namespace ash {
// SettingsUpdatedMetricsInfo is in charge of keeping track of settings updated
// metrics info as well as serializing/deserializing to/from `base::Value`
// objects.
class ASH_EXPORT SettingsUpdatedMetricsInfo {
public:
enum class TimePeriod : uint8_t {
kOneHour,
kThreeHours,
kOneDay,
kThreeDays,
kOneWeek,
kMinValue = kOneHour,
kMaxValue = kOneWeek
};
enum class Category {
kFirstEver = 0,
kDefault = 1,
kSynced = 2,
kMinValue = kFirstEver,
kMaxValue = kSynced,
};
SettingsUpdatedMetricsInfo(Category category,
base::Time initial_connection_time);
~SettingsUpdatedMetricsInfo();
SettingsUpdatedMetricsInfo(const SettingsUpdatedMetricsInfo&);
// Serializes a `SettingsUpdatedMetricsInfo` object from a
// `base::Value::Dict`.
// Returns `std::nullopt` if any necessary fields are missing.
static std::optional<SettingsUpdatedMetricsInfo> FromDict(
const base::Value::Dict& dict);
// Converts the object to a `base::Value::Dict` to be stored in prefs.
base::Value::Dict ToDict() const;
// Records that an update happened at the given time. Returns the `TimePeriod`
// that corresponds to the time given. Returns `std::nullopt` if the
// `update_time` is greater than the longest period we track.
std::optional<TimePeriod> RecordSettingsUpdate(base::Time update_time);
// Returns the current count for the given `TimePeriod`.
int GetCount(TimePeriod) const;
Category category() const { return category_; }
base::Time initial_connection_time() const {
return initial_connection_time_;
}
private:
Category category_;
base::Time initial_connection_time_;
std::array<int, static_cast<size_t>(TimePeriod::kMaxValue) + 1>
time_period_counts_;
};
} // namespace ash
#endif // ASH_SYSTEM_INPUT_DEVICE_SETTINGS_SETTINGS_UPDATED_METRICS_INFO_H_