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

Side by Side Diff: chrome/browser/android/data_usage/external_data_use_observer.h

Issue 1491793002: Add histograms for ExternalDataUseObserver (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased Created 5 years 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ 5 #ifndef CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_
6 #define CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ 6 #define CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_
7 7
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <string> 10 #include <string>
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 44
45 // This class allows platform APIs that are external to Chromium to observe how 45 // This class allows platform APIs that are external to Chromium to observe how
46 // much data is used by Chromium on the current Android device. This class 46 // much data is used by Chromium on the current Android device. This class
47 // receives regular expressions from the platform. It also registers as a data 47 // receives regular expressions from the platform. It also registers as a data
48 // use observer with DataUseAggregator, filters the received observations by 48 // use observer with DataUseAggregator, filters the received observations by
49 // applying the regex matching to the URLs of the requests, and notifies the 49 // applying the regex matching to the URLs of the requests, and notifies the
50 // filtered data use to the platform. This class is not thread safe, and must 50 // filtered data use to the platform. This class is not thread safe, and must
51 // only be accessed on IO thread. 51 // only be accessed on IO thread.
52 class ExternalDataUseObserver : public data_usage::DataUseAggregator::Observer { 52 class ExternalDataUseObserver : public data_usage::DataUseAggregator::Observer {
53 public: 53 public:
54 // Result of data usage report submission. This enum must remain synchronized
55 // with the enum of the same name in metrics/histograms/histograms.xml.
56 enum DataUsageReportSubmissionResult {
57 // Submission of data use report to the external observer was successful.
58 DATAUSAGE_REPORT_SUBMISSION_SUCCESSFUL = 0,
59 // Submission of data use report to the external observer returned error.
60 DATAUSAGE_REPORT_SUBMISSION_FAILED = 1,
61 // Submission of data use report to the external observer timed out.
62 DATAUSAGE_REPORT_SUBMISSION_TIMED_OUT = 2,
63 // Data use report was lost before an attempt was made to submit it.
64 DATAUSAGE_REPORT_SUBMISSION_LOST = 3,
65 DATAUSAGE_REPORT_SUBMISSION_MAX = 4
66 };
67
54 // External data use observer field trial name. 68 // External data use observer field trial name.
55 static const char kExternalDataUseObserverFieldTrial[]; 69 static const char kExternalDataUseObserverFieldTrial[];
56 70
57 ExternalDataUseObserver( 71 ExternalDataUseObserver(
58 data_usage::DataUseAggregator* data_use_aggregator, 72 data_usage::DataUseAggregator* data_use_aggregator,
59 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, 73 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner,
60 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner); 74 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner);
61 ~ExternalDataUseObserver() override; 75 ~ExternalDataUseObserver() override;
62 76
63 // Returns true if the |gurl| matches the registered regular expressions. 77 // Returns true if the |gurl| matches the registered regular expressions.
(...skipping 30 matching lines...) Expand all
94 DataUseTabModel* data_use_tab_model() const { 108 DataUseTabModel* data_use_tab_model() const {
95 return data_use_tab_model_.get(); 109 return data_use_tab_model_.get();
96 } 110 }
97 111
98 private: 112 private:
99 friend class DataUseTabModelTest; 113 friend class DataUseTabModelTest;
100 friend class ExternalDataUseObserverTest; 114 friend class ExternalDataUseObserverTest;
101 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferDataUseReports); 115 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferDataUseReports);
102 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferSize); 116 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, BufferSize);
103 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, ChangeRegex); 117 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, ChangeRegex);
118 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, DataUseReportTimedOut);
104 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, HashFunction); 119 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, HashFunction);
105 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, LabelRemoved); 120 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, LabelRemoved);
106 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, MultipleMatchingRules); 121 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, MultipleMatchingRules);
107 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, MultipleRegex); 122 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, MultipleRegex);
108 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, 123 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest,
109 PeriodicFetchMatchingRules); 124 PeriodicFetchMatchingRules);
110 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, ReportsMergedCorrectly); 125 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, ReportsMergedCorrectly);
111 FRIEND_TEST_ALL_PREFIXES(DataUseUITabModelTest, ReportTabEventsTest); 126 FRIEND_TEST_ALL_PREFIXES(DataUseUITabModelTest, ReportTabEventsTest);
112 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, SingleRegex); 127 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, SingleRegex);
113 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest, 128 FRIEND_TEST_ALL_PREFIXES(ExternalDataUseObserverTest,
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
235 250
236 // Aggregator that sends data use observations to |this|. 251 // Aggregator that sends data use observations to |this|.
237 data_usage::DataUseAggregator* data_use_aggregator_; 252 data_usage::DataUseAggregator* data_use_aggregator_;
238 253
239 // Maintains tab sessions. 254 // Maintains tab sessions.
240 scoped_ptr<DataUseTabModel> data_use_tab_model_; 255 scoped_ptr<DataUseTabModel> data_use_tab_model_;
241 256
242 // True if callback from |FetchMatchingRulesDone| is currently pending. 257 // True if callback from |FetchMatchingRulesDone| is currently pending.
243 bool matching_rules_fetch_pending_; 258 bool matching_rules_fetch_pending_;
244 259
245 // True if callback from |SubmitDataUseReportCallback| is currently pending. 260 // Time when the currently pending data use report was submitted.
246 bool submit_data_report_pending_; 261 // |last_data_report_submitted_ticks_| is null if no data use report is
262 // currently pending.
263 base::TimeTicks last_data_report_submitted_ticks_;
264
265 // |pending_report_bytes_| is the total byte count in the data use report that
266 // is currently pending.
267 int64_t pending_report_bytes_;
247 268
248 // Contains matching rules. 269 // Contains matching rules.
249 std::vector<scoped_ptr<MatchingRule>> matching_rules_; 270 std::vector<scoped_ptr<MatchingRule>> matching_rules_;
250 271
251 // Buffered data reports that need to be submitted to the 272 // Buffered data reports that need to be submitted to the
252 // |external_data_use_observer_bridge_|. 273 // |external_data_use_observer_bridge_|.
253 DataUseReports buffered_data_reports_; 274 DataUseReports buffered_data_reports_;
254 275
255 // True if |this| is currently registered as a data use observer. 276 // True if |this| is currently registered as a data use observer.
256 bool registered_as_observer_; 277 bool registered_as_observer_;
(...skipping 17 matching lines...) Expand all
274 // reports. 295 // reports.
275 int64_t total_bytes_buffered_; 296 int64_t total_bytes_buffered_;
276 297
277 // Duration after which matching rules are periodically fetched. 298 // Duration after which matching rules are periodically fetched.
278 const base::TimeDelta fetch_matching_rules_duration_; 299 const base::TimeDelta fetch_matching_rules_duration_;
279 300
280 // Minimum number of bytes that should be buffered before a data use report is 301 // Minimum number of bytes that should be buffered before a data use report is
281 // submitted. 302 // submitted.
282 const int64_t data_use_report_min_bytes_; 303 const int64_t data_use_report_min_bytes_;
283 304
305 // If a data use report is pending for more than |data_report_submit_timeout_|
306 // duration, it is considered as timed out.
307 const base::TimeDelta data_report_submit_timeout_;
308
284 base::ThreadChecker thread_checker_; 309 base::ThreadChecker thread_checker_;
285 310
286 base::WeakPtrFactory<ExternalDataUseObserver> weak_factory_; 311 base::WeakPtrFactory<ExternalDataUseObserver> weak_factory_;
287 312
288 DISALLOW_COPY_AND_ASSIGN(ExternalDataUseObserver); 313 DISALLOW_COPY_AND_ASSIGN(ExternalDataUseObserver);
289 }; 314 };
290 315
291 } // namespace android 316 } // namespace android
292 317
293 } // namespace chrome 318 } // namespace chrome
294 319
295 #endif // CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_ 320 #endif // CHROME_BROWSER_ANDROID_DATA_USAGE_EXTERNAL_DATA_USE_OBSERVER_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698