diff --git a/packages/flutter_tools/test/devfs_test.dart b/packages/flutter_tools/test/devfs_test.dart
index 3adca19..5a96c7d 100644
--- a/packages/flutter_tools/test/devfs_test.dart
+++ b/packages/flutter_tools/test/devfs_test.dart
@@ -119,7 +119,7 @@
       devFSOperations.expectMessages(<String>['create test']);
       expect(devFS.assetPathsToEvict, isEmpty);
 
-      int bytes = await devFS.update(
+      UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -130,7 +130,7 @@
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
 
-      bytes = await devFS.update(
+      report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -141,7 +141,8 @@
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
 
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
@@ -150,7 +151,7 @@
       final File file = fs.file(fs.path.join(basePath, filePath2));
       await file.parent.create(recursive: true);
       file.writeAsBytesSync(<int>[1, 2, 3, 4, 5, 6, 7]);
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -160,13 +161,14 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
 
     testUsingContext('modify existing file on local file system', () async {
-      int bytes = await devFS.update(
+      UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -176,12 +178,13 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
 
       final File file = fs.file(fs.path.join(basePath, filePath));
       // Set the last modified time to 5 seconds in the past.
       updateFileModificationTime(file.path, DateTime.now(), -5);
-      bytes = await devFS.update(
+      report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -191,10 +194,11 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
 
       await file.writeAsBytes(<int>[1, 2, 3, 4, 5, 6]);
-      bytes = await devFS.update(
+      report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -204,11 +208,12 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
 
       // Set the last modified time to 5 seconds in the past.
       updateFileModificationTime(file.path, DateTime.now(), -5);
-      bytes = await devFS.update(
+      report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -218,10 +223,11 @@
         'writeFile test lib/foo.txt.dill build/app.dill.track.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
 
       await file.writeAsBytes(<int>[1, 2, 3, 4, 5, 6]);
-      bytes = await devFS.update(
+      report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -231,7 +237,8 @@
         'writeFile test lib/foo.txt.dill build/app.dill.track.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
 
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
@@ -240,7 +247,7 @@
     testUsingContext('delete a file from the local file system', () async {
       final File file = fs.file(fs.path.join(basePath, filePath));
       await file.delete();
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -251,14 +258,15 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
 
     testUsingContext('add new package', () async {
       await _createPackage(fs, 'newpkg', 'anotherfile.txt');
-      int bytes = await devFS.update(
+      UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -268,9 +276,10 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
 
-      bytes = await devFS.update(
+      report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -280,7 +289,8 @@
         'writeFile test lib/foo.txt.dill build/app.dill.track.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
 
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
@@ -302,7 +312,7 @@
             .map<String>((File file) => canonicalizePath(file.path))
             .toList());
       }
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         fileFilter: fileFilter,
         generator: residentCompiler,
@@ -313,14 +323,15 @@
         'writeFile test lib/foo.txt.dill build/app.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
 
     testUsingContext('add an asset bundle', () async {
       assetBundle.entries['a.txt'] = DevFSStringContent('abc');
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         bundle: assetBundle,
         bundleDirty: true,
@@ -334,14 +345,14 @@
       ]);
       expect(devFS.assetPathsToEvict, unorderedMatches(<String>['a.txt']));
       devFS.assetPathsToEvict.clear();
-      expect(bytes, 25);
+      expect(report.syncedBytes, 25);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
 
     testUsingContext('add a file to the asset bundle - bundleDirty', () async {
       assetBundle.entries['b.txt'] = DevFSStringContent('abcd');
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         bundle: assetBundle,
         bundleDirty: true,
@@ -358,14 +369,14 @@
       expect(devFS.assetPathsToEvict, unorderedMatches(<String>[
         'a.txt', 'b.txt']));
       devFS.assetPathsToEvict.clear();
-      expect(bytes, 29);
+      expect(report.syncedBytes, 29);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
 
     testUsingContext('add a file to the asset bundle', () async {
       assetBundle.entries['c.txt'] = DevFSStringContent('12');
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         bundle: assetBundle,
         generator: residentCompiler,
@@ -379,14 +390,14 @@
       expect(devFS.assetPathsToEvict, unorderedMatches(<String>[
         'c.txt']));
       devFS.assetPathsToEvict.clear();
-      expect(bytes, 24);
+      expect(report.syncedBytes, 24);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
 
     testUsingContext('delete a file from the asset bundle', () async {
       assetBundle.entries.remove('c.txt');
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         bundle: assetBundle,
         generator: residentCompiler,
@@ -399,14 +410,15 @@
       ]);
       expect(devFS.assetPathsToEvict, unorderedMatches(<String>['c.txt']));
       devFS.assetPathsToEvict.clear();
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
 
     testUsingContext('delete all files from the asset bundle', () async {
       assetBundle.entries.clear();
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         bundle: assetBundle,
         bundleDirty: true,
@@ -423,7 +435,8 @@
         'a.txt', 'b.txt'
       ]));
       devFS.assetPathsToEvict.clear();
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
@@ -466,7 +479,7 @@
       vmService.expectMessages(<String>['create test']);
       expect(devFS.assetPathsToEvict, isEmpty);
 
-      final int bytes = await devFS.update(
+      final UpdateFSReport report = await devFS.update(
         mainPath: 'lib/foo.txt',
         generator: residentCompiler,
         pathToReload: 'lib/foo.txt.dill',
@@ -476,7 +489,8 @@
         'writeFile test lib/foo.txt.dill',
       ]);
       expect(devFS.assetPathsToEvict, isEmpty);
-      expect(bytes, 22);
+      expect(report.syncedBytes, 22);
+      expect(report.success, true);
     }, overrides: <Type, Generator>{
       FileSystem: () => fs,
     });
