diff --git a/dev/automated_tests/flutter_test/exception_handling_expectation.txt b/dev/automated_tests/flutter_test/exception_handling_expectation.txt
index 346aa98..4c0fb6e 100644
--- a/dev/automated_tests/flutter_test/exception_handling_expectation.txt
+++ b/dev/automated_tests/flutter_test/exception_handling_expectation.txt
@@ -43,10 +43,7 @@
 
 When the exception was thrown, this was the stack:
 #[0-9]+ +main.<anonymous closure> \(.+[/\\]dev[/\\]automated_tests[/\\]flutter_test[/\\]exception_handling_test\.dart:16:9\)
-#[0-9]+ +.+ \(package:flutter_test[/\\]src[/\\]binding.dart:[0-9]+:[0-9]+\)
-#[0-9]+ +.+ \(package:flutter_test[/\\]src[/\\]binding.dart:[0-9]+:[0-9]+\)
-#[0-9]+ +.+ \(package:flutter_test[/\\]src[/\\]binding.dart:[0-9]+:[0-9]+\)
-#[0-9]+ +.+ \(package:flutter_test[/\\]src[/\\]binding.dart:[0-9]+:[0-9]+\)
+#[0-9]+ +main.<anonymous closure> \(.+[/\\]dev[/\\]automated_tests[/\\]flutter_test[/\\]exception_handling_test\.dart:15:77\)
 #[0-9]+ +.+ \(package:flutter_test[/\\]src[/\\]widget_tester\.dart:[0-9]+:[0-9]+\)
 <<skip until matching line>>
 ^\(elided [0-9]+ .+\)$
diff --git a/dev/automated_tests/flutter_test/test_async_utils_guarded_test.dart b/dev/automated_tests/flutter_test/test_async_utils_guarded_test.dart
index d709a3f..f04a139 100644
--- a/dev/automated_tests/flutter_test/test_async_utils_guarded_test.dart
+++ b/dev/automated_tests/flutter_test/test_async_utils_guarded_test.dart
@@ -14,10 +14,7 @@
 
 Future<Null> guardedHelper(WidgetTester tester) {
   return TestAsyncUtils.guard(() async {
-    await tester.pumpWidget(const Directionality(
-      textDirection: TextDirection.ltr,
-      child: const Text('Hello'),
-    ));
+    await tester.pumpWidget(const Text('Hello'));
   });
 }
 
diff --git a/packages/flutter/test/engine/dart_test.dart b/packages/flutter/test/engine/dart_test.dart
deleted file mode 100644
index 7efe12f..0000000
--- a/packages/flutter/test/engine/dart_test.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright 2018 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-import 'dart:async';
-
-import 'package:test/test.dart';
-
-/// Verifies Dart semantics governed by flags set by Flutter tooling.
-void main() {
-  group('Async', () {
-    String greeting = 'hello';
-    Future<void> changeGreeting() async {
-      greeting += ' 1';
-      await new Future<void>.value(null);
-      greeting += ' 2';
-    }
-    test('execution of async method starts synchronously', () async {
-      expect(greeting, 'hello');
-      final Future<void> future = changeGreeting();
-      expect(greeting, 'hello 1');
-      await future;
-      expect(greeting, 'hello 1 2');
-    });
-  });
-}
diff --git a/packages/flutter_test/lib/src/binding.dart b/packages/flutter_test/lib/src/binding.dart
index d573d82..9630449 100644
--- a/packages/flutter_test/lib/src/binding.dart
+++ b/packages/flutter_test/lib/src/binding.dart
@@ -490,12 +490,6 @@
   }
 
   Future<Null> _runTestBody(Future<Null> testBody(), VoidCallback invariantTester) async {
-    // Delay this function by a microtask.
-    // Otherwise it will open a scope immediately, which is then open when
-    // the `asyncBarrier` is invoked. The `asyncBarrier` is immediately
-    // following the call to `testZone.runBinary(_runTestBody)`, so delaying
-    // by one microtask is enough to ensure that the timing is correct.
-    await new Future<Null>.microtask(() {});
     assert(inTest);
 
     runApp(new Container(key: new UniqueKey(), child: _preTestMessage)); // Reset the tree to a known state.
@@ -773,12 +767,6 @@
     });
 
     return new Future<Null>.microtask(() async {
-      // Run all queued microtasks.
-      await new Future<Null>.microtask(() {});
-      // When the test had an exception, the test-framework already
-      // ran the teardown functions, removing the _fakeAsync function.
-      if (_fakeAsync == null)
-        return null;
       // Resolve interplay between fake async and real async calls.
       _fakeAsync.flushMicrotasks();
       while (_pendingAsyncTasks != null) {
@@ -995,13 +983,6 @@
 
   @override
   void handleBeginFrame(Duration rawTimeStamp) {
-    // Don't run this function when `handleBeginFrame` was invoked
-    // immediately before without a call of `handleDrawFrame` in between.
-    // TODO(floitsch): Remove this line when the spurious calls from the
-    //                 framework don't happen anymore. See
-    //                 https://github.com/flutter/flutter/issues/17963
-    if (_doDrawThisFrame != null)
-      return;
     assert(_doDrawThisFrame == null);
     if (_expectingFrame ||
         (framePolicy == LiveTestWidgetsFlutterBindingFramePolicy.fullyLive) ||
@@ -1016,13 +997,6 @@
 
   @override
   void handleDrawFrame() {
-    // Don't run this function when `handleBeginFrame` wasn't invoked
-    // immediately before.
-    // TODO(floitsch): Remove this line when the spurious calls from the
-    //                 framework don't happen anymore. See
-    //                 https://github.com/flutter/flutter/issues/17963
-    if (_doDrawThisFrame == null)
-      return;
     assert(_doDrawThisFrame != null);
     if (_doDrawThisFrame)
       super.handleDrawFrame();
diff --git a/packages/flutter_tools/lib/src/compile.dart b/packages/flutter_tools/lib/src/compile.dart
index 8c204a8..dc065d6 100644
--- a/packages/flutter_tools/lib/src/compile.dart
+++ b/packages/flutter_tools/lib/src/compile.dart
@@ -120,7 +120,6 @@
       '--sdk-root',
       sdkRoot,
       '--strong',
-      '--sync-async',
       '--target=flutter',
     ];
     if (trackWidgetCreation)
@@ -253,7 +252,6 @@
       _sdkRoot,
       '--incremental',
       '--strong',
-      '--sync-async',
       '--target=flutter',
     ];
     if (outputPath != null) {
