1f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme/** 2f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Copyright (c) 2016, The Android Open Source Project 3f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 4f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Licensed under the Apache License, Version 2.0 (the "License"); 5f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * you may not use this file except in compliance with the License. 6f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * You may obtain a copy of the License at 7f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 8f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * http://www.apache.org/licenses/LICENSE-2.0 9f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 10f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Unless required by applicable law or agreed to in writing, software 11f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * distributed under the License is distributed on an "AS IS" BASIS, 12f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * See the License for the specific language governing permissions and 14f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * limitations under the License. 15f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 16f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 17f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemepackage com.android.server.utils; 18f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 19e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nairimport android.annotation.IntDef; 20e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair 21f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport java.io.FileDescriptor; 22f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemeimport java.io.PrintWriter; 23e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nairimport java.lang.annotation.Retention; 24e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nairimport java.lang.annotation.RetentionPolicy; 25e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nairimport java.util.ArrayList; 26e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nairimport java.util.Arrays; 27e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nairimport java.util.Iterator; 28f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 29f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme/** 30f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Helper for {@link android.os.Binder#dump(java.io.FileDescriptor, String[])} that supports the 31e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * {@link #PRIORITY_ARG} and {@link #PROTO_ARG} arguments. 32f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <p> 33f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Typical usage: 34f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 35f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <pre><code> 36f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemepublic class SpringfieldNuclearPowerPlant extends Binder { 37f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 38f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme private final PriorityDump.PriorityDumper mPriorityDumper = new PriorityDump.PriorityDumper() { 39f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 40f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme @Override 41e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair public void dumpCritical(FileDescriptor fd, PrintWriter pw, String[] args, boolean asProto) { 42e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair if (asProto) { 43e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair ProtoOutputStream proto = new ProtoOutputStream(fd); 44e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair proto.write(SpringfieldProto.DONUTS, 1); 45e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair proto.flush(); 46e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } else { 47e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair pw.println("Donuts in the box: 1"); 48e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 49f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 50f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 51f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme @Override 52f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme public void dumpNormal(FileDescriptor fd, PrintWriter pw, String[] args) { 53e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair if (asProto) { 54e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair ProtoOutputStream proto = new ProtoOutputStream(fd); 55e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair proto.write(SpringfieldProto.REACTOR_STATUS, DANGER_MELTDOWN_IMMINENT); 56e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair proto.flush(); 57e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } else { 58e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair pw.println("Nuclear reactor status: DANGER - MELTDOWN IMMINENT"); 59e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 60f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 61f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme }; 62f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 63f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme @Override 64f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { 65f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme PriorityDump.dump(mPriorityDumper, fd, pw, args); 66f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 67f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme} 68f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 69f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * </code></pre> 70f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 71f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <strong>Disclaimer</strong>: a real-life service should prioritize core status over donuts :-) 72f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 73f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <p>Then to invoke it: 74f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 75f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <pre><code> 76f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 77f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme $ adb shell dumpsys snpp 78f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme Donuts in the box: 1 79f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme Nuclear reactor status: DANGER - MELTDOWN IMMINENT 80f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 81f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair $ adb shell dumpsys snpp --dump-priority CRITICAL 82f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme Donuts in the box: 1 83f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 84f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair $ adb shell dumpsys snpp --dump-priority NORMAL 85f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme Nuclear reactor status: DANGER - MELTDOWN IMMINENT 86f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 87e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair $ adb shell dumpsys snpp --dump-priority CRITICAL --proto 88e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair //binary output 89e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair 90f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * </code></pre> 91f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 92f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 93f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 94f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <p>To run the unit tests: 95f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <pre><code> 96f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 97e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair atest FrameworksServicesTests:PriorityDumpTest 98f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * </code></pre> 99f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 100f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 101f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * @hide 102f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 103f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Lemepublic final class PriorityDump { 104f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 105f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair public static final String PRIORITY_ARG = "--dump-priority"; 106e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair public static final String PROTO_ARG = "--proto"; 107e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair public static final String PRIORITY_ARG_CRITICAL = "CRITICAL"; 108e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair public static final String PRIORITY_ARG_HIGH = "HIGH"; 109e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair public static final String PRIORITY_ARG_NORMAL = "NORMAL"; 110f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 111f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme private PriorityDump() { 112f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme throw new UnsupportedOperationException(); 113f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 114f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 115e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair /** Enum to switch through supported priority types */ 116e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair @Retention(RetentionPolicy.SOURCE) 117e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair @IntDef({PRIORITY_TYPE_INVALID, PRIORITY_TYPE_CRITICAL, PRIORITY_TYPE_HIGH, 118e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair PRIORITY_TYPE_NORMAL}) 119e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair private @interface PriorityType { } 120e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair private static final int PRIORITY_TYPE_INVALID = 0; 121e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair private static final int PRIORITY_TYPE_CRITICAL = 1; 122e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair private static final int PRIORITY_TYPE_HIGH = 2; 123e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair private static final int PRIORITY_TYPE_NORMAL = 3; 124e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair 125f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme /** 126e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * Parses {@code args} matching {@code --dump-priority} and/or {@code --proto}. The matching 127e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * arguments are stripped. 128e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * <p> 129e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * If priority args are passed as an argument, it will call the appropriate method and if proto 130e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * args are passed then the {@code asProto} flag is set. 131f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <p> 132f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair * For example, if called as {@code --dump-priority HIGH arg1 arg2 arg3}, it will call 133e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * <code>dumper.dumpHigh(fd, pw, {"arg1", "arg2", "arg3"}, false) </code> 134f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <p> 135f3648e04f431b39524b469c75fa2c77a3e771faeVishnu Nair * If the {@code --dump-priority} is not set, it calls 136e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * {@link PriorityDumper#dump(FileDescriptor, PrintWriter, String[], boolean)} passing the whole 137f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * {@code args} instead. 138f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 139f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme public static void dump(PriorityDumper dumper, FileDescriptor fd, PrintWriter pw, 140f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme String[] args) { 141e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair boolean asProto = false; 142e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair @PriorityType int priority = PRIORITY_TYPE_INVALID; 143e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair 144e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair if (args == null) { 145e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumper.dump(fd, pw, args, asProto); 146e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return; 147e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 148e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair 149e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair String[] strippedArgs = new String[args.length]; 150e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair int strippedCount = 0; 151e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair for (int argIndex = 0; argIndex < args.length; argIndex++) { 152e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair if (args[argIndex].equals(PROTO_ARG)) { 153e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair asProto = true; 154e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } else if (args[argIndex].equals(PRIORITY_ARG)) { 155e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair if (argIndex + 1 < args.length) { 156e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair argIndex++; 157e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair priority = getPriorityType(args[argIndex]); 158f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 159e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } else { 160e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair strippedArgs[strippedCount++] = args[argIndex]; 161e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 162e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 163e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair 164e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair if (strippedCount < args.length) { 165e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair strippedArgs = Arrays.copyOf(strippedArgs, strippedCount); 166e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 167e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair 168e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair switch (priority) { 169e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair case PRIORITY_TYPE_CRITICAL: { 170e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumper.dumpCritical(fd, pw, strippedArgs, asProto); 171e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return; 172e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 173e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair case PRIORITY_TYPE_HIGH: { 174e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumper.dumpHigh(fd, pw, strippedArgs, asProto); 175e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return; 176e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 177e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair case PRIORITY_TYPE_NORMAL: { 178e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumper.dumpNormal(fd, pw, strippedArgs, asProto); 179e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return; 180e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 181e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair default: { 182e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumper.dump(fd, pw, strippedArgs, asProto); 183e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return; 184f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 185f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 186f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 187f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 188f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme /** 189e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * Converts priority argument type to enum. 190f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 191e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair private static @PriorityType int getPriorityType(String arg) { 192e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair switch (arg) { 193e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair case PRIORITY_ARG_CRITICAL: { 194e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return PRIORITY_TYPE_CRITICAL; 195e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 196e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair case PRIORITY_ARG_HIGH: { 197e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return PRIORITY_TYPE_HIGH; 198e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 199e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair case PRIORITY_ARG_NORMAL: { 200e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair return PRIORITY_TYPE_NORMAL; 201e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 202e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair default: { 203e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair return PRIORITY_TYPE_INVALID; 204e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair } 205e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair } 206f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 207f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 208f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme /** 209f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Helper for {@link android.os.Binder#dump(java.io.FileDescriptor, String[])} that supports the 210e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * {@link #PRIORITY_ARG} and {@link #PROTO_ARG} arguments. 211f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * 212f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * @hide 213f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 214e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair public interface PriorityDumper { 215f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 216f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme /** 217f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Dumps only the critical section. 218f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 219f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme @SuppressWarnings("unused") 220e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair default void dumpCritical(FileDescriptor fd, PrintWriter pw, String[] args, 221e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair boolean asProto) { 222f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 223f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 224f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme /** 225f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Dumps only the high-priority section. 226f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 227f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme @SuppressWarnings("unused") 228e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair default void dumpHigh(FileDescriptor fd, PrintWriter pw, String[] args, boolean asProto) { 229f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 230f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 231f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme /** 232f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Dumps only the normal section. 233f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 234f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme @SuppressWarnings("unused") 235e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair default void dumpNormal(FileDescriptor fd, PrintWriter pw, String[] args, boolean asProto) { 236f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 237f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme 238f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme /** 239f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * Dumps all sections. 240f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * <p> 241f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme * This method is called when 242e3e4d251b9ed680e56e18684a2a24feb94b9cd21Vishnu Nair * {@link PriorityDump#dump(PriorityDumper, FileDescriptor, PrintWriter, String[])} 243e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * is called without priority arguments. By default, it calls the 3 {@code dumpTYPE} 244e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair * methods, so sub-classes just need to implement the priority types they support. 245f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme */ 246f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme @SuppressWarnings("unused") 247e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair default void dump(FileDescriptor fd, PrintWriter pw, String[] args, boolean asProto) { 248e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumpCritical(fd, pw, args, asProto); 249e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumpHigh(fd, pw, args, asProto); 250e78b01ad2d7779ad3a6acfe5acd0068e4840665cVishnu Nair dumpNormal(fd, pw, args, asProto); 251f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 252f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme } 253f4006d9b0be123b2a4e874b89eb4a431d3d49c8bFelipe Leme} 254