// 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
