libevdev: move input event logging very close to read().

We want to be sure we aren't missing any input events, even if they
come in with odd timestamps.

BUG=chromium-os:33601
TEST=tested on device; dumped log looked correct

Change-Id: I9c6e99b7bed6580b84f50cfa80766a8eb08489d4
Reviewed-on: https://gerrit.chromium.org/gerrit/30637
Commit-Ready: Andrew de los Reyes <adlr@chromium.org>
Reviewed-by: Andrew de los Reyes <adlr@chromium.org>
Tested-by: Andrew de los Reyes <adlr@chromium.org>
diff --git a/src/libevdev.c b/src/libevdev.c
index 45914c9..19dfb5e 100644
--- a/src/libevdev.c
+++ b/src/libevdev.c
@@ -44,6 +44,7 @@
 
 int EvdevRead(EvdevPtr evdev) {
   struct input_event ev[NUM_EVENTS];
+  EventStatePtr evstate = evdev->evstate;
   int i;
   int len;
   bool sync_evdev_state = false;
@@ -53,6 +54,16 @@
     if (len <= 0)
       return errno;
 
+    /* Read as many whole struct input_event objects as we can into the
+       circular buffer */
+    if (evstate->debug_buf) {
+      for (i = 0; i < len / sizeof(*ev); i++) {
+        evstate->debug_buf[evstate->debug_buf_tail] = ev[i];
+        evstate->debug_buf_tail =
+            (evstate->debug_buf_tail + 1) % DEBUG_BUF_SIZE;
+      }
+    }
+
     /* kernel always delivers complete events, so len must be sizeof *ev */
     if (len % sizeof(*ev))
       return errno;
diff --git a/src/libevdev_event.c b/src/libevdev_event.c
index 464f72d..5029012 100644
--- a/src/libevdev_event.c
+++ b/src/libevdev_event.c
@@ -422,14 +422,7 @@
 bool
 Event_Process(EvdevPtr device, struct input_event* ev)
 {
-    EventStatePtr evstate = device->evstate;
-
     Event_Print(device, ev);
-    if (evstate->debug_buf) {
-        evstate->debug_buf[evstate->debug_buf_tail] = *ev;
-        evstate->debug_buf_tail =
-            (evstate->debug_buf_tail + 1) % DEBUG_BUF_SIZE;
-    }
 
     switch (ev->type) {
     case EV_SYN: