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

Side by Side Diff: chrome/browser/android/data_usage/external_data_use_observer_bridge.cc

Issue 1582043002: Add histograms for data usage (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed holte comments Created 4 years, 11 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 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 #include "chrome/browser/android/data_usage/external_data_use_observer_bridge.h" 5 #include "chrome/browser/android/data_usage/external_data_use_observer_bridge.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/android/context_utils.h" 9 #include "base/android/context_utils.h"
10 #include "base/android/jni_string.h" 10 #include "base/android/jni_string.h"
11 #include "base/memory/scoped_ptr.h" 11 #include "base/memory/scoped_ptr.h"
12 #include "base/metrics/field_trial.h" 12 #include "base/metrics/field_trial.h"
13 #include "base/metrics/histogram_macros.h"
13 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
14 #include "base/time/time.h" 15 #include "base/time/time.h"
15 #include "chrome/browser/android/data_usage/data_use_tab_model.h" 16 #include "chrome/browser/android/data_usage/data_use_tab_model.h"
16 #include "chrome/browser/android/data_usage/external_data_use_observer.h" 17 #include "chrome/browser/android/data_usage/external_data_use_observer.h"
17 #include "components/variations/variations_associated_data.h" 18 #include "components/variations/variations_associated_data.h"
18 #include "content/public/browser/browser_thread.h" 19 #include "content/public/browser/browser_thread.h"
19 #include "jni/ExternalDataUseObserver_jni.h" 20 #include "jni/ExternalDataUseObserver_jni.h"
20 21
21 using base::android::ConvertUTF8ToJavaString; 22 using base::android::ConvertUTF8ToJavaString;
22 23
23 namespace { 24 namespace {
24 25
25 // Returns the package name of the control app from the field trial. 26 // Returns the package name of the control app from the field trial.
26 const std::string GetControlAppPackageName() { 27 const std::string GetControlAppPackageName() {
27 return variations::GetVariationParamValue( 28 return variations::GetVariationParamValue(
28 chrome::android::ExternalDataUseObserver:: 29 chrome::android::ExternalDataUseObserver::
29 kExternalDataUseObserverFieldTrial, 30 kExternalDataUseObserverFieldTrial,
30 "control_app_package_name"); 31 "control_app_package_name");
31 } 32 }
32 33
33 } // namespace 34 } // namespace
34 35
35 namespace chrome { 36 namespace chrome {
36 37
37 namespace android { 38 namespace android {
38 39
39 ExternalDataUseObserverBridge::ExternalDataUseObserverBridge() { 40 ExternalDataUseObserverBridge::ExternalDataUseObserverBridge()
41 : construct_time_(base::TimeTicks::Now()),
42 is_first_matching_rule_fetch_(true) {
40 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO)); 43 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
41 44
42 // Detach from IO thread since rest of ExternalDataUseObserverBridge lives on 45 // Detach from IO thread since rest of ExternalDataUseObserverBridge lives on
43 // the UI thread. 46 // the UI thread.
44 thread_checker_.DetachFromThread(); 47 thread_checker_.DetachFromThread();
45 } 48 }
46 49
47 ExternalDataUseObserverBridge::~ExternalDataUseObserverBridge() { 50 ExternalDataUseObserverBridge::~ExternalDataUseObserverBridge() {
48 DCHECK(thread_checker_.CalledOnValidThread()); 51 DCHECK(thread_checker_.CalledOnValidThread());
49 if (j_external_data_use_observer_.is_null()) 52 if (j_external_data_use_observer_.is_null())
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 env, j_external_data_use_observer_.obj()); 92 env, j_external_data_use_observer_.obj());
90 } 93 }
91 94
92 void ExternalDataUseObserverBridge::FetchMatchingRulesDone( 95 void ExternalDataUseObserverBridge::FetchMatchingRulesDone(
93 JNIEnv* env, 96 JNIEnv* env,
94 const base::android::JavaParamRef<jobject>& obj, 97 const base::android::JavaParamRef<jobject>& obj,
95 const base::android::JavaParamRef<jobjectArray>& app_package_name, 98 const base::android::JavaParamRef<jobjectArray>& app_package_name,
96 const base::android::JavaParamRef<jobjectArray>& domain_path_regex, 99 const base::android::JavaParamRef<jobjectArray>& domain_path_regex,
97 const base::android::JavaParamRef<jobjectArray>& label) { 100 const base::android::JavaParamRef<jobjectArray>& label) {
98 DCHECK(thread_checker_.CalledOnValidThread()); 101 DCHECK(thread_checker_.CalledOnValidThread());
102 DCHECK(!construct_time_.is_null());
99 103
100 // Convert to native objects. 104 // Convert to native objects.
101 std::vector<std::string> app_package_name_native; 105 std::vector<std::string> app_package_name_native;
102 std::vector<std::string> domain_path_regex_native; 106 std::vector<std::string> domain_path_regex_native;
103 std::vector<std::string> label_native; 107 std::vector<std::string> label_native;
104 108
105 if (app_package_name && domain_path_regex && label) { 109 if (app_package_name && domain_path_regex && label) {
106 base::android::AppendJavaStringArrayToStringVector( 110 base::android::AppendJavaStringArrayToStringVector(
107 env, app_package_name, &app_package_name_native); 111 env, app_package_name, &app_package_name_native);
108 base::android::AppendJavaStringArrayToStringVector( 112 base::android::AppendJavaStringArrayToStringVector(
109 env, domain_path_regex, &domain_path_regex_native); 113 env, domain_path_regex, &domain_path_regex_native);
110 base::android::AppendJavaStringArrayToStringVector(env, label, 114 base::android::AppendJavaStringArrayToStringVector(env, label,
111 &label_native); 115 &label_native);
112 } 116 }
113 117
114 DCHECK_EQ(app_package_name_native.size(), domain_path_regex_native.size()); 118 DCHECK_EQ(app_package_name_native.size(), domain_path_regex_native.size());
115 DCHECK_EQ(app_package_name_native.size(), label_native.size()); 119 DCHECK_EQ(app_package_name_native.size(), label_native.size());
116 120
117 if (!data_use_tab_model_) 121 if (!data_use_tab_model_)
118 return; 122 return;
119 123
124 if (is_first_matching_rule_fetch_) {
125 is_first_matching_rule_fetch_ = false;
126 UMA_HISTOGRAM_TIMES("DataUsage.Perf.MatchingRuleFirstFetchDuration",
127 base::TimeTicks::Now() - construct_time_);
128 }
129
120 data_use_tab_model_->RegisterURLRegexes( 130 data_use_tab_model_->RegisterURLRegexes(
121 app_package_name_native, domain_path_regex_native, label_native); 131 app_package_name_native, domain_path_regex_native, label_native);
122 } 132 }
123 133
124 void ExternalDataUseObserverBridge::ReportDataUse( 134 void ExternalDataUseObserverBridge::ReportDataUse(
125 const std::string& label, 135 const std::string& label,
126 net::NetworkChangeNotifier::ConnectionType connection_type, 136 net::NetworkChangeNotifier::ConnectionType connection_type,
127 const std::string& mcc_mnc, 137 const std::string& mcc_mnc,
128 const base::Time& start_time, 138 const base::Time& start_time,
129 const base::Time& end_time, 139 const base::Time& end_time,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 data_use_tab_model_->OnControlAppInstalled(); 174 data_use_tab_model_->OnControlAppInstalled();
165 } 175 }
166 176
167 bool RegisterExternalDataUseObserver(JNIEnv* env) { 177 bool RegisterExternalDataUseObserver(JNIEnv* env) {
168 return RegisterNativesImpl(env); 178 return RegisterNativesImpl(env);
169 } 179 }
170 180
171 } // namespace android 181 } // namespace android
172 182
173 } // namespace chrome 183 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698