// Copyright 2017 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 "content/browser/memory/swap_metrics_driver_impl_linux.h"

#include <memory>

#include "base/memory/ptr_util.h"
#include "base/process/process_metrics.h"
#include "base/time/time.h"
#include "content/public/browser/swap_metrics_driver.h"

namespace content {

namespace {

bool HasSwap() {
  base::SystemMemoryInfoKB memory_info;
  if (!base::GetSystemMemoryInfo(&memory_info))
    return false;
  return memory_info.swap_total > 0;
}

}  // namespace

// static
std::unique_ptr<SwapMetricsDriver> SwapMetricsDriver::Create(
    std::unique_ptr<Delegate> delegate,
    const base::TimeDelta update_interval) {
  return HasSwap() ? base::WrapUnique<SwapMetricsDriver>(
                         new SwapMetricsDriverImplLinux(std::move(delegate),
                                                        update_interval))
                   : std::unique_ptr<SwapMetricsDriver>();
}

SwapMetricsDriverImplLinux::SwapMetricsDriverImplLinux(
    std::unique_ptr<Delegate> delegate,
    const base::TimeDelta update_interval)
    : SwapMetricsDriverImpl(std::move(delegate), update_interval) {}

SwapMetricsDriverImplLinux::~SwapMetricsDriverImplLinux() = default;

SwapMetricsDriver::SwapMetricsUpdateResult
SwapMetricsDriverImplLinux::UpdateMetricsInternal(base::TimeDelta interval) {
  base::VmStatInfo vmstat;
  if (!base::GetVmStatInfo(&vmstat)) {
    return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateFailed;
  }

  uint64_t in_counts = vmstat.pswpin - last_pswpin_;
  uint64_t out_counts = vmstat.pswpout - last_pswpout_;
  last_pswpin_ = vmstat.pswpin;
  last_pswpout_ = vmstat.pswpout;

  if (interval.is_zero())
    return SwapMetricsDriver::SwapMetricsUpdateResult::
        kSwapMetricsUpdateSuccess;

  delegate_->OnSwapInCount(in_counts, interval);
  delegate_->OnSwapOutCount(out_counts, interval);

  return SwapMetricsDriver::SwapMetricsUpdateResult::kSwapMetricsUpdateSuccess;
}

}  // namespace content
