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

Side by Side Diff: counter.h

Issue 2736008: Measure and report time between user-space process crashes. (Closed) Base URL: ssh://git@chromiumos-git/metrics.git
Patch Set: No need to start the back off again on crashes. Created 10 years, 6 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
« no previous file with comments | « no previous file | counter.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS 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 METRICS_COUNTER_H_ 5 #ifndef METRICS_COUNTER_H_
6 #define METRICS_COUNTER_H_ 6 #define METRICS_COUNTER_H_
7 7
8 #include <gtest/gtest_prod.h> // for FRIEND_TEST 8 #include <gtest/gtest_prod.h> // for FRIEND_TEST
9 9
10 namespace chromeos_metrics { 10 namespace chromeos_metrics {
11 11
12 // TaggedCounter maintains a persistent storage (i.e., a file) 12 // TaggedCounter maintains a persistent storage (i.e., a file)
13 // aggregation counter for a given tag (e.g., day, hour) that survives 13 // aggregation counter for a given tag (e.g., day, hour) that survives
14 // system shutdowns, reboots and crashes, as well as daemon process 14 // system shutdowns, reboots and crashes, as well as daemon process
15 // restarts. The counter object is initialized by pointing to the 15 // restarts. The counter object is initialized by pointing to the
16 // persistent storage file and providing a callback used for reporting 16 // persistent storage file and providing a callback used for reporting
17 // aggregated data. The counter can then be updated with additional 17 // aggregated data. The counter can then be updated with additional
18 // event counts. The aggregated count is reported through the 18 // event counts. The aggregated count is reported through the
19 // callback when the counter is explicitly flushed or when data for a 19 // callback when the counter is explicitly flushed or when data for a
20 // new tag arrives. 20 // new tag arrives.
21 class TaggedCounterInterface { 21 class TaggedCounterInterface {
22 public: 22 public:
23 // Callback type used for reporting aggregated or flushed data. 23 // Callback type used for reporting aggregated or flushed data.
24 // Once this callback is invoked by the counter, the reported 24 // Once this callback is invoked by the counter, the reported
25 // aggregated data is discarded. Only aggregated data with positive 25 // aggregated data is discarded.
26 // counts is reported.
27 // 26 //
28 // |handle| is the |reporter_handle| pointer passed through Init. 27 // |handle| is the |reporter_handle| pointer passed through Init.
29 // |tag| is the tag associated with the aggregated count. 28 // |tag| is the tag associated with the aggregated count.
30 // |count| is aggregated count. 29 // |count| is aggregated count.
31 typedef void (*Reporter)(void* handle, int tag, int count); 30 typedef void (*Reporter)(void* handle, int tag, int count);
32 31
33 virtual ~TaggedCounterInterface() {} 32 virtual ~TaggedCounterInterface() {}
34 33
35 // Initializes the counter by providing the persistent storage 34 // Initializes the counter by providing the persistent storage
36 // location |filename| and a |reporter| callback for reporting 35 // location |filename| and a |reporter| callback for reporting
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 void ReadRecord(int fd); 116 void ReadRecord(int fd);
118 117
119 // If there's an existing valid record and either |flush| is true, 118 // If there's an existing valid record and either |flush| is true,
120 // or the new |tag| is different than the old one, reports the 119 // or the new |tag| is different than the old one, reports the
121 // aggregated data through the reporter callback and resets the 120 // aggregated data through the reporter callback and resets the
122 // cached record. 121 // cached record.
123 void ReportRecord(int tag, bool flush); 122 void ReportRecord(int tag, bool flush);
124 123
125 // Updates the cached record given the new |tag| and |count|. This 124 // Updates the cached record given the new |tag| and |count|. This
126 // method expects either a null cached record, or a valid cached 125 // method expects either a null cached record, or a valid cached
127 // record with the same tag as |tag|. 126 // record with the same tag as |tag|. If |flush| is true, the method
128 void UpdateRecord(int tag, int count); 127 // asserts that the cached record is null and returns.
128 void UpdateRecord(int tag, int count, bool flush);
129 129
130 // If the cached record state is dirty, updates the persistent 130 // If the cached record state is dirty, updates the persistent
131 // storage specified through file descriptor |fd| and switches the 131 // storage specified through file descriptor |fd| and switches the
132 // record state to non-dirty. 132 // record state to non-dirty.
133 void WriteRecord(int fd); 133 void WriteRecord(int fd);
134 134
135 // Persistent storage file path. 135 // Persistent storage file path.
136 const char* filename_; 136 const char* filename_;
137 137
138 // Aggregated data reporter callback and handle to pass-through. 138 // Aggregated data reporter callback and handle to pass-through.
139 Reporter reporter_; 139 Reporter reporter_;
140 void* reporter_handle_; 140 void* reporter_handle_;
141 141
142 // Current cached aggregation record. 142 // Current cached aggregation record.
143 Record record_; 143 Record record_;
144 144
145 // Current cached aggregation record state. 145 // Current cached aggregation record state.
146 RecordState record_state_; 146 RecordState record_state_;
147 }; 147 };
148 148
149 } // namespace chromeos_metrics 149 } // namespace chromeos_metrics
150 150
151 #endif // METRICS_COUNTER_H_ 151 #endif // METRICS_COUNTER_H_
OLDNEW
« no previous file with comments | « no previous file | counter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698