diff --git a/dev/benchmarks/complex_layout/test_driver/scroll_perf_test.dart b/dev/benchmarks/complex_layout/test_driver/scroll_perf_test.dart index 81a59046f2..7c1d3b71b3 100644 --- a/dev/benchmarks/complex_layout/test_driver/scroll_perf_test.dart +++ b/dev/benchmarks/complex_layout/test_driver/scroll_perf_test.dart @@ -50,7 +50,6 @@ void main() { }); final TimelineSummary summary = TimelineSummary.summarize(timeline); - await summary.writeSummaryToFile(summaryName, pretty: true); await summary.writeTimelineToFile(summaryName, pretty: true); } diff --git a/dev/benchmarks/macrobenchmarks/test_driver/large_image_changer_test.dart b/dev/benchmarks/macrobenchmarks/test_driver/large_image_changer_test.dart index 4700f4feee..c19c384f4d 100644 --- a/dev/benchmarks/macrobenchmarks/test_driver/large_image_changer_test.dart +++ b/dev/benchmarks/macrobenchmarks/test_driver/large_image_changer_test.dart @@ -36,7 +36,6 @@ Future main() async { if (timeline != null) { final TimelineSummary summary = TimelineSummary.summarize(timeline); - await summary.writeSummaryToFile(fileName, pretty: true); await summary.writeTimelineToFile(fileName, pretty: true); } diff --git a/dev/benchmarks/macrobenchmarks/test_driver/util.dart b/dev/benchmarks/macrobenchmarks/test_driver/util.dart index adf819dc9c..3c8cbc2381 100644 --- a/dev/benchmarks/macrobenchmarks/test_driver/util.dart +++ b/dev/benchmarks/macrobenchmarks/test_driver/util.dart @@ -67,7 +67,6 @@ void macroPerfTest( expect(timeline, isNotNull); final TimelineSummary summary = TimelineSummary.summarize(timeline); - await summary.writeSummaryToFile(testName, pretty: true); await summary.writeTimelineToFile(testName, pretty: true); }, timeout: Timeout(timeout)); } diff --git a/dev/benchmarks/platform_views_layout/test_driver/scroll_perf_test.dart b/dev/benchmarks/platform_views_layout/test_driver/scroll_perf_test.dart index 28f4be0aff..e42ff78863 100644 --- a/dev/benchmarks/platform_views_layout/test_driver/scroll_perf_test.dart +++ b/dev/benchmarks/platform_views_layout/test_driver/scroll_perf_test.dart @@ -47,7 +47,6 @@ void main() { }); final TimelineSummary summary = TimelineSummary.summarize(timeline); - await summary.writeSummaryToFile(summaryName, pretty: true); await summary.writeTimelineToFile(summaryName, pretty: true); } diff --git a/dev/benchmarks/platform_views_layout_hybrid_composition/test_driver/scroll_perf_test.dart b/dev/benchmarks/platform_views_layout_hybrid_composition/test_driver/scroll_perf_test.dart index c38f1b2ba3..7626fc6d18 100644 --- a/dev/benchmarks/platform_views_layout_hybrid_composition/test_driver/scroll_perf_test.dart +++ b/dev/benchmarks/platform_views_layout_hybrid_composition/test_driver/scroll_perf_test.dart @@ -47,7 +47,6 @@ void main() { }); final TimelineSummary summary = TimelineSummary.summarize(timeline); - summary.writeSummaryToFile(summaryName, pretty: true); summary.writeTimelineToFile(summaryName, pretty: true); } diff --git a/dev/benchmarks/test_apps/stocks/test_driver/scroll_perf_test.dart b/dev/benchmarks/test_apps/stocks/test_driver/scroll_perf_test.dart index 9f367f8f07..3914fc72b5 100644 --- a/dev/benchmarks/test_apps/stocks/test_driver/scroll_perf_test.dart +++ b/dev/benchmarks/test_apps/stocks/test_driver/scroll_perf_test.dart @@ -40,7 +40,6 @@ void main() { }); final TimelineSummary summary = TimelineSummary.summarize(timeline); - await summary.writeSummaryToFile('stocks_scroll_perf', pretty: true); await summary.writeTimelineToFile('stocks_scroll_perf', pretty: true); }); }); diff --git a/dev/integration_tests/flutter_gallery/test_driver/scroll_perf_test.dart b/dev/integration_tests/flutter_gallery/test_driver/scroll_perf_test.dart index f009c17e38..196d146c74 100644 --- a/dev/integration_tests/flutter_gallery/test_driver/scroll_perf_test.dart +++ b/dev/integration_tests/flutter_gallery/test_driver/scroll_perf_test.dart @@ -44,7 +44,6 @@ void main() { }); final TimelineSummary summary = TimelineSummary.summarize(timeline); - await summary.writeSummaryToFile('home_scroll_perf', pretty: true); await summary.writeTimelineToFile('home_scroll_perf', pretty: true); }); }); diff --git a/dev/integration_tests/flutter_gallery/test_driver/transitions_perf_test.dart b/dev/integration_tests/flutter_gallery/test_driver/transitions_perf_test.dart index 7818f102ed..f029f2538e 100644 --- a/dev/integration_tests/flutter_gallery/test_driver/transitions_perf_test.dart +++ b/dev/integration_tests/flutter_gallery/test_driver/transitions_perf_test.dart @@ -207,7 +207,6 @@ void main([List args = const []]) { // that follows a 'Start Transition' event. The Gallery app adds a // 'Start Transition' event when a demo is launched (see GalleryItem). final TimelineSummary summary = TimelineSummary.summarize(timeline); - await summary.writeSummaryToFile('transitions', pretty: true); await summary.writeTimelineToFile('transitions', pretty: true); final String histogramPath = path.join(testOutputsDirectory, 'transition_durations.timeline.json'); await saveDurationsHistogram( diff --git a/packages/flutter_driver/lib/src/driver/timeline_summary.dart b/packages/flutter_driver/lib/src/driver/timeline_summary.dart index fe894f9a19..e781ce21e7 100644 --- a/packages/flutter_driver/lib/src/driver/timeline_summary.dart +++ b/packages/flutter_driver/lib/src/driver/timeline_summary.dart @@ -202,6 +202,10 @@ class TimelineSummary { /// Writes all of the recorded timeline data to a file. /// + /// By default, this will dump [summaryJson] to a companion file named + /// `$traceName.timeline_summary.json`. If you want to skip the summary, set + /// the `includeSummary` parameter to false. + /// /// See also: /// /// * [Timeline.fromJson], which explains detail about the timeline data. @@ -209,20 +213,37 @@ class TimelineSummary { String traceName, { String? destinationDirectory, bool pretty = false, + bool includeSummary = true, }) async { destinationDirectory ??= testOutputsDirectory; await fs.directory(destinationDirectory).create(recursive: true); final File file = fs.file(path.join(destinationDirectory, '$traceName.timeline.json')); await file.writeAsString(_encodeJson(_timeline.json, pretty)); + + if (includeSummary) { + await _writeSummaryToFile(traceName, destinationDirectory: destinationDirectory, pretty: pretty); + } } /// Writes [summaryJson] to a file. + @Deprecated( + 'Use TimelineSummary.writeTimelineToFile. ' + 'This feature was deprecated after v2.1.0-13.0.pre.' + ) Future writeSummaryToFile( String traceName, { String? destinationDirectory, bool pretty = false, }) async { destinationDirectory ??= testOutputsDirectory; + await _writeSummaryToFile(traceName, destinationDirectory: destinationDirectory, pretty: pretty); + } + + Future _writeSummaryToFile( + String traceName, { + required String destinationDirectory, + bool pretty = false, + }) async { await fs.directory(destinationDirectory).create(recursive: true); final File file = fs.file(path.join(destinationDirectory, '$traceName.timeline_summary.json')); await file.writeAsString(_encodeJson(summaryJson, pretty)); diff --git a/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart b/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart index 17c30fe687..8a1f53baeb 100644 --- a/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart +++ b/packages/flutter_driver/test/src/real_tests/timeline_summary_test.dart @@ -434,14 +434,36 @@ void main() { restoreFileSystem(); }); - test('writes timeline to JSON file', () async { + test('writes timeline to JSON file without summary', () async { await summarize(>[{'foo': 'bar'}]) - .writeTimelineToFile('test', destinationDirectory: tempDir.path); + .writeTimelineToFile('test', destinationDirectory: tempDir.path, includeSummary: false); final String written = await fs.file(path.join(tempDir.path, 'test.timeline.json')).readAsString(); expect(written, '{"traceEvents":[{"foo":"bar"}]}'); }); + test('writes timeline to JSON file with summary', () async { + await summarize(>[ + {'foo': 'bar'}, + begin(1000), end(19000), + frameBegin(1000), frameEnd(18000), + ]).writeTimelineToFile( + 'test', + destinationDirectory: tempDir.path, + includeSummary: true, + ); + final String written = + await fs.file(path.join(tempDir.path, 'test.timeline.json')).readAsString(); + expect( + written, + '{"traceEvents":[{"foo":"bar"},' + '{"name":"GPURasterizer::Draw","ph":"B","ts":1000},' + '{"name":"GPURasterizer::Draw","ph":"E","ts":19000},' + '{"name":"Frame","ph":"B","ts":1000},' + '{"name":"Frame","ph":"E","ts":18000}]}', + ); + }); + test('writes summary to JSON file', () async { await summarize(>[ begin(1000), end(19000), @@ -456,7 +478,7 @@ void main() { cpuUsage(5000, 20), cpuUsage(5010, 60), memoryUsage(6000, 20, 40), memoryUsage(6100, 30, 45), platformVsync(7000), vsyncCallback(7500), - ]).writeSummaryToFile('test', destinationDirectory: tempDir.path); + ]).writeTimelineToFile('test', destinationDirectory: tempDir.path); final String written = await fs.file(path.join(tempDir.path, 'test.timeline_summary.json')).readAsString(); expect(json.decode(written), {