dumpsys input 命令
Android中有很多调试命令,今天我们就看一看dumpsys这个命令
可通过dumpsys命令查询系统服务的运行状态(包括运行时对象的成员变量属性值等)
使用adb shell dumpsys -l或者adb shell service list来查看系统有哪些支持的服务
一些常见的系统服务
服务名 | 类名 | 功能描述 |
---|---|---|
activity | ActivityManagerService | AMS相关信息 |
package | PackageManagerService | PMS相关信息 |
window | WindowManagerService | WMS相关信息 |
input | InputManagerService | IMS相关信息 |
power | PowerManagerService | PMS相关信息 |
batterystats | BatterystatsService | 电池统计信息 |
battery | BatteryService | 电池信息 |
alarm | AlarmManagerService | 闹钟信息 |
procstats | ProcessStatsService | 进程统计 |
cpuinfo | CpuBinder | CPU |
meminfo | MemBinder | 内存 |
gfxinfo | GraphicsBinder | 图像 |
dbinfo | DbBinder | 数据库 |
现在我们来解析dumpsys input这个命令
dumpsys源码在frameworks/native/cmds/dumpsys下,源码逻辑很简单主要就是调用对应服务的dump方法,对应input就是调用的InputManagerService的dump方法,将nativeDump返回的数据写入到pw中输出,
base/services/core/java/com/android/server/input/InputManagerService.java
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;
pw.println("INPUT MANAGER (dumpsys input)\n");
String dumpStr = nativeDump(mPtr);
if (dumpStr != null) {
pw.println(dumpStr);
dumpAssociations(pw);
}
}
base/services/core/jni/com_android_server_input_InputManagerService.cpp
void NativeInputManager::dump(std::string& dump) {
dump += "Input Manager State:\n";
{
dump += StringPrintf(INDENT "Interactive: %s\n", toString(mInteractive.load()));
}
{
AutoMutex _l(mLock);
dump += StringPrintf(INDENT "System UI Visibility: 0x%0" PRIx32 "\n",
mLocked.systemUiVisibility);
dump += StringPrintf(INDENT "Pointer Speed: %" PRId32 "\n", mLocked.pointerSpeed);
dump += StringPrintf(INDENT "Pointer Gestures Enabled: %s\n",
toString(mLocked.pointerGesturesEnabled));
dump += StringPrintf(INDENT "Show Touches: %s\n", toString(mLocked.showTouches));
dump += StringPrintf(INDENT "Pointer Capture Enabled: %s\n", toString(mLocked.pointerCapture));
}
dump += "\n";
mInputManager->getReader()->dump(dump);
dump += "\n";
mInputManager->getClassifier()->dump(dump);
dump += "\n";
mInputManager->getDispatcher()->dump(dump);
dump += "\n";
}
其实就是调到NativeInputManager::dump然后分别调用InputReader,InputClassifier,InputDispatcher的dump方法,来输出一些信息,具体逻辑可以查看相关对象的dump方法的实现,其实就是将一些内部保存的数据状态等打印出来,所以为了方便调试也可在方法中定制我们需要的关键信息进行打印