Send reload / restart time to frame to analytics (#5335)

diff --git a/packages/flutter_tools/lib/src/hot.dart b/packages/flutter_tools/lib/src/hot.dart
index 932aca6..2b1b2d9 100644
--- a/packages/flutter_tools/lib/src/hot.dart
+++ b/packages/flutter_tools/lib/src/hot.dart
@@ -473,6 +473,7 @@
     printStatus('Restart time: '
                 '${getElapsedAsMilliseconds(firstFrameTimer.elapsed)}');
     flutterUsage.sendEvent('hot', 'restart');
+    flutterUsage.sendTiming('hot', 'restart', firstFrameTimer.elapsed);
   }
 
   /// Returns [true] if the reload was successful.
@@ -537,6 +538,7 @@
     await firstFrameTimer.firstFrame();
     printStatus('Hot reload time: '
                 '${getElapsedAsMilliseconds(firstFrameTimer.elapsed)}');
+    flutterUsage.sendTiming('hot', 'reload', firstFrameTimer.elapsed);
     return true;
   }
 
diff --git a/packages/flutter_tools/lib/src/usage.dart b/packages/flutter_tools/lib/src/usage.dart
index 1e546c5..cca4a7f 100644
--- a/packages/flutter_tools/lib/src/usage.dart
+++ b/packages/flutter_tools/lib/src/usage.dart
@@ -70,6 +70,10 @@
       _analytics.sendEvent(category, parameter);
   }
 
+  void sendTiming(String category, String variableName, Duration duration) {
+    _analytics.sendTiming(variableName, duration.inMilliseconds, category: category);
+  }
+
   UsageTimer startTimer(String event) {
     if (suppressAnalytics)
       return new _MockUsageTimer();
diff --git a/packages/flutter_tools/test/src/context.dart b/packages/flutter_tools/test/src/context.dart
index 2f40dbb..c75d837 100644
--- a/packages/flutter_tools/test/src/context.dart
+++ b/packages/flutter_tools/test/src/context.dart
@@ -139,6 +139,9 @@
   void sendEvent(String category, String parameter) { }
 
   @override
+  void sendTiming(String category, String variableName, Duration duration) { }
+
+  @override
   UsageTimer startTimer(String event) => new _MockUsageTimer(event);
 
   @override