// Copyright 2021 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.h"
#include "base/notimplemented.h"
#include "base/process/internal_linux.h"
namespace base {
// static
bool Process::CanSetPriority() {
return false;
}
Process::Priority Process::GetPriority() const {
// See SetPriority().
DCHECK(IsValid());
return Priority::kUserBlocking;
}
bool Process::SetPriority(Priority priority) {
// Not implemented for POSIX systems other than Linux and Mac. With POSIX, if
// we were to lower the process priority we wouldn't be able to raise it back
// to its initial priority.
NOTIMPLEMENTED();
return false;
}
Time Process::CreationTime() const {
// On Android, /proc is mounted (on recent-enough versions) with hidepid=2,
// which hides other PIDs in /proc. This means that only /proc/self is
// accessible. Instead of trying (and failing) to read the file, don't attempt
// to read it. This also provides consistency across releases.
int64_t start_ticks = is_current()
? internal::ReadProcSelfStatsAndGetFieldAsInt64(
internal::VM_STARTTIME)
: 0;
if (!start_ticks)
return Time();
TimeDelta start_offset = internal::ClockTicksToTimeDelta(start_ticks);
Time boot_time = internal::GetBootTime();
if (boot_time.is_null())
return Time();
return Time(boot_time + start_offset);
}
} // namespace base