1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <stdlib.h> 18 19 #include <iostream> 20 21 #include <processgroup/processgroup.h> 22 usage(int exit_status)23[[noreturn]] static void usage(int exit_status) { 24 std::cerr << "Usage: " << getprogname() << " <tid> <profile> [... profileN]" << std::endl 25 << " tid Thread ID to apply the profiles to." << std::endl 26 << " profile Name of the profile to apply." << std::endl 27 << "Applies listed profiles to the thread with specified ID." << std::endl 28 << "Profiles are applied in the order specified in the command line." << std::endl 29 << "If applying a profile fails, remaining profiles are ignored." << std::endl; 30 exit(exit_status); 31 } 32 main(int argc,char * argv[])33int main(int argc, char* argv[]) { 34 if (argc < 3) { 35 usage(EXIT_FAILURE); 36 } 37 38 int tid = atoi(argv[1]); 39 if (tid == 0) { 40 std::cerr << "Invalid thread id" << std::endl; 41 exit(EXIT_FAILURE); 42 } 43 44 for (int i = 2; i < argc; i++) { 45 if (!SetTaskProfiles(tid, {argv[i]})) { 46 std::cerr << "Failed to apply " << argv[i] << " profile" << std::endl; 47 exit(EXIT_FAILURE); 48 } 49 std::cout << "Profile " << argv[i] << " is applied successfully!" << std::endl; 50 } 51 52 return 0; 53 } 54