// Copyright 2017 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "base/process/process_metrics.h"

#include <lib/fdio/limits.h>
#include <lib/zx/process.h>

#include "base/fuchsia/fuchsia_logging.h"
#include "base/memory/ptr_util.h"

namespace base {

size_t GetMaxFds() {
  return FDIO_MAX_FD;
}

size_t GetHandleLimit() {
  // Duplicated from the internal Magenta kernel constant kMaxHandleCount
  // (zircon/kernel/object/handle.cc).
  return 256 * 1024u;
}

size_t GetSystemCommitCharge() {
  // TODO(https://crbug.com/926581): Fuchsia does not support this.
  return 0;
}

ProcessMetrics::ProcessMetrics(ProcessHandle process) : process_(process) {}

// static
std::unique_ptr<ProcessMetrics> ProcessMetrics::CreateProcessMetrics(
    ProcessHandle process) {
  return base::WrapUnique(new ProcessMetrics(process));
}

TimeDelta ProcessMetrics::GetCumulativeCPUUsage() {
  zx_info_task_runtime_t stats;

  zx_status_t status = zx::unowned_process(process_)->get_info(
      ZX_INFO_TASK_RUNTIME, &stats, sizeof(stats), nullptr, nullptr);
  ZX_CHECK(status == ZX_OK, status);

  return TimeDelta::FromZxDuration(stats.cpu_time);
}

bool GetSystemMemoryInfo(SystemMemoryInfoKB* meminfo) {
  // TODO(https://crbug.com/926581).
  return false;
}

}  // namespace base
