From f1074c508e70b3489dc85c036f7ed49d3196ba47 Mon Sep 17 00:00:00 2001
From: Satoshi Kataoka <satok@google.com>
Date: Wed, 23 Jan 2013 15:13:52 +0900
Subject: [PATCH] Throw exception when invalid time stamps are detected in
 debug mode

Change-Id: I360b5bd09869bc85ab3bccb8a43a20fed0035d9b
---
 .../inputmethod/latin/InputPointers.java      | 22 +++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/java/src/com/android/inputmethod/latin/InputPointers.java b/java/src/com/android/inputmethod/latin/InputPointers.java
index 4d6c4f3560..81c8330009 100644
--- a/java/src/com/android/inputmethod/latin/InputPointers.java
+++ b/java/src/com/android/inputmethod/latin/InputPointers.java
@@ -18,8 +18,11 @@ package com.android.inputmethod.latin;
 
 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 final class InputPointers {
     }
 
     public int[] getTimes() {
+        if (LatinImeLogger.sDBG) {
+            if (!isValidTimeStamps()) {
+                throw new RuntimeException("Time stamps are invalid.");
+            }
+        }
         return mTimes.getPrimitiveArray();
     }
 
@@ -134,4 +142,18 @@ public final class InputPointers {
         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;
+    }
 }
-- 
GitLab