OLD | NEW |
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/metrics/uma_session_stats.h" | 5 #include "chrome/browser/android/metrics/uma_session_stats.h" |
6 | 6 |
7 #include "base/android/jni_string.h" | 7 #include "base/android/jni_string.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/metrics/histogram.h" | 9 #include "base/metrics/histogram.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 group_name); | 85 group_name); |
86 } | 86 } |
87 | 87 |
88 // Starts/stops the MetricsService when permissions have changed. | 88 // Starts/stops the MetricsService when permissions have changed. |
89 // There are three possible states: | 89 // There are three possible states: |
90 // * Logs are being recorded and being uploaded to the server. | 90 // * Logs are being recorded and being uploaded to the server. |
91 // * Logs are being recorded, but not being uploaded to the server. | 91 // * Logs are being recorded, but not being uploaded to the server. |
92 // This happens when we've got permission to upload on Wi-Fi but we're on a | 92 // This happens when we've got permission to upload on Wi-Fi but we're on a |
93 // mobile connection (for example). | 93 // mobile connection (for example). |
94 // * Logs are neither being recorded or uploaded. | 94 // * Logs are neither being recorded or uploaded. |
95 static void UpdateMetricsServiceState(JNIEnv* env, jobject obj, | 95 static void UpdateMetricsServiceState(JNIEnv* env, |
96 jboolean may_record, jboolean may_upload) { | 96 const JavaParamRef<jobject>& obj, |
| 97 jboolean may_record, |
| 98 jboolean may_upload) { |
97 metrics::MetricsService* metrics = g_browser_process->metrics_service(); | 99 metrics::MetricsService* metrics = g_browser_process->metrics_service(); |
98 DCHECK(metrics); | 100 DCHECK(metrics); |
99 | 101 |
100 if (metrics->recording_active() != may_record) { | 102 if (metrics->recording_active() != may_record) { |
101 // This function puts a consent file with the ClientID in the | 103 // This function puts a consent file with the ClientID in the |
102 // data directory. The ID is passed to the renderer for crash | 104 // data directory. The ID is passed to the renderer for crash |
103 // reporting when things go wrong. | 105 // reporting when things go wrong. |
104 content::BrowserThread::GetBlockingPool()->PostTask(FROM_HERE, | 106 content::BrowserThread::GetBlockingPool()->PostTask(FROM_HERE, |
105 base::Bind( | 107 base::Bind( |
106 base::IgnoreResult(GoogleUpdateSettings::SetCollectStatsConsent), | 108 base::IgnoreResult(GoogleUpdateSettings::SetCollectStatsConsent), |
107 may_record)); | 109 may_record)); |
108 } | 110 } |
109 | 111 |
110 g_browser_process->GetMetricsServicesManager()->UpdatePermissions( | 112 g_browser_process->GetMetricsServicesManager()->UpdatePermissions( |
111 may_record, may_upload); | 113 may_record, may_upload); |
112 } | 114 } |
113 | 115 |
114 // Renderer process crashed in the foreground. | 116 // Renderer process crashed in the foreground. |
115 static void LogRendererCrash(JNIEnv* env, jclass clazz, jboolean is_paused) { | 117 static void LogRendererCrash(JNIEnv* env, |
| 118 const JavaParamRef<jclass>& clazz, |
| 119 jboolean is_paused) { |
116 DCHECK(g_browser_process); | 120 DCHECK(g_browser_process); |
117 | 121 |
118 if (!is_paused) { | 122 if (!is_paused) { |
119 // Increment the renderer crash count in stability metrics. | 123 // Increment the renderer crash count in stability metrics. |
120 PrefService* pref = g_browser_process->local_state(); | 124 PrefService* pref = g_browser_process->local_state(); |
121 DCHECK(pref); | 125 DCHECK(pref); |
122 int value = pref->GetInteger(prefs::kStabilityRendererCrashCount); | 126 int value = pref->GetInteger(prefs::kStabilityRendererCrashCount); |
123 pref->SetInteger(prefs::kStabilityRendererCrashCount, value + 1); | 127 pref->SetInteger(prefs::kStabilityRendererCrashCount, value + 1); |
124 } | 128 } |
125 | 129 |
126 // Note: When we are paused, any UI metric we increment may not make it to | 130 // Note: When we are paused, any UI metric we increment may not make it to |
127 // the disk before we are killed. Treat the count below as a lower bound. | 131 // the disk before we are killed. Treat the count below as a lower bound. |
128 content::RecordAction(base::UserMetricsAction("MobileRendererCrashed")); | 132 content::RecordAction(base::UserMetricsAction("MobileRendererCrashed")); |
129 } | 133 } |
130 | 134 |
131 static void RegisterExternalExperiment(JNIEnv* env, | 135 static void RegisterExternalExperiment(JNIEnv* env, |
132 jclass clazz, | 136 const JavaParamRef<jclass>& clazz, |
133 jint study_id, | 137 jint study_id, |
134 jint experiment_id) { | 138 jint experiment_id) { |
135 const std::string group_name_utf8 = base::IntToString(experiment_id); | 139 const std::string group_name_utf8 = base::IntToString(experiment_id); |
136 | 140 |
137 variations::ActiveGroupId active_group; | 141 variations::ActiveGroupId active_group; |
138 active_group.name = static_cast<uint32>(study_id); | 142 active_group.name = static_cast<uint32>(study_id); |
139 active_group.group = metrics::HashName(group_name_utf8); | 143 active_group.group = metrics::HashName(group_name_utf8); |
140 variations::AssociateGoogleVariationIDForceHashes( | 144 variations::AssociateGoogleVariationIDForceHashes( |
141 variations::GOOGLE_WEB_PROPERTIES, active_group, | 145 variations::GOOGLE_WEB_PROPERTIES, active_group, |
142 static_cast<variations::VariationID>(experiment_id)); | 146 static_cast<variations::VariationID>(experiment_id)); |
143 | 147 |
144 UmaSessionStats::RegisterSyntheticFieldTrialWithNameHash( | 148 UmaSessionStats::RegisterSyntheticFieldTrialWithNameHash( |
145 static_cast<uint32_t>(study_id), group_name_utf8); | 149 static_cast<uint32_t>(study_id), group_name_utf8); |
146 } | 150 } |
147 | 151 |
148 static void RegisterSyntheticFieldTrial(JNIEnv* env, | 152 static void RegisterSyntheticFieldTrial( |
149 jclass clazz, | 153 JNIEnv* env, |
150 jstring jtrial_name, | 154 const JavaParamRef<jclass>& clazz, |
151 jstring jgroup_name) { | 155 const JavaParamRef<jstring>& jtrial_name, |
| 156 const JavaParamRef<jstring>& jgroup_name) { |
152 std::string trial_name(ConvertJavaStringToUTF8(env, jtrial_name)); | 157 std::string trial_name(ConvertJavaStringToUTF8(env, jtrial_name)); |
153 std::string group_name(ConvertJavaStringToUTF8(env, jgroup_name)); | 158 std::string group_name(ConvertJavaStringToUTF8(env, jgroup_name)); |
154 UmaSessionStats::RegisterSyntheticFieldTrial(trial_name, group_name); | 159 UmaSessionStats::RegisterSyntheticFieldTrial(trial_name, group_name); |
155 } | 160 } |
156 | 161 |
157 static void RecordMultiWindowSession(JNIEnv*, jclass, | 162 static void RecordMultiWindowSession(JNIEnv*, |
| 163 const JavaParamRef<jclass>&, |
158 jint area_percent, | 164 jint area_percent, |
159 jint instance_count) { | 165 jint instance_count) { |
160 UMA_HISTOGRAM_PERCENTAGE("MobileStartup.MobileMultiWindowSession", | 166 UMA_HISTOGRAM_PERCENTAGE("MobileStartup.MobileMultiWindowSession", |
161 area_percent); | 167 area_percent); |
162 // Make sure the bucket count is the same as the range. This currently | 168 // Make sure the bucket count is the same as the range. This currently |
163 // expects no more than 10 simultaneous multi window instances. | 169 // expects no more than 10 simultaneous multi window instances. |
164 UMA_HISTOGRAM_CUSTOM_COUNTS("MobileStartup.MobileMultiWindowInstances", | 170 UMA_HISTOGRAM_CUSTOM_COUNTS("MobileStartup.MobileMultiWindowInstances", |
165 instance_count, | 171 instance_count, |
166 1 /* min */, | 172 1 /* min */, |
167 10 /* max */, | 173 10 /* max */, |
168 10 /* bucket count */); | 174 10 /* bucket count */); |
169 } | 175 } |
170 | 176 |
171 static void RecordTabCountPerLoad(JNIEnv*, jclass, jint num_tabs) { | 177 static void RecordTabCountPerLoad(JNIEnv*, |
| 178 const JavaParamRef<jclass>&, |
| 179 jint num_tabs) { |
172 // Record how many tabs total are open. | 180 // Record how many tabs total are open. |
173 UMA_HISTOGRAM_CUSTOM_COUNTS("Tabs.TabCountPerLoad", num_tabs, 1, 200, 50); | 181 UMA_HISTOGRAM_CUSTOM_COUNTS("Tabs.TabCountPerLoad", num_tabs, 1, 200, 50); |
174 } | 182 } |
175 | 183 |
176 static void RecordPageLoaded(JNIEnv*, jclass, jboolean is_desktop_user_agent) { | 184 static void RecordPageLoaded(JNIEnv*, |
| 185 const JavaParamRef<jclass>&, |
| 186 jboolean is_desktop_user_agent) { |
177 // Should be called whenever a page has been loaded. | 187 // Should be called whenever a page has been loaded. |
178 content::RecordAction(UserMetricsAction("MobilePageLoaded")); | 188 content::RecordAction(UserMetricsAction("MobilePageLoaded")); |
179 if (is_desktop_user_agent) { | 189 if (is_desktop_user_agent) { |
180 content::RecordAction( | 190 content::RecordAction( |
181 UserMetricsAction("MobilePageLoadedDesktopUserAgent")); | 191 UserMetricsAction("MobilePageLoadedDesktopUserAgent")); |
182 } | 192 } |
183 } | 193 } |
184 | 194 |
185 static void RecordPageLoadedWithKeyboard(JNIEnv*, jclass) { | 195 static void RecordPageLoadedWithKeyboard(JNIEnv*, const JavaParamRef<jclass>&) { |
186 content::RecordAction(UserMetricsAction("MobilePageLoadedWithKeyboard")); | 196 content::RecordAction(UserMetricsAction("MobilePageLoadedWithKeyboard")); |
187 } | 197 } |
188 | 198 |
189 static jlong Init(JNIEnv* env, jclass obj) { | 199 static jlong Init(JNIEnv* env, const JavaParamRef<jclass>& obj) { |
190 // We should have only one UmaSessionStats instance. | 200 // We should have only one UmaSessionStats instance. |
191 DCHECK(!g_uma_session_stats); | 201 DCHECK(!g_uma_session_stats); |
192 g_uma_session_stats = new UmaSessionStats(); | 202 g_uma_session_stats = new UmaSessionStats(); |
193 return reinterpret_cast<intptr_t>(g_uma_session_stats); | 203 return reinterpret_cast<intptr_t>(g_uma_session_stats); |
194 } | 204 } |
195 | 205 |
196 // Register native methods | 206 // Register native methods |
197 bool RegisterUmaSessionStats(JNIEnv* env) { | 207 bool RegisterUmaSessionStats(JNIEnv* env) { |
198 return RegisterNativesImpl(env); | 208 return RegisterNativesImpl(env); |
199 } | 209 } |
OLD | NEW |