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: