133fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair/* 233fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * Copyright (C) 2017 The Android Open Source Project 333fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * 433fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * Licensed under the Apache License, Version 2.0 (the "License"); 533fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * you may not use this file except in compliance with the License. 633fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * You may obtain a copy of the License at 733fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * 833fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * http://www.apache.org/licenses/LICENSE-2.0 933fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * 1033fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * Unless required by applicable law or agreed to in writing, software 1133fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * distributed under the License is distributed on an "AS IS" BASIS, 1233fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1333fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * See the License for the specific language governing permissions and 1433fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair * limitations under the License. 1533fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair */ 1633fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair 17357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair#include "include/serviceutils/PriorityDumper.h" 1833fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair 1933fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nairnamespace android { 2033fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair 216a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairconst char16_t PriorityDumper::PROTO_ARG[] = u"--proto"; 226a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairconst char16_t PriorityDumper::PRIORITY_ARG[] = u"--dump-priority"; 236a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairconst char16_t PriorityDumper::PRIORITY_ARG_CRITICAL[] = u"CRITICAL"; 246a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairconst char16_t PriorityDumper::PRIORITY_ARG_HIGH[] = u"HIGH"; 256a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairconst char16_t PriorityDumper::PRIORITY_ARG_NORMAL[] = u"NORMAL"; 266a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair 276a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairenum class PriorityType { INVALID, CRITICAL, HIGH, NORMAL }; 286a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair 296a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairstatic PriorityType getPriorityType(const String16& arg) { 306a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair if (arg == PriorityDumper::PRIORITY_ARG_CRITICAL) { 316a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair return PriorityType::CRITICAL; 326a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair } else if (arg == PriorityDumper::PRIORITY_ARG_HIGH) { 336a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair return PriorityType::HIGH; 346a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair } else if (arg == PriorityDumper::PRIORITY_ARG_NORMAL) { 356a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair return PriorityType::NORMAL; 3633fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair } 376a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair return PriorityType::INVALID; 3833fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair} 3933fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair 406a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nairstatus_t PriorityDumper::dumpAll(int fd, const Vector<String16>& args, bool asProto) { 41357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair status_t status; 426a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair status = dumpCritical(fd, args, asProto); 43357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair if (status != OK) return status; 446a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair status = dumpHigh(fd, args, asProto); 45357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair if (status != OK) return status; 466a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair status = dumpNormal(fd, args, asProto); 47357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair if (status != OK) return status; 48357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair return status; 49357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair} 50357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair 51357988777218502ed68a56a0c8b247ba64b74721Vishnu Nairstatus_t PriorityDumper::priorityDump(int fd, const Vector<String16>& args) { 52357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair status_t status; 536a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair bool asProto = false; 546a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair PriorityType priority = PriorityType::INVALID; 556a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair 566a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair Vector<String16> strippedArgs; 576a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair for (uint32_t argIndex = 0; argIndex < args.size(); argIndex++) { 586a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair if (args[argIndex] == PROTO_ARG) { 596a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair asProto = true; 606a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair } else if (args[argIndex] == PRIORITY_ARG) { 616a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair if (argIndex + 1 < args.size()) { 626a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair argIndex++; 636a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair priority = getPriorityType(args[argIndex]); 646a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair } 6533fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair } else { 666a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair strippedArgs.add(args[argIndex]); 6733fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair } 686a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair } 696a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair 706a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair switch (priority) { 716a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair case PriorityType::CRITICAL: 726a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair status = dumpCritical(fd, strippedArgs, asProto); 736a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair break; 746a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair case PriorityType::HIGH: 756a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair status = dumpHigh(fd, strippedArgs, asProto); 766a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair break; 776a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair case PriorityType::NORMAL: 786a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair status = dumpNormal(fd, strippedArgs, asProto); 796a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair break; 806a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair default: 816a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair status = dumpAll(fd, strippedArgs, asProto); 826a40853e06f5274d84b0fc66e349a36510d1497fVishnu Nair break; 8333fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair } 84357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair return status; 8533fd3be6088bfacaf659108bad67d24103494aa1Vishnu Nair} 86357988777218502ed68a56a0c8b247ba64b74721Vishnu Nair} // namespace android 87