Skip to content

Commit e71c0e3

Browse files
author
Anna Gringauze
authored
Fix crash on processing devtools event (#1875)
* Fix chrash on processing devtools event * Address CR comments
1 parent 49f97b8 commit e71c0e3

File tree

3 files changed

+28
-20
lines changed

3 files changed

+28
-20
lines changed

dwds/CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
- Pre-warm expression compiler cache to speed up Flutter Inspector loading.
1515
- Remove `ChromeProxyService.setExceptionPauseMode()`.
1616
- Display full error on failure to start DDS.
17+
- Fix crash on processing DevTools event when starting DevTools from observatory
18+
uri.
1719

1820
## 16.0.1
1921

dwds/lib/src/dwds_vm_client.dart

Lines changed: 22 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -153,29 +153,35 @@ void _processSendEvent(Map<String, dynamic> event,
153153
final action = payload?['action'] as String?;
154154
final screen = payload?['screen'] as String?;
155155
if (screen != null && action == 'pageReady') {
156-
if (dwdsStats.isFirstDebuggerReady) {
157-
final debuggerReadyTime = DateTime.now()
158-
.difference(dwdsStats.devToolsStart)
159-
.inMilliseconds;
160-
emitEvent(DwdsEvent.devToolsLoad(debuggerReadyTime, screen));
161-
_logger.fine('DevTools load time: $debuggerReadyTime ms');
162-
final debuggerStartTime = DateTime.now()
163-
.difference(dwdsStats.debuggerStart)
164-
.inMilliseconds;
165-
emitEvent(DwdsEvent.debuggerReady(debuggerStartTime, screen));
166-
_logger.fine('Debugger ready time: $debuggerStartTime ms');
167-
} else {
168-
_logger
169-
.finest('Debugger and DevTools startup times already recorded.'
170-
' Ignoring $event.');
171-
}
156+
_recordDwdsStats(dwdsStats, screen);
172157
} else {
173158
_logger.finest('Ignoring unknown event: $event');
174159
}
175160
}
176161
}
177162
}
178163

164+
void _recordDwdsStats(DwdsStats dwdsStats, String screen) {
165+
if (dwdsStats.isFirstDebuggerReady) {
166+
final devToolsStart = dwdsStats.devToolsStart;
167+
final debuggerStart = dwdsStats.debuggerStart;
168+
if (devToolsStart != null) {
169+
final devToolLoadTime =
170+
DateTime.now().difference(devToolsStart).inMilliseconds;
171+
emitEvent(DwdsEvent.devToolsLoad(devToolLoadTime, screen));
172+
_logger.fine('DevTools load time: $devToolLoadTime ms');
173+
}
174+
if (debuggerStart != null) {
175+
final debuggerReadyTime =
176+
DateTime.now().difference(debuggerStart).inMilliseconds;
177+
emitEvent(DwdsEvent.debuggerReady(debuggerReadyTime, screen));
178+
_logger.fine('Debugger ready time: $debuggerReadyTime ms');
179+
}
180+
} else {
181+
_logger.finest('Debugger and DevTools stats are already recorded.');
182+
}
183+
}
184+
179185
Future<Map<String, dynamic>> _hotRestart(
180186
ChromeProxyService chromeProxyService, VmService client) async {
181187
_logger.info('Attempting a hot restart');

dwds/lib/src/events.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,12 @@ import 'package:vm_service/vm_service.dart';
88

99
class DwdsStats {
1010
/// The time when the user starts the debugger.
11-
late DateTime _debuggerStart;
12-
DateTime get debuggerStart => _debuggerStart;
11+
DateTime? _debuggerStart;
12+
DateTime? get debuggerStart => _debuggerStart;
1313

1414
/// The time when dwds launches DevTools.
15-
late DateTime _devToolsStart;
16-
DateTime get devToolsStart => _devToolsStart;
15+
DateTime? _devToolsStart;
16+
DateTime? get devToolsStart => _devToolsStart;
1717

1818
/// Records and returns weither the debugger is ready.
1919
bool _isFirstDebuggerReady = true;

0 commit comments

Comments
 (0)