[PointerEventsListener] Handle pointer events immediately.

Before this change, any pointer events coming in would schedule a frame to be drawn at next vsync.  This causes session and story shells to repaint even if nothing was changing on their end.

After this change, pointer events are processed immediately and no frames are scheduled.

Test: Ran manually and watched traces.

Change-Id: I3fa4d0a3076c5e71e47f887fe95e6bf5b0b0a1e9
diff --git a/public/dart/widgets/lib/src/utils/pointer_events_listener.dart b/public/dart/widgets/lib/src/utils/pointer_events_listener.dart
index e281d55..9370ce9 100644
--- a/public/dart/widgets/lib/src/utils/pointer_events_listener.dart
+++ b/public/dart/widgets/lib/src/utils/pointer_events_listener.dart
@@ -93,33 +93,12 @@
       return;
     }
 
-    _queuedEvents.add(event);
-
-    if (_frameScheduled) {
-      return;
+    Timeline.startSync('PointerEventsListener.onPointerEvent');
+    final packet = _getPacket(event);
+    if (packet != null) {
+      _originalCallback(ui.PointerDataPacket(data: [packet]));
     }
-
-    _frameScheduled = true;
-    SchedulerBinding.instance.scheduleFrameCallback((_) {
-      if (_originalCallback == null) {
-        return;
-      }
-      _frameScheduled = false;
-      Timeline.startSync('PointerEventsListener.onPointerEvent');
-      List<ui.PointerData> packets = [];
-      for (PointerEvent event in _queuedEvents) {
-        final packet = _getPacket(event);
-        if (packet != null) {
-          packets.add(packet);
-        }
-      }
-      if (packets.isNotEmpty) {
-        _originalCallback(new ui.PointerDataPacket(data: packets));
-      }
-      _queuedEvents.clear();
-      Timeline.finishSync();
-    });
-    SchedulerBinding.instance.scheduleFrame();
+    Timeline.finishSync();
   }
 
   ui.PointerChange _changeFromPointerEvent(PointerEvent event) {
diff --git a/public/dart/widgets/lib/src/utils/pointer_events_listener_deprecated.dart b/public/dart/widgets/lib/src/utils/pointer_events_listener_deprecated.dart
index 86c29c6..ab73c9e 100644
--- a/public/dart/widgets/lib/src/utils/pointer_events_listener_deprecated.dart
+++ b/public/dart/widgets/lib/src/utils/pointer_events_listener_deprecated.dart
@@ -9,8 +9,6 @@
 import 'package:fidl_fuchsia_ui_input/fidl.dart';
 import 'package:fidl_fuchsia_ui_policy/fidl.dart';
 
-import 'package:flutter/scheduler.dart';
-
 /// Listens for pointer events and injects them into Flutter input pipeline.
 class PointerEventsListener implements PointerCaptureListenerHack {
   // Holds the fidl binding to receive pointer events.
@@ -30,9 +28,6 @@
   // the start of the program.
   ui.PointerDataPacketCallback _originalCallback;
 
-  final _queuedEvents = <PointerEvent>[];
-  bool _frameScheduled = false;
-
   /// Starts listening to pointer events. Also overrides the original
   /// [ui.window.onPointerDataPacket] callback to a NOP since we
   /// inject the pointer events received from the [Presentation] service.
@@ -93,33 +88,12 @@
       return;
     }
 
-    _queuedEvents.add(event);
-
-    if (_frameScheduled) {
-      return;
+    Timeline.startSync('PointerEventsListener.onPointerEvent');
+    final packet = _getPacket(event);
+    if (packet != null) {
+      _originalCallback(new ui.PointerDataPacket(data: [packet]));
     }
-
-    _frameScheduled = true;
-    SchedulerBinding.instance.scheduleFrameCallback((_) {
-      if (_originalCallback == null) {
-        return;
-      }
-      _frameScheduled = false;
-      Timeline.startSync('PointerEventsListener.onPointerEvent');
-      List<ui.PointerData> packets = [];
-      for (PointerEvent event in _queuedEvents) {
-        final packet = _getPacket(event);
-        if (packet != null) {
-          packets.add(packet);
-        }
-      }
-      if (packets.isNotEmpty) {
-        _originalCallback(new ui.PointerDataPacket(data: packets));
-      }
-      _queuedEvents.clear();
-      Timeline.finishSync();
-    });
-    SchedulerBinding.instance.scheduleFrame();
+    Timeline.finishSync();
   }
 
   ui.PointerChange _changeFromPointerEvent(PointerEvent event) {