flutter / devtools

Performance tools for Flutter
https://flutter.dev/docs/development/tools/devtools/
BSD 3-Clause "New" or "Revised" License
1.58k stars 326 forks source link

Embedded Perfetto trace viewer reports "failure parsing JSON" error for large traces #6674

Open derekxu16 opened 11 months ago

derekxu16 commented 11 months ago

It looks like there's something going wrong in the communcation between DevTools and the embedded trace viewer when sending large traces. This was originally reported in the Dart SDK repo as https://github.com/dart-lang/sdk/issues/53967, but I think it belongs here instead.

Reproduction steps:

  1. Add the following code after https://github.com/flutter/devtools/blob/master/packages/devtools_app/lib/src/screens/performance/panes/timeline_events/perfetto/_perfetto_web.dart#L165.
final blob = html.Blob([encodedJson]);
final blobURL = html.Url.createObjectUrl(blob);

final link = html.document.createElement('a') as html.AnchorElement;
link.href = blobURL;
link.download = 'dart-trace.json';
link.click();
import 'dart:isolate';

main() {
  for (int i = 0; i < 20; i++) {
    Isolate.spawn((msg) async { 
      print('${Isolate.current.debugName} started $msg');
      for (int i = 0; i < 1000; i++) {
        for (int j = 0; j < 100000; j++) {
          if (j % 100000 == 0) {
            print('${Isolate.current.debugName} $i $j');
            //await Future.delayed(Duration(seconds: 0));
          }
        }
      }
      print('${Isolate.current.debugName} done');
    }, 'Hi', debugName: 'worker $i');
  }
  for (int i = 0; i < 10; i++) {
    for (int j = 0; j < 100000; j++) {
      if (j % 100000 == 0) {
        print('main $i $j');
      }
    }
  }
}

Run the above program with dart --observe --timeline-streams=all --timeline-recorder=endless example.dart.

  1. Open the performance page in DevTools, and observe that it reports a "failure parsing JSON" error.
  2. Observe that the saved dart-trace.json file can be succesfully loaded by ui.perfetto.dev.
a-siva commented 11 months ago

The original issue filed had this comment about the delay in loading up the timeline page 6-16 seconds: --serve-observatory (observatory displaying the timeline view) 34 seconds-end: --no-serve-observatory (devtools displaying the timeline view) It is possible this delay is because of this error being encountered, once the issue is fixed we should re measure the time to make sure we don't see this difference.