Refactor AppPlatformMetrics.
This CL is used to prepare for CL:3110470 to support UKM for web apps
opened in browser tab.
Add 2 separate functions: SetWindowActivated and SetWindowInActivated
to handle the internal data structure when windows are activated and
inactivated.
No function change for this CL. Only refactor to simplify the function
OnInstanceUpdate.
BUG=1243477
Change-Id: I07e39c83b161fd55c1e2b6b527e8c7a92b86be81
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3118199
Reviewed-by: Dominick Ng <dominickn@chromium.org>
Commit-Queue: Nancy Wang <nancylingwang@chromium.org>
Cr-Commit-Position: refs/heads/main@{#915484}
diff --git a/chrome/browser/apps/app_service/app_platform_metrics.cc b/chrome/browser/apps/app_service/app_platform_metrics.cc
index 8c0c8c9..8e6273f 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics.cc
+++ b/chrome/browser/apps/app_service/app_platform_metrics.cc
@@ -730,55 +730,67 @@
}
bool is_active = update.State() & apps::InstanceState::kActive;
- auto it = running_start_time_.find(update.InstanceKey());
if (is_active) {
- if (it == running_start_time_.end()) {
- AppTypeName app_type_name =
- GetAppTypeNameForWindow(profile_, app_type, app_id,
- update.InstanceKey().GetEnclosingAppWindow());
- if (app_type_name == apps::AppTypeName::kUnknown) {
- return;
- }
-
- // For browser tabs, record the top browser window running duration only,
- // and skip web apps opened in browser tabs to avoid duration duplicated
- // calculation.
- if (app_type_name == AppTypeName::kChromeBrowser &&
- app_id != extension_misc::kChromeAppId) {
- return;
- }
-
- AppTypeNameV2 app_type_name_v2 =
- GetAppTypeNameV2(profile_, app_type, app_id,
- update.InstanceKey().GetEnclosingAppWindow());
-
- running_start_time_[update.InstanceKey()].start_time =
- base::TimeTicks::Now();
- running_start_time_[update.InstanceKey()].app_type_name = app_type_name;
- running_start_time_[update.InstanceKey()].app_type_name_v2 =
- app_type_name_v2;
-
- ++activated_count_[app_type_name];
- should_refresh_activated_count_pref = true;
-
- start_time_per_five_minutes_[update.InstanceKey()].start_time =
- base::TimeTicks::Now();
- start_time_per_five_minutes_[update.InstanceKey()].app_type_name =
- app_type_name;
- start_time_per_five_minutes_[update.InstanceKey()].app_type_name_v2 =
- app_type_name_v2;
- start_time_per_five_minutes_[update.InstanceKey()].app_id = app_id;
+ auto* window = update.InstanceKey().GetEnclosingAppWindow();
+ AppTypeName app_type_name =
+ GetAppTypeNameForWindow(profile_, app_type, app_id, window);
+ if (app_type_name == apps::AppTypeName::kUnknown) {
+ return;
}
+
+ AppTypeNameV2 app_type_name_v2 =
+ GetAppTypeNameV2(profile_, app_type, app_id, window);
+
+ SetWindowActivated(app_type, app_type_name, app_type_name_v2, app_id,
+ update.InstanceKey());
return;
}
- bool is_close = update.State() & apps::InstanceState::kDestroyed;
- auto usage_time_it = usage_time_per_five_minutes_.find(update.InstanceKey());
+ SetWindowInActivated(app_id, update.InstanceKey(), update.State());
+}
+
+void AppPlatformMetrics::OnInstanceRegistryWillBeDestroyed(
+ apps::InstanceRegistry* cache) {
+ apps::InstanceRegistry::Observer::Observe(nullptr);
+}
+
+void AppPlatformMetrics::SetWindowActivated(
+ apps::mojom::AppType app_type,
+ AppTypeName app_type_name,
+ AppTypeNameV2 app_type_name_v2,
+ const std::string& app_id,
+ const apps::Instance::InstanceKey& instance_key) {
+ auto it = running_start_time_.find(instance_key);
+ if (it != running_start_time_.end()) {
+ return;
+ }
+
+ running_start_time_[instance_key].start_time = base::TimeTicks::Now();
+ running_start_time_[instance_key].app_type_name = app_type_name;
+ running_start_time_[instance_key].app_type_name_v2 = app_type_name_v2;
+
+ ++activated_count_[app_type_name];
+ should_refresh_activated_count_pref = true;
+
+ start_time_per_five_minutes_[instance_key].start_time =
+ base::TimeTicks::Now();
+ start_time_per_five_minutes_[instance_key].app_type_name = app_type_name;
+ start_time_per_five_minutes_[instance_key].app_type_name_v2 =
+ app_type_name_v2;
+ start_time_per_five_minutes_[instance_key].app_id = app_id;
+}
+
+void AppPlatformMetrics::SetWindowInActivated(
+ const std::string& app_id,
+ const apps::Instance::InstanceKey& instance_key,
+ apps::InstanceState state) {
+ bool is_close = state & apps::InstanceState::kDestroyed;
+ auto usage_time_it = usage_time_per_five_minutes_.find(instance_key);
if (is_close && usage_time_it != usage_time_per_five_minutes_.end()) {
usage_time_it->second.window_is_closed = true;
}
- // The app window is inactivated.
+ auto it = running_start_time_.find(instance_key);
if (it == running_start_time_.end()) {
return;
}
@@ -797,22 +809,17 @@
base::TimeDelta running_time =
base::TimeTicks::Now() -
- start_time_per_five_minutes_[update.InstanceKey()].start_time;
+ start_time_per_five_minutes_[instance_key].start_time;
app_type_running_time_per_five_minutes_[app_type_name] += running_time;
app_type_v2_running_time_per_five_minutes_[app_type_name_v2] += running_time;
usage_time_it->second.running_time += running_time;
running_start_time_.erase(it);
- start_time_per_five_minutes_.erase(update.InstanceKey());
+ start_time_per_five_minutes_.erase(instance_key);
should_refresh_duration_pref = true;
}
-void AppPlatformMetrics::OnInstanceRegistryWillBeDestroyed(
- apps::InstanceRegistry* cache) {
- apps::InstanceRegistry::Observer::Observe(nullptr);
-}
-
void AppPlatformMetrics::InitRunningDuration() {
DictionaryPrefUpdate running_duration_update(profile_->GetPrefs(),
kAppRunningDuration);
diff --git a/chrome/browser/apps/app_service/app_platform_metrics.h b/chrome/browser/apps/app_service/app_platform_metrics.h
index c73ef04..2387d6d 100644
--- a/chrome/browser/apps/app_service/app_platform_metrics.h
+++ b/chrome/browser/apps/app_service/app_platform_metrics.h
@@ -203,6 +203,15 @@
void OnInstanceRegistryWillBeDestroyed(
apps::InstanceRegistry* cache) override;
+ void SetWindowActivated(apps::mojom::AppType app_type,
+ AppTypeName app_type_name,
+ AppTypeNameV2 app_type_name_v2,
+ const std::string& app_id,
+ const apps::Instance::InstanceKey& instance_key);
+ void SetWindowInActivated(const std::string& app_id,
+ const apps::Instance::InstanceKey& instance_key,
+ apps::InstanceState state);
+
void InitRunningDuration();
void ClearRunningDuration();