// Copyright 2016 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 "components/sync_sessions/sync_sessions_metrics.h"

#include <algorithm>
#include <utility>

#include "base/logging.h"
#include "base/metrics/histogram_macros.h"
#include "base/time/time.h"
#include "components/sessions/core/session_types.h"
#include "components/sync_sessions/sessions_sync_manager.h"
#include "components/sync_sessions/synced_session.h"

namespace sync_sessions {

// static
void SyncSessionsMetrics::RecordYoungestForeignTabAgeOnNTP(
    SessionsSyncManager* sessions_sync_manager) {
  if (sessions_sync_manager != nullptr) {
    std::vector<const SyncedSession*> foreign_sessions;
    sessions_sync_manager->GetAllForeignSessions(&foreign_sessions);
    base::Time best(MaxTabTimestamp(foreign_sessions));
    base::Time now(base::Time::Now());
    // Don't emit metrics if the foreign tab is timestamped in the future. While
    // the timestamp is set on a different machine, and we may lose some
    // fraction of metrics to clock skew, we don't want the potential to have
    // bad machines with clocks many hours off causing lots of seemingly 0
    // second entries.
    if (base::Time::UnixEpoch() < best && best <= now) {
      UMA_HISTOGRAM_CUSTOM_COUNTS(
          "Sync.YoungestForeignTabAgeOnNTP", (now - best).InSeconds(), 1,
          base::TimeDelta::FromDays(14).InSeconds(), 100);
    }
  }
}

// static
base::Time SyncSessionsMetrics::MaxTabTimestamp(
    const std::vector<const SyncedSession*>& sessions) {
  // While Sessions are ordered by recency, windows and tabs are not. Because
  // the timestamp of sessions are updated when windows/tabs are removed, we
  // only need to search until all the remaining sessions are older than the
  // most recent tab we've found so far.
  base::Time best(base::Time::UnixEpoch());
  for (const SyncedSession* session : sessions) {
    if (session->modified_time < best) {
      break;
    }
    for (const auto& key_value : session->windows) {
      for (const auto& tab : key_value.second->wrapped_window.tabs) {
        best = std::max(best, tab->timestamp);
      }
    }
  }
  return best;
}

}  // namespace sync_sessions
