Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Side by Side Diff: components/metrics/persistent_system_profile.h

Issue 2950173003: Support add-on 'field trial' records. (Closed)
Patch Set: renamed method Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef BASE_METRICS_PERSISTENT_SYSTEM_PROFILE_H_ 5 #ifndef BASE_METRICS_PERSISTENT_SYSTEM_PROFILE_H_
6 #define BASE_METRICS_PERSISTENT_SYSTEM_PROFILE_H_ 6 #define BASE_METRICS_PERSISTENT_SYSTEM_PROFILE_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/strings/string_piece.h"
10 #include "base/threading/thread_checker.h" 11 #include "base/threading/thread_checker.h"
11 #include "components/metrics/proto/system_profile.pb.h" 12 #include "components/metrics/proto/system_profile.pb.h"
12 13
13 namespace base { 14 namespace base {
14 template <typename T> 15 template <typename T>
15 struct DefaultSingletonTraits; 16 struct DefaultSingletonTraits;
16 class PersistentMemoryAllocator; 17 class PersistentMemoryAllocator;
17 } // namespace base 18 } // namespace base
18 19
19 namespace metrics { 20 namespace metrics {
(...skipping 11 matching lines...) Expand all
31 base::PersistentMemoryAllocator* memory_allocator); 32 base::PersistentMemoryAllocator* memory_allocator);
32 33
33 // Stores a complete system profile. Use the version taking the serialized 34 // Stores a complete system profile. Use the version taking the serialized
34 // version if available to avoid multiple serialization actions. The 35 // version if available to avoid multiple serialization actions. The
35 // |complete| flag indicates that this profile contains all known information 36 // |complete| flag indicates that this profile contains all known information
36 // and can replace whatever exists. If the flag is false, the profile will be 37 // and can replace whatever exists. If the flag is false, the profile will be
37 // stored only if there is nothing else already present. 38 // stored only if there is nothing else already present.
38 void SetSystemProfile(const std::string& serialized_profile, bool complete); 39 void SetSystemProfile(const std::string& serialized_profile, bool complete);
39 void SetSystemProfile(const SystemProfileProto& profile, bool complete); 40 void SetSystemProfile(const SystemProfileProto& profile, bool complete);
40 41
42 // Records the existence of a field trial.
43 void SetFieldTrial(base::StringPiece trial, base::StringPiece group);
Alexei Svitkine (slow) 2017/06/28 14:59:01 Maybe AddFieldTrial? Otherwise the name sounds lik
bcwhite 2017/06/28 16:43:31 Done.
44
41 // Tests if a persistent memory allocator contains an system profile. 45 // Tests if a persistent memory allocator contains an system profile.
42 static bool HasSystemProfile( 46 static bool HasSystemProfile(
43 const base::PersistentMemoryAllocator& memory_allocator); 47 const base::PersistentMemoryAllocator& memory_allocator);
44 48
45 // Retrieves the system profile from a persistent memory allocator. Returns 49 // Retrieves the system profile from a persistent memory allocator. Returns
46 // true if a profile was successfully retrieved. 50 // true if a profile was successfully retrieved.
47 static bool GetSystemProfile( 51 static bool GetSystemProfile(
48 const base::PersistentMemoryAllocator& memory_allocator, 52 const base::PersistentMemoryAllocator& memory_allocator,
49 SystemProfileProto* system_profile); 53 SystemProfileProto* system_profile);
50 54
51 private: 55 private:
52 friend class PersistentSystemProfileTest; 56 friend class PersistentSystemProfileTest;
53 57
54 // Defines record types that can be stored inside our local Allocators. 58 // Defines record types that can be stored inside our local Allocators.
55 enum RecordType : uint8_t { 59 enum RecordType : uint8_t {
56 kUnusedSpace = 0, // The default value for empty memory. 60 kUnusedSpace = 0, // The default value for empty memory.
57 kSystemProfileProto, 61 kSystemProfileProto,
62 kFieldTrialInfo,
58 }; 63 };
59 64
60 // A class for managing record allocations inside a persistent memory segment. 65 // A class for managing record allocations inside a persistent memory segment.
61 class RecordAllocator { 66 class RecordAllocator {
62 public: 67 public:
63 // Construct an allocator for writing. 68 // Construct an allocator for writing.
64 RecordAllocator(base::PersistentMemoryAllocator* memory_allocator, 69 RecordAllocator(base::PersistentMemoryAllocator* memory_allocator,
65 size_t min_size); 70 size_t min_size);
66 71
67 // Construct an allocator for reading. 72 // Construct an allocator for reading.
68 RecordAllocator(const base::PersistentMemoryAllocator* memory_allocator); 73 RecordAllocator(const base::PersistentMemoryAllocator* memory_allocator);
69 74
70 // These methods manage writing records to the allocator. Do not mix these 75 // These methods manage writing records to the allocator. Do not mix these
71 // with "read" calls; it's one or the other. 76 // with "read" calls; it's one or the other.
72 void Reset(); 77 void Reset();
73 bool Write(RecordType type, const std::string& record); 78 bool Write(RecordType type, base::StringPiece record);
74 79
75 // Read a record from the allocator. Do not mix this with "write" calls; 80 // Read a record from the allocator. Do not mix this with "write" calls;
76 // it's one or the other. 81 // it's one or the other.
77 bool HasMoreData() const; 82 bool HasMoreData() const;
78 bool Read(RecordType* type, std::string* record) const; 83 bool Read(RecordType* type, std::string* record) const;
79 84
80 base::PersistentMemoryAllocator* allocator() { return allocator_; } 85 base::PersistentMemoryAllocator* allocator() { return allocator_; }
81 86
82 bool has_complete_profile() { return has_complete_profile_; } 87 bool has_complete_profile() { return has_complete_profile_; }
83 void set_complete_profile() { has_complete_profile_ = true; } 88 void set_complete_profile() { has_complete_profile_ = true; }
(...skipping 23 matching lines...) Expand all
107 bool has_complete_profile_; 112 bool has_complete_profile_;
108 113
109 // These change even though the underlying data may be "const". 114 // These change even though the underlying data may be "const".
110 mutable uint32_t alloc_reference_; // Last storage block. 115 mutable uint32_t alloc_reference_; // Last storage block.
111 mutable size_t alloc_size_; // Size of the block. 116 mutable size_t alloc_size_; // Size of the block.
112 mutable size_t end_offset_; // End of data in block. 117 mutable size_t end_offset_; // End of data in block.
113 118
114 // Copy and assign are allowed for easy use with STL containers. 119 // Copy and assign are allowed for easy use with STL containers.
115 }; 120 };
116 121
122 // Write a record to all registered allocators.
123 void WriteToAll(RecordType type, base::StringPiece record);
124
125 // Merges all extension records into a system profile.
Alexei Svitkine (slow) 2017/06/28 14:59:01 Update comment too.
bcwhite 2017/06/28 16:43:31 Done.
126 static void MergeUpdateRecords(
127 const base::PersistentMemoryAllocator& memory_allocator,
128 SystemProfileProto* system_profile);
129
117 // The list of registered persistent allocators, described by RecordAllocator 130 // The list of registered persistent allocators, described by RecordAllocator
118 // instances. 131 // instances.
119 std::vector<RecordAllocator> allocators_; 132 std::vector<RecordAllocator> allocators_;
120 133
121 // Indicates if a complete profile has been stored to all allocators. 134 // Indicates if a complete profile has been stored to all allocators.
122 bool all_have_complete_profile_ = false; 135 bool all_have_complete_profile_ = false;
123 136
124 THREAD_CHECKER(thread_checker_); 137 THREAD_CHECKER(thread_checker_);
125 138
126 DISALLOW_COPY_AND_ASSIGN(PersistentSystemProfile); 139 DISALLOW_COPY_AND_ASSIGN(PersistentSystemProfile);
127 }; 140 };
128 141
129 // A singleton instance of the above. 142 // A singleton instance of the above.
130 class GlobalPersistentSystemProfile : public PersistentSystemProfile { 143 class GlobalPersistentSystemProfile : public PersistentSystemProfile {
131 public: 144 public:
132 static GlobalPersistentSystemProfile* GetInstance(); 145 static GlobalPersistentSystemProfile* GetInstance();
133 146
134 private: 147 private:
135 friend struct base::DefaultSingletonTraits<GlobalPersistentSystemProfile>; 148 friend struct base::DefaultSingletonTraits<GlobalPersistentSystemProfile>;
136 149
137 GlobalPersistentSystemProfile() {} 150 GlobalPersistentSystemProfile() {}
138 ~GlobalPersistentSystemProfile() {} 151 ~GlobalPersistentSystemProfile() {}
139 152
140 DISALLOW_COPY_AND_ASSIGN(GlobalPersistentSystemProfile); 153 DISALLOW_COPY_AND_ASSIGN(GlobalPersistentSystemProfile);
141 }; 154 };
142 155
143 } // namespace metrics 156 } // namespace metrics
144 157
145 #endif // BASE_METRICS_PERSISTENT_SYSTEM_PROFILE_H_ 158 #endif // BASE_METRICS_PERSISTENT_SYSTEM_PROFILE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698