blob: 21ae7648b5501cb6c00ac838690afa2615d8a693 [file] [log] [blame]
page.title=Dumpsys
@jd:body
<!--
Copyright 2013 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>The <code>dumpsys</code> tool runs on the device and dumps interesting information
about the status of system services.</p>
<h2 id="usage">Usage</h2>
<p>The input system is part of the window manager. To dump its state,
run the following command.</p>
<pre><code>$ adb shell su -- dumpsys window
WINDOW MANAGER INPUT (dumpsys window input)
Event Hub State:
BuiltInKeyboardId: -1
Devices:
...
</code></pre>
<p>The set of information that is reported varies depending on the version of Android.</p>
<h3 id="event-hub-state">Event Hub State</h3>
<p>The <code>EventHub</code> component is responsible for communicating with the kernel device
drivers and identifying device capabilities. Accordingly, its state shows
information about how devices are configured.</p>
<pre><code>Event Hub State:
BuiltInKeyboardId: -1
Devices:
3: tuna-gpio-keypad
Classes: 0x00000001
Path: /dev/input/event2
Location:
UniqueId:
Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
KeyLayoutFile: /system/usr/keylayout/tuna-gpio-keypad.kl
KeyCharacterMapFile: /system/usr/keychars/tuna-gpio-keypad.kcm
ConfigurationFile:
5: Tuna Headset Jack
Classes: 0x00000080
Path: /dev/input/event5
Location: ALSA
UniqueId:
Identifier: bus=0x0000, vendor=0x0000, product=0x0000, version=0x0000
KeyLayoutFile:
KeyCharacterMapFile:
ConfigurationFile:
6: Melfas MMSxxx Touchscreen
Classes: 0x00000014
Path: /dev/input/event1
Location: 3-0048/input0
UniqueId:
Identifier: bus=0x0018, vendor=0x0000, product=0x0000, version=0x0000
KeyLayoutFile:
KeyCharacterMapFile:
ConfigurationFile: /system/usr/idc/Melfas_MMSxxx_Touchscreen.idc
7: Motorola Bluetooth Wireless Keyboard
Classes: 0x8000000b
Path: /dev/input/event6
Location: 0C:DF:A4:B3:2D:BA
UniqueId: 00:0F:F6:80:02:CD
Identifier: bus=0x0005, vendor=0x22b8, product=0x093d, version=0x0288
KeyLayoutFile: /system/usr/keylayout/Vendor_22b8_Product_093d.kl
KeyCharacterMapFile: /system/usr/keychars/Generic.kcm
ConfigurationFile:
</code></pre>
<h4 id="things-to-look-for">Things To Look For</h4>
<ol>
<li>
<p>All of the expected input devices are present.</p>
</li>
<li>
<p>Each input device has an appropriate key layout file, key character map file
and input device configuration file. If the files are missing or contain
syntax errors, then they will not be loaded.</p>
</li>
<li>
<p>Each input device is being classified correctly. The bits in the <code>Classes</code>
field correspond to flags in <code>EventHub.h</code> such as <code>INPUT_DEVICE_CLASS_TOUCH_MT</code>.</p>
</li>
<li>
<p>The <code>BuiltInKeyboardId</code> is correct. If the device does not have a built-in keyboard,
then the id must be <code>-1</code>, otherwise it should be the id of the built-in keyboard.</p>
<p>If you observe that the <code>BuiltInKeyboardId</code> is not <code>-1</code> but it should be, then
you are missing a key character map file for a special function keypad somewhere.
Special function keypad devices should have key character map files that contain
just the line <code>type SPECIAL_FUNCTION</code> (that's what in the <code>tuna-gpio-keykad.kcm</code>
file we see mentioned above).</p>
</li>
</ol>
<h3 id="input-reader-state">Input Reader State</h3>
<p>The <code>InputReader</code> is responsible for decoding input events from the kernel.
Its state dump shows information about how each input device is configured
and recent state changes that occurred, such as key presses or touches on
the touch screen.</p>
<p>This is what a special function keypad looks like:</p>
<pre><code>Input Reader State:
Device 3: tuna-gpio-keypad
IsExternal: false
Sources: 0x00000101
KeyboardType: 1
Keyboard Input Mapper:
Parameters:
AssociatedDisplayId: -1
OrientationAware: false
KeyboardType: 1
Orientation: 0
KeyDowns: 0 keys currently down
MetaState: 0x0
DownTime: 75816923828000
</code></pre>
<p>Here is a touch screen. Notice all of the information about the resolution of
the device and the calibration parameters that were used.</p>
<pre><code> Device 6: Melfas MMSxxx Touchscreen
IsExternal: false
Sources: 0x00001002
KeyboardType: 0
Motion Ranges:
X: source=0x00001002, min=0.000, max=719.001, flat=0.000, fuzz=0.999
Y: source=0x00001002, min=0.000, max=1279.001, flat=0.000, fuzz=0.999
PRESSURE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
SIZE: source=0x00001002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
TOUCH_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
TOUCH_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
TOOL_MAJOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
TOOL_MINOR: source=0x00001002, min=0.000, max=1468.605, flat=0.000, fuzz=0.000
Touch Input Mapper:
Parameters:
GestureMode: spots
DeviceType: touchScreen
AssociatedDisplay: id=0, isExternal=false
OrientationAware: true
Raw Touch Axes:
X: min=0, max=720, flat=0, fuzz=0, resolution=0
Y: min=0, max=1280, flat=0, fuzz=0, resolution=0
Pressure: min=0, max=255, flat=0, fuzz=0, resolution=0
TouchMajor: min=0, max=30, flat=0, fuzz=0, resolution=0
TouchMinor: unknown range
ToolMajor: unknown range
ToolMinor: unknown range
Orientation: unknown range
Distance: unknown range
TiltX: unknown range
TiltY: unknown range
TrackingId: min=0, max=65535, flat=0, fuzz=0, resolution=0
Slot: min=0, max=9, flat=0, fuzz=0, resolution=0
Calibration:
touch.size.calibration: diameter
touch.size.scale: 10.000
touch.size.bias: 0.000
touch.size.isSummed: false
touch.pressure.calibration: amplitude
touch.pressure.scale: 0.005
touch.orientation.calibration: none
touch.distance.calibration: none
SurfaceWidth: 720px
SurfaceHeight: 1280px
SurfaceOrientation: 0
Translation and Scaling Factors:
XScale: 0.999
YScale: 0.999
XPrecision: 1.001
YPrecision: 1.001
GeometricScale: 0.999
PressureScale: 0.005
SizeScale: 0.033
OrientationCenter: 0.000
OrientationScale: 0.000
DistanceScale: 0.000
HaveTilt: false
TiltXCenter: 0.000
TiltXScale: 0.000
TiltYCenter: 0.000
TiltYScale: 0.000
Last Button State: 0x00000000
Last Raw Touch: pointerCount=0
Last Cooked Touch: pointerCount=0
</code></pre>
<p>Here is an external keyboard / mouse combo HID device. (This device doesn't actually
have a mouse but its HID descriptor says it does.)</p>
<pre><code> Device 7: Motorola Bluetooth Wireless Keyboard
IsExternal: true
Sources: 0x00002103
KeyboardType: 2
Motion Ranges:
X: source=0x00002002, min=0.000, max=719.000, flat=0.000, fuzz=0.000
Y: source=0x00002002, min=0.000, max=1279.000, flat=0.000, fuzz=0.000
PRESSURE: source=0x00002002, min=0.000, max=1.000, flat=0.000, fuzz=0.000
VSCROLL: source=0x00002002, min=-1.000, max=1.000, flat=0.000, fuzz=0.000
Keyboard Input Mapper:
Parameters:
AssociatedDisplayId: -1
OrientationAware: false
KeyboardType: 2
Orientation: 0
KeyDowns: 0 keys currently down
MetaState: 0x0
DownTime: 75868832946000
Cursor Input Mapper:
Parameters:
AssociatedDisplayId: 0
Mode: pointer
OrientationAware: false
XScale: 1.000
YScale: 1.000
XPrecision: 1.000
YPrecision: 1.000
HaveVWheel: true
HaveHWheel: false
VWheelScale: 1.000
HWheelScale: 1.000
Orientation: 0
ButtonState: 0x00000000
Down: false
DownTime: 0
</code></pre>
<p>Here is a joystick. Notice how all of the axes have been scaled to a normalized
range. The axis mapping can be configured using key layout files.</p>
<pre><code>Device 18: Logitech Logitech Cordless RumblePad 2
IsExternal: true
Sources: 0x01000511
KeyboardType: 1
Motion Ranges:
X: source=0x01000010, min=-1.000, max=1.000, flat=0.118, fuzz=0.000
Y: source=0x01000010, min=-1.000, max=1.000, flat=0.118, fuzz=0.000
Z: source=0x01000010, min=-1.000, max=1.000, flat=0.118, fuzz=0.000
RZ: source=0x01000010, min=-1.000, max=1.000, flat=0.118, fuzz=0.000
HAT_X: source=0x01000010, min=-1.000, max=1.000, flat=0.000, fuzz=0.000
HAT_Y: source=0x01000010, min=-1.000, max=1.000, flat=0.000, fuzz=0.000
Keyboard Input Mapper:
Parameters:
AssociatedDisplayId: -1
OrientationAware: false
KeyboardType: 1
Orientation: 0
KeyDowns: 0 keys currently down
MetaState: 0x0
DownTime: 675270841000
Joystick Input Mapper:
Axes:
X: min=-1.00000, max=1.00000, flat=0.11765, fuzz=0.00000
scale=0.00784, offset=-1.00000, highScale=0.00784, highOffset=-1.00000
rawAxis=0, rawMin=0, rawMax=255, rawFlat=15, rawFuzz=0, rawResolution=0
Y: min=-1.00000, max=1.00000, flat=0.11765, fuzz=0.00000
scale=0.00784, offset=-1.00000, highScale=0.00784, highOffset=-1.00000
rawAxis=1, rawMin=0, rawMax=255, rawFlat=15, rawFuzz=0, rawResolution=0
Z: min=-1.00000, max=1.00000, flat=0.11765, fuzz=0.00000
scale=0.00784, offset=-1.00000, highScale=0.00784, highOffset=-1.00000
rawAxis=2, rawMin=0, rawMax=255, rawFlat=15, rawFuzz=0, rawResolution=0
RZ: min=-1.00000, max=1.00000, flat=0.11765, fuzz=0.00000
scale=0.00784, offset=-1.00000, highScale=0.00784, highOffset=-1.00000
rawAxis=5, rawMin=0, rawMax=255, rawFlat=15, rawFuzz=0, rawResolution=0
HAT_X: min=-1.00000, max=1.00000, flat=0.00000, fuzz=0.00000
scale=1.00000, offset=0.00000, highScale=1.00000, highOffset=0.00000
rawAxis=16, rawMin=-1, rawMax=1, rawFlat=0, rawFuzz=0, rawResolution=0
HAT_Y: min=-1.00000, max=1.00000, flat=0.00000, fuzz=0.00000
scale=1.00000, offset=0.00000, highScale=1.00000, highOffset=0.00000
rawAxis=17, rawMin=-1, rawMax=1, rawFlat=0, rawFuzz=0, rawResolution=0
</code></pre>
<p>At the end of the input reader dump there is some information about global configuration
parameters such as the mouse pointer speed.</p>
<pre><code> Configuration:
ExcludedDeviceNames: []
VirtualKeyQuietTime: 0.0ms
PointerVelocityControlParameters: scale=1.000, lowThreshold=500.000, highThreshold=3000.000, acceleration=3.000
WheelVelocityControlParameters: scale=1.000, lowThreshold=15.000, highThreshold=50.000, acceleration=4.000
PointerGesture:
Enabled: true
QuietInterval: 100.0ms
DragMinSwitchSpeed: 50.0px/s
TapInterval: 150.0ms
TapDragInterval: 300.0ms
TapSlop: 20.0px
MultitouchSettleInterval: 100.0ms
MultitouchMinDistance: 15.0px
SwipeTransitionAngleCosine: 0.3
SwipeMaxWidthRatio: 0.2
MovementSpeedRatio: 0.8
ZoomSpeedRatio: 0.3
</code></pre>
<h4 id="things-to-look-for_1">Things To Look For</h4>
<ol>
<li>
<p>All of the expected input devices are present.</p>
</li>
<li>
<p>Each input device has been configured appropriately. Especially check the
touch screen and joystick axes.</p>
</li>
</ol>
<h3 id="input-dispatcher-state">Input Dispatcher State</h3>
<p>The <code>InputDispatcher</code> is responsible for sending input events to applications.
Its state dump shows information about which window is being touched, the
state of the input queue, whether an ANR is in progress, and so on.</p>
<pre><code>Input Dispatcher State:
DispatchEnabled: 1
DispatchFrozen: 0
FocusedApplication: name='AppWindowToken{41b03a10 token=Token{41bdcf78 ActivityRecord{418ab728 com.android.settings/.Settings}}}', dispatchingTimeout=5000.000ms
FocusedWindow: name='Window{41908458 Keyguard paused=false}'
TouchDown: false
TouchSplit: false
TouchDeviceId: -1
TouchSource: 0x00000000
TouchedWindows: &lt;none&gt;
Windows:
0: name='Window{41bd5b18 NavigationBar paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x05800068, type=0x000007e3, layer=181000, frame=[0,1184][720,1280], scale=1.000000, touchableRegion=[0,1184][720,1280], inputFeatures=0x00000000, ownerPid=306, ownerUid=1000, dispatchingTimeout=5000.000ms
1: name='Window{41a19770 RecentsPanel paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01820100, type=0x000007de, layer=151000, frame=[0,0][720,1184], scale=1.000000, touchableRegion=[0,0][720,1184], inputFeatures=0x00000000, ownerPid=306, ownerUid=1000, dispatchingTimeout=5000.000ms
2: name='Window{41a78768 StatusBar paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x00800048, type=0x000007d0, layer=141000, frame=[0,0][720,50], scale=1.000000, touchableRegion=[0,0][720,50], inputFeatures=0x00000000, ownerPid=306, ownerUid=1000, dispatchingTimeout=5000.000ms
3: name='Window{41877570 StatusBarExpanded paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x01811328, type=0x000007e1, layer=131005, frame=[0,-1184][720,-114], scale=1.000000, touchableRegion=[0,-1184][720,-114], inputFeatures=0x00000000, ownerPid=306, ownerUid=1000, dispatchingTimeout=5000.000ms
4: name='Window{41bedf20 TrackingView paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01020300, type=0x000007e1, layer=131000, frame=[0,-1032][720,102], scale=1.000000, touchableRegion=[0,-1032][720,102], inputFeatures=0x00000000, ownerPid=306, ownerUid=1000, dispatchingTimeout=5000.000ms
5: name='Window{41908458 Keyguard paused=false}', paused=false, hasFocus=true, hasWallpaper=false, visible=true, canReceiveKeys=true, flags=0x15120800, type=0x000007d4, layer=111000, frame=[0,50][720,1184], scale=1.000000, touchableRegion=[0,50][720,1184], inputFeatures=0x00000000, ownerPid=205, ownerUid=1000, dispatchingTimeout=5000.000ms
6: name='Window{4192cc30 com.android.phasebeam.PhaseBeamWallpaper paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=true, canReceiveKeys=false, flags=0x00000308, type=0x000007dd, layer=21010, frame=[0,0][720,1184], scale=1.000000, touchableRegion=[0,0][720,1184], inputFeatures=0x00000000, ownerPid=429, ownerUid=10046, dispatchingTimeout=5000.000ms
7: name='Window{41866c00 com.android.settings/com.android.settings.Settings paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01810100, type=0x00000001, layer=21005, frame=[0,0][720,1184], scale=1.000000, touchableRegion=[0,0][720,1184], inputFeatures=0x00000000, ownerPid=19000, ownerUid=1000, dispatchingTimeout=5000.000ms
8: name='Window{4197c858 com.android.launcher/com.android.launcher2.Launcher paused=false}', paused=false, hasFocus=false, hasWallpaper=false, visible=false, canReceiveKeys=false, flags=0x01910100, type=0x00000001, layer=21000, frame=[0,0][720,1184], scale=1.000000, touchableRegion=[0,0][720,1184], inputFeatures=0x00000000, ownerPid=515, ownerUid=10032, dispatchingTimeout=5000.000ms
MonitoringChannels: &lt;none&gt;
InboundQueue: length=0
ActiveConnections: &lt;none&gt;
AppSwitch: not pending
Configuration:
MaxEventsPerSecond: 90
KeyRepeatDelay: 50.0ms
KeyRepeatTimeout: 500.0ms
</code></pre>
<h4 id="things-to-look-for_2">Things To Look For</h4>
<ol>
<li>
<p>In general, all input events are being processed as expected.</p>
</li>
<li>
<p>If you touch the touch screen and run dumpsys at the same time, then the <code>TouchedWindows</code>
line should show the window that you are touching.</p>
</li>
</ol>