Throw exception when invalid time stamps are detected in debug mode

Change-Id: I360b5bd09869bc85ab3bccb8a43a20fed0035d9b
diff --git a/java/src/com/android/inputmethod/latin/InputPointers.java b/java/src/com/android/inputmethod/latin/InputPointers.java
index 4d6c4f3..81c8330 100644
--- a/java/src/com/android/inputmethod/latin/InputPointers.java
+++ b/java/src/com/android/inputmethod/latin/InputPointers.java
@@ -18,8 +18,11 @@
 
 import com.android.inputmethod.annotations.UsedForTesting;
 
+import android.util.Log;
+
 // TODO: This class is not thread-safe.
 public final class InputPointers {
+    private static final String TAG = InputPointers.class.getSimpleName();
     private final int mDefaultCapacity;
     private final ResizableIntArray mXCoordinates;
     private final ResizableIntArray mYCoordinates;
@@ -126,6 +129,11 @@
     }
 
     public int[] getTimes() {
+        if (LatinImeLogger.sDBG) {
+            if (!isValidTimeStamps()) {
+                throw new RuntimeException("Time stamps are invalid.");
+            }
+        }
         return mTimes.getPrimitiveArray();
     }
 
@@ -134,4 +142,18 @@
         return "size=" + getPointerSize() + " id=" + mPointerIds + " time=" + mTimes
                 + " x=" + mXCoordinates + " y=" + mYCoordinates;
     }
+
+    private boolean isValidTimeStamps() {
+        final int[] times = mTimes.getPrimitiveArray();
+        for (int i = 1; i < getPointerSize(); ++i) {
+            if (times[i] < times[i - 1]) {
+                // dump
+                for (int j = 0; j < times.length; ++j) {
+                    Log.d(TAG, "--- (" + j + ") " + times[j]);
+                }
+                return false;
+            }
+        }
+        return true;
+    }
 }