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

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 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
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
74 env, base::android::GetApplicationContext(), 75 env, base::android::GetApplicationContext(),
75 reinterpret_cast<intptr_t>(this))); 76 reinterpret_cast<intptr_t>(this)));
76 DCHECK(!j_external_data_use_observer_.is_null()); 77 DCHECK(!j_external_data_use_observer_.is_null());
77 78
78 Java_ExternalDataUseObserver_setControlAppPackageName( 79 Java_ExternalDataUseObserver_setControlAppPackageName(
79 env, j_external_data_use_observer_.obj(), 80 env, j_external_data_use_observer_.obj(),
80 ConvertUTF8ToJavaString(env, GetControlAppPackageName()).obj()); 81 ConvertUTF8ToJavaString(env, GetControlAppPackageName()).obj());
81 FetchMatchingRules(); 82 FetchMatchingRules();
82 } 83 }
83 84
84 void ExternalDataUseObserverBridge::FetchMatchingRules() const { 85 void ExternalDataUseObserverBridge::FetchMatchingRules() {
85 DCHECK(thread_checker_.CalledOnValidThread()); 86 DCHECK(thread_checker_.CalledOnValidThread());
87 if (matching_rules_first_fetch_time_.is_null())
tbansal1 2016/01/14 06:59:55 make it a const variable, and set it in the constr
Raj 2016/01/15 06:23:24 Done.
88 matching_rules_first_fetch_time_ = base::TimeTicks::Now();
86 89
87 JNIEnv* env = base::android::AttachCurrentThread(); 90 JNIEnv* env = base::android::AttachCurrentThread();
88 Java_ExternalDataUseObserver_fetchMatchingRules( 91 Java_ExternalDataUseObserver_fetchMatchingRules(
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(!matching_rules_first_fetch_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 UMA_HISTOGRAM_TIMES(
125 "DataUsage.Perf.MatchingRuleFetchDuration",
126 base::TimeTicks::Now() - matching_rules_first_fetch_time_);
tbansal1 2016/01/14 06:59:55 How do we know this is the first fetch? Seems like
Raj 2016/01/15 06:23:24 Fixed
127
120 data_use_tab_model_->RegisterURLRegexes( 128 data_use_tab_model_->RegisterURLRegexes(
121 app_package_name_native, domain_path_regex_native, label_native); 129 app_package_name_native, domain_path_regex_native, label_native);
122 } 130 }
123 131
124 void ExternalDataUseObserverBridge::ReportDataUse( 132 void ExternalDataUseObserverBridge::ReportDataUse(
125 const std::string& label, 133 const std::string& label,
126 net::NetworkChangeNotifier::ConnectionType connection_type, 134 net::NetworkChangeNotifier::ConnectionType connection_type,
127 const std::string& mcc_mnc, 135 const std::string& mcc_mnc,
128 const base::Time& start_time, 136 const base::Time& start_time,
129 const base::Time& end_time, 137 const base::Time& end_time,
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 data_use_tab_model_->OnControlAppInstalled(); 172 data_use_tab_model_->OnControlAppInstalled();
165 } 173 }
166 174
167 bool RegisterExternalDataUseObserver(JNIEnv* env) { 175 bool RegisterExternalDataUseObserver(JNIEnv* env) {
168 return RegisterNativesImpl(env); 176 return RegisterNativesImpl(env);
169 } 177 }
170 178
171 } // namespace android 179 } // namespace android
172 180
173 } // namespace chrome 181 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698