From afd745e8933fe35659d347bb0740e56c263da3ec Mon Sep 17 00:00:00 2001 From: Kaushik Iska Date: Fri, 10 Jul 2020 12:13:56 -0700 Subject: [PATCH] Filter profiling events by names not category (#61185) Category isn't preserved by timeline events as `Dart_TimelineEvent` specifies the category as `embedder`. Fixes: https://github.com/flutter/flutter/issues/60008 --- .../lib/src/driver/profiling_summarizer.dart | 17 ++++++++++++----- .../lib/src/driver/timeline_summary.dart | 6 +++--- .../src/real_tests/timeline_summary_test.dart | 4 ++-- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/packages/flutter_driver/lib/src/driver/profiling_summarizer.dart b/packages/flutter_driver/lib/src/driver/profiling_summarizer.dart index 98cc2243ea..8e6833d6c3 100644 --- a/packages/flutter_driver/lib/src/driver/profiling_summarizer.dart +++ b/packages/flutter_driver/lib/src/driver/profiling_summarizer.dart @@ -5,8 +5,15 @@ import 'percentile_utils.dart'; import 'timeline.dart'; -/// The catrgory shared by all profiling related timeline events. -const String kProfilingCategory = 'flutter::profiling'; +/// Profiling related timeline events. +/// +/// We do not use a profiling category for these as all the dart timeline events +/// have the same profiling category "embedder". +const Set kProfilingEvents = { + _kCpuProfile, + _kGpuProfile, + _kMemoryProfile, +}; // These field names need to be in-sync with: // https://github.com/flutter/engine/blob/master/shell/profiling/sampling_profiler.cc @@ -26,12 +33,12 @@ enum ProfileType { Memory, } -/// Summarizes [TimelineEvents]s corresponding to [kProfilingCategory] category. +/// Summarizes [TimelineEvents]s corresponding to [kProfilingEvents] category. /// /// A sample event (some fields have been omitted for brewity): /// ``` /// { -/// "category": "flutter::profiling", +/// "category": "embedder", /// "name": "CpuUsage", /// "ts": 121120, /// "args": { @@ -51,7 +58,7 @@ class ProfilingSummarizer { final Map> eventsByType = >{}; for (final TimelineEvent event in profilingEvents) { - assert(event.category == kProfilingCategory); + assert(kProfilingEvents.contains(event.name)); final ProfileType type = _getProfileType(event.name); eventsByType[type] ??= []; eventsByType[type].add(event); diff --git a/packages/flutter_driver/lib/src/driver/timeline_summary.dart b/packages/flutter_driver/lib/src/driver/timeline_summary.dart index 92afd6db8d..7b3ef3acec 100644 --- a/packages/flutter_driver/lib/src/driver/timeline_summary.dart +++ b/packages/flutter_driver/lib/src/driver/timeline_summary.dart @@ -229,9 +229,9 @@ class TimelineSummary { .toList(); } - List _extractCategorizedEvents(String category) { + List _extractEventsWithNames(Set names) { return _timeline.events - .where((TimelineEvent event) => event.category == category) + .where((TimelineEvent event) => names.contains(event.name)) .toList(); } @@ -319,7 +319,7 @@ class TimelineSummary { List _extractGpuRasterizerDrawDurations() => _extractBeginEndEvents(kRasterizeFrameEventName); - ProfilingSummarizer _profilingSummarizer() => ProfilingSummarizer.fromEvents(_extractCategorizedEvents(kProfilingCategory)); + ProfilingSummarizer _profilingSummarizer() => ProfilingSummarizer.fromEvents(_extractEventsWithNames(kProfilingEvents)); List _extractFrameDurations() => _extractBeginEndEvents(kBuildFrameEventName); } 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 07dcf09dfb..27f0eb31e2 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 @@ -65,7 +65,7 @@ void main() { }; Map cpuUsage(int timeStamp, double cpuUsage) => { - 'cat': 'flutter::profiling', + 'cat': 'embedder', 'name': 'CpuUsage', 'ts': timeStamp, 'args': { @@ -74,7 +74,7 @@ void main() { }; Map memoryUsage(int timeStamp, double dirty, double shared) => { - 'cat': 'flutter::profiling', + 'cat': 'embedder', 'name': 'MemoryUsage', 'ts': timeStamp, 'args': {