blob: a3aa78779e6a80a31117a236acc9f181d767d0b7 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/resource_coordinator/discard_metrics_lifecycle_unit_observer.h"
#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/resource_coordinator/lifecycle_unit.h"
#include "chrome/browser/resource_coordinator/time.h"
namespace resource_coordinator {
DiscardMetricsLifecycleUnitObserver::DiscardMetricsLifecycleUnitObserver() =
default;
DiscardMetricsLifecycleUnitObserver::~DiscardMetricsLifecycleUnitObserver() =
default;
void DiscardMetricsLifecycleUnitObserver::OnLifecycleUnitStateChanged(
LifecycleUnit* lifecycle_unit) {
if (lifecycle_unit->GetState() == LifecycleUnit::State::DISCARDED)
OnDiscard(lifecycle_unit);
else
OnReload();
}
void DiscardMetricsLifecycleUnitObserver::OnLifecycleUnitDestroyed(
LifecycleUnit* lifecycle_unit) {
// If the browser is not shutting down and the tab is in a LOADED state after
// being discarded, record TabManager.Discarding.ReloadToCloseTime.
if (!g_browser_process->IsShuttingDown() &&
lifecycle_unit->GetState() == LifecycleUnit::State::LOADED &&
!reload_time_.is_null()) {
auto reload_to_close_time = NowTicks() - reload_time_;
UMA_HISTOGRAM_CUSTOM_TIMES(
"TabManager.Discarding.ReloadToCloseTime", reload_to_close_time,
base::TimeDelta::FromSeconds(1), base::TimeDelta::FromDays(1), 100);
}
// This is a self-owned object that destroys itself with the LifecycleUnit
// that it observes.
lifecycle_unit->RemoveObserver(this);
delete this;
}
void DiscardMetricsLifecycleUnitObserver::OnDiscard(
LifecycleUnit* lifecycle_unit) {
discard_time_ = NowTicks();
last_focused_time_before_discard_ =
lifecycle_unit->GetSortKey().last_focused_time;
static int discard_count = 0;
UMA_HISTOGRAM_CUSTOM_COUNTS("TabManager.Discarding.DiscardCount",
++discard_count, 1, 1000, 50);
}
void DiscardMetricsLifecycleUnitObserver::OnReload() {
DCHECK(!discard_time_.is_null());
reload_time_ = NowTicks();
static int reload_count = 0;
UMA_HISTOGRAM_CUSTOM_COUNTS("TabManager.Discarding.ReloadCount",
++reload_count, 1, 1000, 50);
auto discard_to_reload_time = reload_time_ - discard_time_;
UMA_HISTOGRAM_CUSTOM_TIMES(
"TabManager.Discarding.DiscardToReloadTime", discard_to_reload_time,
base::TimeDelta::FromSeconds(1), base::TimeDelta::FromDays(1), 100);
auto inactive_to_reload_time =
reload_time_ - last_focused_time_before_discard_;
UMA_HISTOGRAM_CUSTOM_TIMES(
"TabManager.Discarding.InactiveToReloadTime", inactive_to_reload_time,
base::TimeDelta::FromSeconds(1), base::TimeDelta::FromDays(1), 100);
}
} // namespace resource_coordinator