Unverified Commit 7596a3da authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

Add logging when first frame is not rendering (#99566)

parent f1d88586
...@@ -11,6 +11,7 @@ import 'base/error_handling_io.dart'; ...@@ -11,6 +11,7 @@ import 'base/error_handling_io.dart';
import 'base/file_system.dart'; import 'base/file_system.dart';
import 'base/logger.dart'; import 'base/logger.dart';
import 'base/utils.dart'; import 'base/utils.dart';
import 'convert.dart';
import 'vmservice.dart'; import 'vmservice.dart';
// Names of some of the Timeline events we care about. // Names of some of the Timeline events we care about.
...@@ -72,11 +73,25 @@ class Tracing { ...@@ -72,11 +73,25 @@ class Tracing {
} }
} }
if (!done) { if (!done) {
final Timer timer = Timer(const Duration(seconds: 10), () { final Timer timer = Timer(const Duration(seconds: 10), () async {
_logger.printStatus('First frame is taking longer than expected...'); _logger.printStatus('First frame is taking longer than expected...');
_logger.printTrace('Views:');
for (final FlutterView view in views) { for (final FlutterView view in views) {
_logger.printTrace('id: ${view.id} isolate: ${view.uiIsolate?.id}'); final String? isolateId = view.uiIsolate?.id;
_logger.printTrace('View ID: ${view.id}');
if (isolateId == null) {
_logger.printTrace('No isolate ID associated with the view.');
continue;
}
final vm_service.Isolate? isolate = await vmService.getIsolateOrNull(isolateId);
if (isolate == null) {
_logger.printTrace('Isolate $isolateId not found.');
continue;
}
_logger.printTrace('Isolate $isolateId state:');
final Map<String, Object?> isolateState = isolate.toJson();
// "libraries" has very long output and is likely unrelated to any first-frame issues.
isolateState.remove('libraries');
_logger.printTrace(jsonEncode(isolateState));
} }
_logger.printTrace('Received VM events:'); _logger.printTrace('Received VM events:');
_logger.printTrace(bufferedEvents.toString()); _logger.printTrace(bufferedEvents.toString());
......
...@@ -232,7 +232,8 @@ void main() { ...@@ -232,7 +232,8 @@ void main() {
return completer.future; return completer.future;
}); });
expect(logger.statusText, contains('First frame is taking longer than expected')); expect(logger.statusText, contains('First frame is taking longer than expected'));
expect(logger.traceText, contains('id: 1 isolate: null')); expect(logger.traceText, contains('View ID: 1'));
expect(logger.traceText, contains('No isolate ID associated with the view'));
expect(logger.traceText, contains('Flutter.Error: [ExtensionData {test: data, renderedErrorText: error text}]')); expect(logger.traceText, contains('Flutter.Error: [ExtensionData {test: data, renderedErrorText: error text}]'));
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment