xref: /aosp_15_r20/external/cronet/base/process/process_android.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2021 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #include "base/process/process.h"
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #include "base/notimplemented.h"
8*6777b538SAndroid Build Coastguard Worker #include "base/process/internal_linux.h"
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker namespace base {
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker // static
CanSetPriority()13*6777b538SAndroid Build Coastguard Worker bool Process::CanSetPriority() {
14*6777b538SAndroid Build Coastguard Worker   return false;
15*6777b538SAndroid Build Coastguard Worker }
16*6777b538SAndroid Build Coastguard Worker 
GetPriority() const17*6777b538SAndroid Build Coastguard Worker Process::Priority Process::GetPriority() const {
18*6777b538SAndroid Build Coastguard Worker   // See SetPriority().
19*6777b538SAndroid Build Coastguard Worker   DCHECK(IsValid());
20*6777b538SAndroid Build Coastguard Worker   return Priority::kUserBlocking;
21*6777b538SAndroid Build Coastguard Worker }
22*6777b538SAndroid Build Coastguard Worker 
SetPriority(Priority priority)23*6777b538SAndroid Build Coastguard Worker bool Process::SetPriority(Priority priority) {
24*6777b538SAndroid Build Coastguard Worker   // Not implemented for POSIX systems other than Linux and Mac. With POSIX, if
25*6777b538SAndroid Build Coastguard Worker   // we were to lower the process priority we wouldn't be able to raise it back
26*6777b538SAndroid Build Coastguard Worker   // to its initial priority.
27*6777b538SAndroid Build Coastguard Worker   NOTIMPLEMENTED();
28*6777b538SAndroid Build Coastguard Worker   return false;
29*6777b538SAndroid Build Coastguard Worker }
30*6777b538SAndroid Build Coastguard Worker 
CreationTime() const31*6777b538SAndroid Build Coastguard Worker Time Process::CreationTime() const {
32*6777b538SAndroid Build Coastguard Worker   // On Android, /proc is mounted (on recent-enough versions) with hidepid=2,
33*6777b538SAndroid Build Coastguard Worker   // which hides other PIDs in /proc. This means that only /proc/self is
34*6777b538SAndroid Build Coastguard Worker   // accessible. Instead of trying (and failing) to read the file, don't attempt
35*6777b538SAndroid Build Coastguard Worker   // to read it. This also provides consistency across releases.
36*6777b538SAndroid Build Coastguard Worker   int64_t start_ticks = is_current()
37*6777b538SAndroid Build Coastguard Worker                             ? internal::ReadProcSelfStatsAndGetFieldAsInt64(
38*6777b538SAndroid Build Coastguard Worker                                   internal::VM_STARTTIME)
39*6777b538SAndroid Build Coastguard Worker                             : 0;
40*6777b538SAndroid Build Coastguard Worker 
41*6777b538SAndroid Build Coastguard Worker   if (!start_ticks)
42*6777b538SAndroid Build Coastguard Worker     return Time();
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker   TimeDelta start_offset = internal::ClockTicksToTimeDelta(start_ticks);
45*6777b538SAndroid Build Coastguard Worker   Time boot_time = internal::GetBootTime();
46*6777b538SAndroid Build Coastguard Worker   if (boot_time.is_null())
47*6777b538SAndroid Build Coastguard Worker     return Time();
48*6777b538SAndroid Build Coastguard Worker   return Time(boot_time + start_offset);
49*6777b538SAndroid Build Coastguard Worker }
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker }  // namespace base
52