1*6fa2df46SAndroid Build Coastguard Worker // Copyright (C) 2023 The Android Open Source Project 2*6fa2df46SAndroid Build Coastguard Worker // 3*6fa2df46SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*6fa2df46SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*6fa2df46SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*6fa2df46SAndroid Build Coastguard Worker // 7*6fa2df46SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*6fa2df46SAndroid Build Coastguard Worker // 9*6fa2df46SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*6fa2df46SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*6fa2df46SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*6fa2df46SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*6fa2df46SAndroid Build Coastguard Worker // limitations under the License. 14*6fa2df46SAndroid Build Coastguard Worker 15*6fa2df46SAndroid Build Coastguard Worker #pragma once 16*6fa2df46SAndroid Build Coastguard Worker 17*6fa2df46SAndroid Build Coastguard Worker #include <benchmark.pb.h> 18*6fa2df46SAndroid Build Coastguard Worker 19*6fa2df46SAndroid Build Coastguard Worker #include <ditto/logger.h> 20*6fa2df46SAndroid Build Coastguard Worker #include <ditto/syscall.h> 21*6fa2df46SAndroid Build Coastguard Worker 22*6fa2df46SAndroid Build Coastguard Worker #include <sys/syscall.h> 23*6fa2df46SAndroid Build Coastguard Worker #include <unistd.h> 24*6fa2df46SAndroid Build Coastguard Worker 25*6fa2df46SAndroid Build Coastguard Worker namespace dittosuite { 26*6fa2df46SAndroid Build Coastguard Worker 27*6fa2df46SAndroid Build Coastguard Worker enum SchedPolicy { 28*6fa2df46SAndroid Build Coastguard Worker SchedNormal = 0, 29*6fa2df46SAndroid Build Coastguard Worker SchedFifo = 1, 30*6fa2df46SAndroid Build Coastguard Worker SchedRr = 2, 31*6fa2df46SAndroid Build Coastguard Worker SchedBatch = 3, 32*6fa2df46SAndroid Build Coastguard Worker /* SchedIso: reserved but not implemented yet */ 33*6fa2df46SAndroid Build Coastguard Worker SchedIdle = 5, 34*6fa2df46SAndroid Build Coastguard Worker SchedDeadline = 6, 35*6fa2df46SAndroid Build Coastguard Worker }; 36*6fa2df46SAndroid Build Coastguard Worker 37*6fa2df46SAndroid Build Coastguard Worker class SchedAttr { 38*6fa2df46SAndroid Build Coastguard Worker SyscallInterface& syscall_; 39*6fa2df46SAndroid Build Coastguard Worker bool initialized_ = false; 40*6fa2df46SAndroid Build Coastguard Worker SchedAttr__ sched_attr_; 41*6fa2df46SAndroid Build Coastguard Worker 42*6fa2df46SAndroid Build Coastguard Worker public: SchedAttr(SyscallInterface & syscall)43*6fa2df46SAndroid Build Coastguard Worker SchedAttr(SyscallInterface& syscall) : syscall_(syscall) {} 44*6fa2df46SAndroid Build Coastguard Worker 45*6fa2df46SAndroid Build Coastguard Worker void Set() const; 46*6fa2df46SAndroid Build Coastguard Worker bool IsSet() const; 47*6fa2df46SAndroid Build Coastguard Worker 48*6fa2df46SAndroid Build Coastguard Worker SchedAttr& operator=(const dittosuiteproto::SchedAttr& pb); 49*6fa2df46SAndroid Build Coastguard Worker }; 50*6fa2df46SAndroid Build Coastguard Worker 51*6fa2df46SAndroid Build Coastguard Worker class SchedAffinity { 52*6fa2df46SAndroid Build Coastguard Worker SyscallInterface& syscall_; 53*6fa2df46SAndroid Build Coastguard Worker bool initialized_ = false; 54*6fa2df46SAndroid Build Coastguard Worker uint64_t mask_; 55*6fa2df46SAndroid Build Coastguard Worker 56*6fa2df46SAndroid Build Coastguard Worker public: SchedAffinity(SyscallInterface & syscall)57*6fa2df46SAndroid Build Coastguard Worker SchedAffinity(SyscallInterface& syscall) : syscall_(syscall) {} 58*6fa2df46SAndroid Build Coastguard Worker 59*6fa2df46SAndroid Build Coastguard Worker void Set() const; 60*6fa2df46SAndroid Build Coastguard Worker bool IsSet() const; 61*6fa2df46SAndroid Build Coastguard Worker 62*6fa2df46SAndroid Build Coastguard Worker SchedAffinity& operator=(const uint64_t mask); 63*6fa2df46SAndroid Build Coastguard Worker }; 64*6fa2df46SAndroid Build Coastguard Worker 65*6fa2df46SAndroid Build Coastguard Worker 66*6fa2df46SAndroid Build Coastguard Worker struct MultithreadingParams { 67*6fa2df46SAndroid Build Coastguard Worker const std::string name_; 68*6fa2df46SAndroid Build Coastguard Worker SchedAttr sched_attr_; 69*6fa2df46SAndroid Build Coastguard Worker SchedAffinity sched_affinity_; 70*6fa2df46SAndroid Build Coastguard Worker MultithreadingParamsMultithreadingParams71*6fa2df46SAndroid Build Coastguard Worker MultithreadingParams(const std::string& name, const SchedAttr& sched_attr, 72*6fa2df46SAndroid Build Coastguard Worker const SchedAffinity &sched_affinity) 73*6fa2df46SAndroid Build Coastguard Worker : name_(name), sched_attr_(sched_attr), sched_affinity_(sched_affinity) {} 74*6fa2df46SAndroid Build Coastguard Worker }; 75*6fa2df46SAndroid Build Coastguard Worker 76*6fa2df46SAndroid Build Coastguard Worker void setproctitle(int argc, char** argv, const char* title); 77*6fa2df46SAndroid Build Coastguard Worker 78*6fa2df46SAndroid Build Coastguard Worker } // namespace dittosuite 79