Skip to content
This repository was archived by the owner on Apr 3, 2020. It is now read-only.

Commit 1910289

Browse files
mariakhomenkoCommit bot
authored and
Commit bot
committed
Record document mode histogram in UMA on every upload.
* Refactors the code to allow adding metrics as part of metrics provider interface * Implements a function in android_metrics_provider to record a new histogram which records the current document mode. This is needed for better analysis in Hera. I am adding a new histogram because the semantics are a bit different from DocumentActivity.RunningMode. The previous histogram is used only to record eligible devices that have manually opted in or out. The new histogram will record for all devices regardless of whether they could possibly be in document mode. BUG=418642 Review URL: https://codereview.chromium.org/658903002 Cr-Commit-Position: refs/heads/master@{#300375}
1 parent 77a224a commit 1910289

14 files changed

+121
-25
lines changed

chrome/android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,4 +84,14 @@ private static boolean hasSyncPermissions(Context context) {
8484
Bundle userRestrictions = manager.getUserRestrictions();
8585
return !userRestrictions.getBoolean(UserManager.DISALLOW_MODIFY_ACCOUNTS, false);
8686
}
87+
88+
/**
89+
* Records the current document mode state with native-side feature utilities.
90+
* @param enabled Whether the document mode is enabled.
91+
*/
92+
public static void setDocumentModeEnabled(boolean enabled) {
93+
nativeSetDocumentModeEnabled(enabled);
94+
}
95+
96+
private static native void nativeSetDocumentModeEnabled(boolean enabled);
8797
}

chrome/browser/android/chrome_jni_registrar.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "chrome/browser/android/dom_distiller/feedback_reporter_android.h"
1919
#include "chrome/browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.h"
2020
#include "chrome/browser/android/favicon_helper.h"
21+
#include "chrome/browser/android/feature_utilities.h"
2122
#include "chrome/browser/android/find_in_page/find_in_page_bridge.h"
2223
#include "chrome/browser/android/foreign_session_helper.h"
2324
#include "chrome/browser/android/intent_helper.h"
@@ -144,6 +145,7 @@ static base::android::RegistrationMethod kChromeRegisteredMethods[] = {
144145
prerender::ExternalPrerenderHandlerAndroid::
145146
RegisterExternalPrerenderHandlerAndroid },
146147
{ "FaviconHelper", FaviconHelper::RegisterFaviconHelper },
148+
{ "FeatureUtilities", RegisterFeatureUtilities },
147149
{ "FeedbackReporter", dom_distiller::android::RegisterFeedbackReporter },
148150
{ "FindInPageBridge", FindInPageBridge::RegisterFindInPageBridge },
149151
{ "FontSizePrefsAndroid", FontSizePrefsAndroid::Register },
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// Copyright 2014 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "chrome/browser/android/feature_utilities.h"
6+
7+
#include "jni/FeatureUtilities_jni.h"
8+
9+
namespace {
10+
bool document_mode_enabled = false;
11+
} // namespace
12+
13+
namespace chrome {
14+
namespace android {
15+
16+
RunningModeHistogram GetDocumentModeValue() {
17+
return document_mode_enabled ? RUNNING_MODE_DOCUMENT_MODE :
18+
RUNNING_MODE_TABBED_MODE;
19+
}
20+
21+
} // namespace android
22+
} // namespace chrome
23+
24+
25+
static void SetDocumentModeEnabled(JNIEnv* env,
26+
jclass clazz,
27+
jboolean enabled) {
28+
document_mode_enabled = enabled;
29+
}
30+
31+
bool RegisterFeatureUtilities(JNIEnv* env) {
32+
return RegisterNativesImpl(env);
33+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2014 The Chromium Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#ifndef CHROME_BROWSER_ANDROID_FEATURE_UTILITIES_H_
6+
#define CHROME_BROWSER_ANDROID_FEATURE_UTILITIES_H_
7+
8+
#include <jni.h>
9+
10+
namespace chrome {
11+
namespace android {
12+
13+
enum RunningModeHistogram {
14+
RUNNING_MODE_DOCUMENT_MODE,
15+
RUNNING_MODE_TABBED_MODE,
16+
RUNNING_MODE_MAX
17+
};
18+
19+
RunningModeHistogram GetDocumentModeValue();
20+
21+
} // namespace android
22+
} // namespace chrome
23+
24+
bool RegisterFeatureUtilities(JNIEnv* env);
25+
26+
#endif // CHROME_BROWSER_ANDROID_FEATURE_UTILITIES_H_

chrome/browser/metrics/android_metrics_provider.cc

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
#include "base/prefs/pref_service.h"
1010
#include "base/prefs/scoped_user_pref_update.h"
1111
#include "base/values.h"
12+
#include "chrome/browser/android/feature_utilities.h"
1213
#include "chrome/common/pref_names.h"
1314

1415
namespace {
@@ -37,6 +38,13 @@ AndroidMetricsProvider::AndroidMetricsProvider(PrefService* local_state)
3738
AndroidMetricsProvider::~AndroidMetricsProvider() {
3839
}
3940

41+
void AndroidMetricsProvider::ProvideGeneralMetrics(
42+
metrics::ChromeUserMetricsExtension* uma_proto) {
43+
UMA_HISTOGRAM_ENUMERATION(
44+
"DocumentActivity.Enabled",
45+
chrome::android::GetDocumentModeValue(),
46+
chrome::android::RUNNING_MODE_MAX);
47+
}
4048

4149
void AndroidMetricsProvider::ProvideStabilityMetrics(
4250
metrics::SystemProfileProto* system_profile_proto) {

chrome/browser/metrics/android_metrics_provider.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,18 +12,26 @@
1212
class PrefService;
1313
class PrefRegistrySimple;
1414

15+
namespace metrics {
16+
class ChromeUserMetricsExtension;
17+
}
18+
1519
// AndroidMetricsProvider provides Android-specific stability metrics.
1620
class AndroidMetricsProvider : public metrics::MetricsProvider {
1721
public:
1822
// Creates the AndroidMetricsProvider with the given |local_state|.
1923
explicit AndroidMetricsProvider(PrefService* local_state);
2024
virtual ~AndroidMetricsProvider();
2125

26+
// metrics::MetricsProvider:
27+
virtual void ProvideGeneralMetrics(
28+
metrics::ChromeUserMetricsExtension* uma_proto) override;
29+
2230
// Called when the Activity that the user interacts with is swapped out.
2331
// TODO(asvitkine): Expose a way for Android code to actually invoke this.
2432
void OnForegroundActivityChanged(ActivityTypeIds::Type type);
2533

26-
// metrics::MetricsDataProvider:
34+
// metrics::MetricsProvider:
2735
virtual void ProvideStabilityMetrics(
2836
metrics::SystemProfileProto* system_profile_proto) override;
2937

chrome/browser/metrics/chrome_metrics_service_client.cc

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -239,11 +239,6 @@ void ChromeMetricsServiceClient::CollectFinalMetrics(
239239
DCHECK(!waiting_for_collect_final_metrics_step_);
240240
waiting_for_collect_final_metrics_step_ = true;
241241

242-
#if !defined(OS_CHROMEOS) && !defined(OS_IOS)
243-
// Record the signin status histogram value.
244-
signin_status_metrics_provider_->RecordSigninStatusHistogram();
245-
#endif
246-
247242
base::Closure callback =
248243
base::Bind(&ChromeMetricsServiceClient::OnMemoryDetailCollectionDone,
249244
weak_ptr_factory_.GetWeakPtr());
@@ -339,10 +334,9 @@ void ChromeMetricsServiceClient::Initialize() {
339334
#endif // defined(OS_CHROMEOS)
340335

341336
#if !defined(OS_CHROMEOS) && !defined(OS_IOS)
342-
signin_status_metrics_provider_ =
343-
SigninStatusMetricsProvider::CreateInstance();
344337
metrics_service_->RegisterMetricsProvider(
345-
scoped_ptr<metrics::MetricsProvider>(signin_status_metrics_provider_));
338+
scoped_ptr<metrics::MetricsProvider>(
339+
SigninStatusMetricsProvider::CreateInstance()));
346340
#endif
347341
}
348342

chrome/browser/metrics/chrome_metrics_service_client.h

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -168,12 +168,6 @@ class ChromeMetricsServiceClient
168168
GoogleUpdateMetricsProviderWin* google_update_metrics_provider_;
169169
#endif
170170

171-
#if !defined(OS_CHROMEOS) && !defined(OS_IOS)
172-
// The SigninStatusMetricsProvider instance that was registered with
173-
// MetricsService. Has the same lifetime as |metrics_service_|.
174-
SigninStatusMetricsProvider* signin_status_metrics_provider_;
175-
#endif
176-
177171
// Callback that is called when initial metrics gathering is complete.
178172
base::Closure finished_gathering_initial_metrics_callback_;
179173

chrome/browser/metrics/signin_status_metrics_provider.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ SigninStatusMetricsProvider::~SigninStatusMetricsProvider() {
7171
factory->RemoveObserver(this);
7272
}
7373

74-
void SigninStatusMetricsProvider::RecordSigninStatusHistogram() {
74+
void SigninStatusMetricsProvider::ProvideGeneralMetrics(
75+
metrics::ChromeUserMetricsExtension* uma_proto) {
7576
UMA_HISTOGRAM_ENUMERATION(
7677
"UMA.ProfileSignInStatus", signin_status_, SIGNIN_STATUS_MAX);
7778
// After a histogram value is recorded, a new UMA session will be started, so
@@ -201,7 +202,7 @@ void SigninStatusMetricsProvider::UpdateStatusWhenBrowserAdded(bool signed_in) {
201202
(signin_status_ == ALL_PROFILES_SIGNED_IN && !signed_in)) {
202203
SetSigninStatus(MIXED_SIGNIN_STATUS);
203204
} else if (signin_status_ == UNKNOWN_SIGNIN_STATUS) {
204-
// If when function RecordSigninStatusHistogram() is called, Chrome is
205+
// If when function ProvideGeneralMetrics() is called, Chrome is
205206
// running in the background with no browser window opened, |signin_status_|
206207
// will be reset to |UNKNOWN_SIGNIN_STATUS|. Then this newly added browser
207208
// is the only opened browser/profile and its signin status represents

chrome/browser/metrics/signin_status_metrics_provider.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,16 @@
1616
#include "components/signin/core/browser/signin_manager_base.h"
1717

1818
class Browser;
19+
class ChromeUserMetricsExtension;
1920

2021
namespace base {
2122
class FilePath;
2223
}
2324

25+
namespace metrics {
26+
class ChromeUserMetricsExtension;
27+
}
28+
2429
// Collect login status of all opened profiles during one UMA session and record
2530
// the value into a histogram before UMA log is uploaded. It's currently not
2631
// supported on platform chromeos, Android or iOS.
@@ -31,10 +36,9 @@ class SigninStatusMetricsProvider : public metrics::MetricsProvider,
3136
public:
3237
virtual ~SigninStatusMetricsProvider();
3338

34-
// Record the collected sign-in status into a histogram and re-check current
35-
// sign-in status to get prepared for the next UMA session. Called by
36-
// MetricsServiceClient when it is collecting final metrics.
37-
void RecordSigninStatusHistogram();
39+
// metrics::MetricsProvider:
40+
void ProvideGeneralMetrics(
41+
metrics::ChromeUserMetricsExtension* uma_proto) override;
3842

3943
// Factory method, creates a new instance of this class.
4044
static SigninStatusMetricsProvider* CreateInstance();

chrome/chrome_browser.gypi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
'browser/android/enhanced_bookmarks/enhanced_bookmarks_bridge.h',
5252
'browser/android/favicon_helper.cc',
5353
'browser/android/favicon_helper.h',
54+
'browser/android/feature_utilities.cc',
55+
'browser/android/feature_utilities.h',
5456
'browser/android/find_in_page/find_in_page_bridge.cc',
5557
'browser/android/find_in_page/find_in_page_bridge.h',
5658
'browser/android/foreign_session_helper.cc',
@@ -2762,6 +2764,7 @@
27622764
'android/java/src/org/chromium/chrome/browser/UmaBridge.java',
27632765
'android/java/src/org/chromium/chrome/browser/UmaUtils.java',
27642766
'android/java/src/org/chromium/chrome/browser/UrlUtilities.java',
2767+
'android/java/src/org/chromium/chrome/browser/util/FeatureUtilities.java',
27652768
'android/java/src/org/chromium/chrome/browser/VoiceSearchTabHelper.java',
27662769
'android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopup.java',
27672770
'android/java/src/org/chromium/chrome/browser/WebsiteSettingsPopupLegacy.java',

components/metrics/metrics_provider.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ class MetricsProvider {
4848
virtual void ClearSavedStabilityMetrics();
4949

5050
// Provides general metrics that are neither system profile nor stability
51-
// metrics.
51+
// metrics. May also be used to add histograms when final metrics are
52+
// collected right before upload.
5253
virtual void ProvideGeneralMetrics(
5354
ChromeUserMetricsExtension* uma_proto);
5455

components/metrics/metrics_service.cc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -778,8 +778,8 @@ void MetricsService::CloseCurrentLog() {
778778
current_log->RecordStabilityMetrics(metrics_providers_.get(),
779779
incremental_uptime, uptime);
780780

781-
RecordCurrentHistograms();
782781
current_log->RecordGeneralMetrics(metrics_providers_.get());
782+
RecordCurrentHistograms();
783783

784784
log_manager_.FinishCurrentLog();
785785
}
@@ -1005,9 +1005,8 @@ void MetricsService::PrepareInitialMetricsLog() {
10051005
MetricsLog* current_log = log_manager_.current_log();
10061006
current_log->RecordStabilityMetrics(metrics_providers_.get(),
10071007
base::TimeDelta(), base::TimeDelta());
1008-
RecordCurrentHistograms();
1009-
10101008
current_log->RecordGeneralMetrics(metrics_providers_.get());
1009+
RecordCurrentHistograms();
10111010

10121011
log_manager_.FinishCurrentLog();
10131012
log_manager_.ResumePausedLog();

tools/metrics/histograms/histograms.xml

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5071,6 +5071,14 @@ Therefore, the affected-histogram name has to have at least one dot in it.
50715071
<summary>Result of DNS probes sent by the probe service.</summary>
50725072
</histogram>
50735073

5074+
<histogram name="DocumentActivity.Enabled" enum="RunningMode">
5075+
<owner>[email protected]</owner>
5076+
<summary>
5077+
Recorded only for Android. Records on every metrics upload whether document
5078+
mode is enabled.
5079+
</summary>
5080+
</histogram>
5081+
50745082
<histogram name="DomainBoundCerts.DBLoadedCount">
50755083
<owner>[email protected]</owner>
50765084
<summary>Number of certs loaded from domain bound cert database.</summary>
@@ -50958,6 +50966,11 @@ To add a new entry, add it with any value and run test to compute valid value.
5095850966
<int value="12" label="Import resource"/>
5095950967
</enum>
5096050968

50969+
<enum name="RunningMode" type="int">
50970+
<int value="0" label="Document Mode"/>
50971+
<int value="1" label="Tabbed Mode"/>
50972+
</enum>
50973+
5096150974
<enum name="SavePasswordPromptResponseType" type="int">
5096250975
<int value="0" label="NO_RESPONSE"/>
5096350976
<int value="1" label="REMEMBER_PASSWORD"/>

0 commit comments

Comments
 (0)