Commit 6dd1966c authored by John Abd-El-Malek's avatar John Abd-El-Malek Committed by Commit Bot

Notify metrics when WebLayer's activity enters foreground and background.

Bug: 1096390
Change-Id: I83d9062895cdc29c6f21b815105123b376472085
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2251054
Commit-Queue: John Abd-El-Malek <jam@chromium.org>
Reviewed-by: default avatarBo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#780181}
parent 5e523fbf
...@@ -29,6 +29,9 @@ ...@@ -29,6 +29,9 @@
#include "base/android/jni_array.h" #include "base/android/jni_array.h"
#include "base/android/jni_string.h" #include "base/android/jni_string.h"
#include "base/json/json_writer.h" #include "base/json/json_writer.h"
#include "components/metrics/metrics_service.h"
#include "components/ukm/ukm_service.h"
#include "weblayer/browser/android/metrics/weblayer_metrics_service_client.h"
#include "weblayer/browser/browser_process.h" #include "weblayer/browser/browser_process.h"
#include "weblayer/browser/java/jni/BrowserImpl_jni.h" #include "weblayer/browser/java/jni/BrowserImpl_jni.h"
#endif #endif
...@@ -48,6 +51,43 @@ std::vector<BrowserImpl*>& GetBrowsers() { ...@@ -48,6 +51,43 @@ std::vector<BrowserImpl*>& GetBrowsers() {
return *browsers; return *browsers;
} }
#if defined(OS_ANDROID)
void UpdateMetricsService() {
static bool s_foreground = false;
bool foreground = false;
for (auto* browser : GetBrowsers()) {
if (browser->fragment_resumed()) {
// We need at least one browser to be foreground.
foreground = true;
break;
}
}
if (foreground == s_foreground)
return;
s_foreground = foreground;
auto* metrics_service =
WebLayerMetricsServiceClient::GetInstance()->GetMetricsService();
if (metrics_service) {
if (foreground)
metrics_service->OnAppEnterForeground();
else
metrics_service->OnAppEnterBackground();
}
auto* ukm_service =
WebLayerMetricsServiceClient::GetInstance()->GetUkmService();
if (ukm_service) {
if (foreground)
ukm_service->OnAppEnterForeground();
else
ukm_service->OnAppEnterBackground();
}
}
#endif // defined(OS_ANDROID)
} // namespace } // namespace
// static // static
...@@ -213,6 +253,16 @@ void BrowserImpl::OnFragmentStart(JNIEnv* env) { ...@@ -213,6 +253,16 @@ void BrowserImpl::OnFragmentStart(JNIEnv* env) {
FeatureListCreator::GetInstance()->OnBrowserFragmentStarted(); FeatureListCreator::GetInstance()->OnBrowserFragmentStarted();
} }
void BrowserImpl::OnFragmentResume(JNIEnv* env) {
fragment_resumed_ = true;
UpdateMetricsService();
}
void BrowserImpl::OnFragmentPause(JNIEnv* env) {
fragment_resumed_ = false;
UpdateMetricsService();
}
#endif #endif
std::vector<uint8_t> BrowserImpl::GetMinimalPersistenceState( std::vector<uint8_t> BrowserImpl::GetMinimalPersistenceState(
......
...@@ -80,6 +80,10 @@ class BrowserImpl : public Browser { ...@@ -80,6 +80,10 @@ class BrowserImpl : public Browser {
j_minimal_persistence_state); j_minimal_persistence_state);
void WebPreferencesChanged(JNIEnv* env); void WebPreferencesChanged(JNIEnv* env);
void OnFragmentStart(JNIEnv* env); void OnFragmentStart(JNIEnv* env);
void OnFragmentResume(JNIEnv* env);
void OnFragmentPause(JNIEnv* env);
bool fragment_resumed() { return fragment_resumed_; }
#endif #endif
// Used in tests to specify a non-default max (0 means use the default). // Used in tests to specify a non-default max (0 means use the default).
...@@ -130,6 +134,7 @@ class BrowserImpl : public Browser { ...@@ -130,6 +134,7 @@ class BrowserImpl : public Browser {
base::FilePath GetBrowserPersisterDataPath(); base::FilePath GetBrowserPersisterDataPath();
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
bool fragment_resumed_ = false;
base::android::ScopedJavaGlobalRef<jobject> java_impl_; base::android::ScopedJavaGlobalRef<jobject> java_impl_;
#endif #endif
base::ObserverList<BrowserObserver> browser_observers_; base::ObserverList<BrowserObserver> browser_observers_;
......
...@@ -468,10 +468,12 @@ public class BrowserImpl extends IBrowser.Stub { ...@@ -468,10 +468,12 @@ public class BrowserImpl extends IBrowser.Stub {
public void onFragmentResume() { public void onFragmentResume() {
mFragmentResumed = true; mFragmentResumed = true;
WebLayerAccessibilityUtil.get().onBrowserResumed(); WebLayerAccessibilityUtil.get().onBrowserResumed();
BrowserImplJni.get().onFragmentResume(mNativeBrowser);
} }
public void onFragmentPause() { public void onFragmentPause() {
mFragmentResumed = false; mFragmentResumed = false;
BrowserImplJni.get().onFragmentPause(mNativeBrowser);
} }
public boolean isStarted() { public boolean isStarted() {
...@@ -535,5 +537,7 @@ public class BrowserImpl extends IBrowser.Stub { ...@@ -535,5 +537,7 @@ public class BrowserImpl extends IBrowser.Stub {
byte[] persistenceCryptoKey, byte[] minimalPersistenceState); byte[] persistenceCryptoKey, byte[] minimalPersistenceState);
void webPreferencesChanged(long nativeBrowserImpl); void webPreferencesChanged(long nativeBrowserImpl);
void onFragmentStart(long nativeBrowserImpl); void onFragmentStart(long nativeBrowserImpl);
void onFragmentResume(long nativeBrowserImpl);
void onFragmentPause(long nativeBrowserImpl);
} }
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment