summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Adrian Roos <roosa@google.com> 2016-12-16 19:01:58 +0000
committer android-build-merger <android-build-merger@google.com> 2016-12-16 19:01:58 +0000
commit5b5faea151ab1a52dd2b99e28655e0052ba9650c (patch)
tree32d25010f645382c514f9effd80ee2cb04353d31
parent04c372c2715ad0dc00d52986767d05b8b05072c7 (diff)
parent64f87bad12a04b28ffe09d3a071b60be7eb80a46 (diff)
FalsingLog: Fix false positive Log.wtfs
am: 64f87bad12 Change-Id: Ief66fe0f832737f733d728a8b0533bcabfc3c57c
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java42
2 files changed, 44 insertions, 7 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java
index 1338d9d54793..71ddba5ffdcc 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingLog.java
@@ -84,6 +84,11 @@ public class FalsingLog {
log("I", tag, s);
}
+ public static void wLogcat(String tag, String s) {
+ Log.w(TAG, tag + "\t" + s);
+ log("W", tag, s);
+ }
+
public static void w(String tag, String s) {
if (LOGCAT) {
Log.w(TAG, tag + "\t" + s);
@@ -133,7 +138,7 @@ public class FalsingLog {
pw.println();
}
- public static synchronized void wtf(String tag, String s) {
+ public static synchronized void wtf(String tag, String s, Throwable here) {
if (!ENABLED) {
return;
}
@@ -161,6 +166,6 @@ public class FalsingLog {
Log.e(TAG, "Unable to write log, build must be debuggable.");
}
- Log.wtf(TAG, tag + " " + s + "; " + fileMessage);
+ Log.wtf(TAG, tag + " " + s + "; " + fileMessage, here);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java
index 8fc555f14c8a..1abea37519e6 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManager.java
@@ -71,6 +71,7 @@ public class FalsingManager implements SensorEventListener {
private boolean mSessionActive = false;
private int mState = StatusBarState.SHADE;
private boolean mScreenOn;
+ private Runnable mPendingWtf;
protected final ContentObserver mSettingsObserver = new ContentObserver(mHandler) {
@Override
@@ -136,6 +137,7 @@ public class FalsingManager implements SensorEventListener {
private void onSessionStart() {
if (FalsingLog.ENABLED) {
FalsingLog.i("onSessionStart", "classifierEnabled=" + isClassiferEnabled());
+ clearPendingWtf();
}
mBouncerOn = false;
mSessionActive = true;
@@ -172,13 +174,35 @@ public class FalsingManager implements SensorEventListener {
if (FalsingLog.ENABLED) {
// We're getting some false wtfs from touches that happen after the device went
// to sleep. Only report missing sessions that happen when the device is interactive.
- if (!mSessionActive && mContext.getSystemService(PowerManager.class).isInteractive()) {
- FalsingLog.wtf("isFalseTouch", new StringBuilder()
+ if (!mSessionActive && mContext.getSystemService(PowerManager.class).isInteractive()
+ && mPendingWtf == null) {
+ int enabled = isEnabled() ? 1 : 0;
+ int screenOn = mScreenOn ? 1 : 0;
+ String state = StatusBarState.toShortString(mState);
+ Throwable here = new Throwable("here");
+ FalsingLog.wLogcat("isFalseTouch", new StringBuilder()
.append("Session is not active, yet there's a query for a false touch.")
- .append(" enabled=").append(isEnabled() ? 1 : 0)
- .append(" mScreenOn=").append(mScreenOn ? 1 : 0)
- .append(" mState=").append(StatusBarState.toShortString(mState))
+ .append(" enabled=").append(enabled)
+ .append(" mScreenOn=").append(screenOn)
+ .append(" mState=").append(state)
+ .append(". Escalating to WTF if screen does not turn on soon.")
.toString());
+
+ // Unfortunately we're also getting false positives for touches that happen right
+ // after the screen turns on, but before that notification has made it to us.
+ // Unfortunately there's no good way to catch that, except to wait and see if we get
+ // the screen on notification soon.
+ mPendingWtf = () -> FalsingLog.wtf("isFalseTouch", new StringBuilder()
+ .append("Session did not become active after query for a false touch.")
+ .append(" enabled=").append(enabled)
+ .append('/').append(isEnabled() ? 1 : 0)
+ .append(" mScreenOn=").append(screenOn)
+ .append('/').append(mScreenOn ? 1 : 0)
+ .append(" mState=").append(state)
+ .append('/').append(StatusBarState.toShortString(mState))
+ .append(". Look for warnings ~1000ms earlier to see root cause.")
+ .toString(), here);
+ mHandler.postDelayed(mPendingWtf, 1000);
}
}
if (mAccessibilityManager.isTouchExplorationEnabled()) {
@@ -189,6 +213,13 @@ public class FalsingManager implements SensorEventListener {
return mHumanInteractionClassifier.isFalseTouch();
}
+ private void clearPendingWtf() {
+ if (mPendingWtf != null) {
+ mHandler.removeCallbacks(mPendingWtf);
+ mPendingWtf = null;
+ }
+ }
+
@Override
public synchronized void onSensorChanged(SensorEvent event) {
mDataCollector.onSensorChanged(event);
@@ -224,6 +255,7 @@ public class FalsingManager implements SensorEventListener {
FalsingLog.i("onScreenTurningOn", new StringBuilder()
.append("from=").append(mScreenOn ? 1 : 0)
.toString());
+ clearPendingWtf();
}
mScreenOn = true;
if (sessionEntrypoint()) {