Add screen field to DebuggerReady event (#1552)
* Add screen field to DebuggerReady event
* Updated changelog
* Report DebuggerReady event for embedded DevTools
diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md
index 6cfd966..5cb792c 100644
--- a/dwds/CHANGELOG.md
+++ b/dwds/CHANGELOG.md
@@ -14,6 +14,8 @@
 - Update `vm_service` version to `^8.2.0`.
 - Migrate .packages to package_config.json.
 - Update error message on expression evaluation using unloaded libraries.
+- Add `screen` field to the `DebuggerReady` event.
+- Report `DebuggerReady` events for DevTools embedded into Chrome Devtools.
 
 **Breaking changes:**
 - `Dwds.start` and `ExpressionCompilerService` now take
diff --git a/dwds/lib/src/dwds_vm_client.dart b/dwds/lib/src/dwds_vm_client.dart
index 52d6e0b..462e72d 100644
--- a/dwds/lib/src/dwds_vm_client.dart
+++ b/dwds/lib/src/dwds_vm_client.dart
@@ -151,21 +151,22 @@
     case 'DevtoolsEvent':
       {
         _logger.finest('Received DevTools event: $event');
-        var action = payload == null ? null : payload['action'];
+        var action = payload == null ? null : payload['action'] as String;
+        var screen = payload == null ? null : payload['screen'] as String;
         if (action == 'pageReady') {
           if (dwdsStats.isFirstDebuggerReady) {
             if (dwdsStats.devToolsStart != null) {
               var time = DateTime.now()
                   .difference(dwdsStats.devToolsStart)
                   .inMilliseconds;
-              emitEvent(DwdsEvent.devToolsLoad(time));
+              emitEvent(DwdsEvent.devToolsLoad(time, screen));
               _logger.fine('DevTools load time: $time ms');
             }
             if (dwdsStats.debuggerStart != null) {
               var time = DateTime.now()
                   .difference(dwdsStats.debuggerStart)
                   .inMilliseconds;
-              emitEvent(DwdsEvent.debuggerReady(time));
+              emitEvent(DwdsEvent.debuggerReady(time, screen));
               _logger.fine('Debugger ready time: $time ms');
             }
           } else {
diff --git a/dwds/lib/src/events.dart b/dwds/lib/src/events.dart
index a445c02..c1178cb 100644
--- a/dwds/lib/src/events.dart
+++ b/dwds/lib/src/events.dart
@@ -94,14 +94,16 @@
 
   DwdsEvent.fullReload() : this(DwdsEventKind.fullReload, {});
 
-  DwdsEvent.debuggerReady(int elapsedMilliseconds)
+  DwdsEvent.debuggerReady(int elapsedMilliseconds, String screen)
       : this(DwdsEventKind.debuggerReady, {
           'elapsedMilliseconds': elapsedMilliseconds,
+          'screen': screen,
         });
 
-  DwdsEvent.devToolsLoad(int elapsedMilliseconds)
+  DwdsEvent.devToolsLoad(int elapsedMilliseconds, String screen)
       : this(DwdsEventKind.devToolsLoad, {
           'elapsedMilliseconds': elapsedMilliseconds,
+          'screen': screen,
         });
 
   DwdsEvent.httpRequestException(String server, String exception)
diff --git a/dwds/lib/src/handlers/dev_handler.dart b/dwds/lib/src/handlers/dev_handler.dart
index acc1f48..b8d375a 100644
--- a/dwds/lib/src/handlers/dev_handler.dart
+++ b/dwds/lib/src/handlers/dev_handler.dart
@@ -530,6 +530,9 @@
       final appServices = _servicesByAppId[appId];
       final encodedUri = await appServices.debugService.encodedUri;
 
+      appServices.dwdsStats.updateLoadTime(
+          debuggerStart: debuggerStart, devToolsStart: DateTime.now());
+
       // If we only want the URI, this means we are embedding Dart DevTools in
       // Chrome DevTools. Therefore return early.
       if (devToolsRequest.uriOnly != null && devToolsRequest.uriOnly) {
@@ -544,8 +547,6 @@
         encodedUri,
         ideQueryParam: 'DebugExtension',
       );
-      appServices.dwdsStats.updateLoadTime(
-          debuggerStart: debuggerStart, devToolsStart: DateTime.now());
       await _launchDevTools(extensionDebugger, devToolsUri);
     });
   }
diff --git a/dwds/test/events_test.dart b/dwds/test/events_test.dart
index 289c6cf..aaec446 100644
--- a/dwds/test/events_test.dart
+++ b/dwds/test/events_test.dart
@@ -136,9 +136,11 @@
         [
           matchesEvent(DwdsEventKind.debuggerReady, {
             'elapsedMilliseconds': isNotNull,
+            'screen': equals('debugger'),
           }),
           matchesEvent(DwdsEventKind.devToolsLoad, {
             'elapsedMilliseconds': isNotNull,
+            'screen': equals('debugger'),
           }),
         ],
         () => keyboard.sendChord([Keyboard.alt, 'd']),