Since the last 2 months, my SwiftKey keyboard has been at times almost unusable: keystrokes are lost and taps are understood as swipes. This doesn't always happen, and together with the fact that its predictions work so much better than the stock keyboard (also because the stock keyboard's dictionary is much emptier, having been barely used) is the reason why I stuck with SwiftKey until now. Also, I've never been truly sure about the problem being limited to Swiftkey, since using the normal keyboard was frustrating as well.
Now I finally decided to look at the output of logcat, and after trying to type sentences for a while, and seeing plenty of Skipped frames
messages (and some other errors[1]). I found this really nasty slowdown:
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3784.6ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (822.2, 1491.6)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3765.9ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (823.2, 1471.6)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3757.1ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (824.2, 1449.7)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3744.3ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (824.2, 1426.8)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3730.9ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (824.2, 1401.9)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3717.8ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (824.2, 1377.0)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3704.7ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (823.2, 1350.1)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3691.1ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (822.2, 1321.2)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3677.5ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (820.2, 1291.3)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3663.9ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (817.2, 1260.4)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3650.2ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (814.2, 1229.5)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3636.3ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (812.2, 1199.6)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3623.2ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (811.2, 1171.7)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3609.5ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (811.2, 1147.8)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3596.0ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=2, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (811.2, 1128.9)]), policyFlags=0x47000000
I/InputDispatcher( 777): Window 'Window{42b9e6f8 u0 com.touchtype.swiftkey/com.touchtype.settings.TouchTypeKeyboardSettings}' spent 3583.8ms processing the last input event: MotionEvent(deviceId=5, source=0x00001002, action=1, flags=0x00000000, metaState=0x00000000, buttonState=0x00000000, edgeFlags=0x00000000, xPrecision=1.0, yPrecision=1.0, displayId=0, pointers=[0: (811.2, 1128.9)]), policyFlags=0x47000000
I/Choreographer( 1199): Skipped 238 frames! The application may be doing too much work on its main thread.
I/Choreographer( 1199): Skipped 36 frames! The application may be doing too much work on its main thread.
Aside from this, most of the system is still butter smooth (not always, but basically never find perceive missing touches as with SwiftKey), and I wouldn't put the blame on the hardware: I always have 1.5 GB of ram free, and the phone I'm using has pretty good hardware, definitely better than the average device (it's an OnePlus 1: Snapdragon 801 and 3GB of RAM)
Is there a way to easily debug this issue as an user, and maybe submit an actionable bug report to SwiftKey (as well as confirming that it's their fault)?
[1]: this is probably unrelated, since it's quite common to see it in unrelated logcats by googling, but here it is:
E/ActivityThread( 1199): Service com.touchtype.telemetry.TelemetryService has leaked ServiceConnection com.touchtype_fluency.service.FluencyServiceProxy$1@45949788 that was originally bound here
E/ActivityThread( 1199): android.app.ServiceConnectionLeaked: Service com.touchtype.telemetry.TelemetryService has leaked ServiceConnection com.touchtype_fluency.service.FluencyServiceProxy$1@45949788 that was originally bound here
E/ActivityThread( 1199): at android.app.LoadedApk$ServiceDispatcher.<init>(LoadedApk.java:977)
E/ActivityThread( 1199): at android.app.LoadedApk.getServiceDispatcher(LoadedApk.java:871)
E/ActivityThread( 1199): at android.app.ContextImpl.bindServiceCommon(ContextImpl.java:1625)
E/ActivityThread( 1199): at android.app.ContextImpl.bindService(ContextImpl.java:1608)
E/ActivityThread( 1199): at android.content.ContextWrapper.bindService(ContextWrapper.java:517)
E/ActivityThread( 1199): at com.touchtype_fluency.service.FluencyServiceProxy.onCreate(FluencyServiceProxy.java:88)
E/ActivityThread( 1199): at com.touchtype.telemetry.handlers.w.<init>(UpgradeActionsHandler.java:40)
E/ActivityThread( 1199): at com.touchtype.telemetry.handlers.t.a(TelemetryHandlerFactory.java:92)
E/ActivityThread( 1199): at com.touchtype.telemetry.TelemetryService.a(TelemetryService.java:277)
E/ActivityThread( 1199): at com.touchtype.telemetry.TelemetryService.a(TelemetryService.java:71)
E/ActivityThread( 1199): at com.touchtype.telemetry.TelemetryService$b.handleMessage(TelemetryService.java:118)
E/ActivityThread( 1199): at android.os.Handler.dispatchMessage(Handler.java:102)
E/ActivityThread( 1199): at android.os.Looper.loop(Looper.java:136)
E/ActivityThread( 1199): at android.os.HandlerThread.run(HandlerThread.java:61)