From 8307d4cd7caabba5fbf62bbecc921e828865cdc7 Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Tue, 10 Sep 2024 09:59:45 -0700 Subject: [PATCH 1/2] Upgrade to unified_analytics 6.1.3 --- .../enhance_tracing/enhance_tracing.dart | 2 +- .../service/service_extension_widgets.dart | 2 +- .../src/shared/analytics/_analytics_web.dart | 58 +++++++++++++++---- .../lib/src/shared/common_widgets.dart | 10 ++-- packages/devtools_app/pubspec.yaml | 2 +- 5 files changed, 56 insertions(+), 18 deletions(-) diff --git a/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing.dart b/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing.dart index cf2b9927ce8..83478a55e1b 100644 --- a/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing.dart +++ b/packages/devtools_app/lib/src/screens/performance/panes/controls/enhance_tracing/enhance_tracing.dart @@ -280,7 +280,7 @@ class TraceWidgetBuildsCheckbox extends StatelessWidget { tooltip: extension.tooltip, onChanged: _checkboxChanged, enabled: enabled, - gaScreenName: extension.gaScreenName, + gaScreen: extension.gaScreenName, gaItem: extension.gaItem, ), ), diff --git a/packages/devtools_app/lib/src/service/service_extension_widgets.dart b/packages/devtools_app/lib/src/service/service_extension_widgets.dart index 0c8419a127d..8de126c55ad 100644 --- a/packages/devtools_app/lib/src/service/service_extension_widgets.dart +++ b/packages/devtools_app/lib/src/service/service_extension_widgets.dart @@ -588,7 +588,7 @@ class _ServiceExtensionCheckboxState extends State tooltip: widget.serviceExtension.tooltip, onChanged: _onChanged, enabled: available, - gaScreenName: widget.serviceExtension.gaScreenName, + gaScreen: widget.serviceExtension.gaScreenName, gaItem: widget.serviceExtension.gaItem, ), ), diff --git a/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart b/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart index 4dba24e3488..4a0d5fe4e2d 100644 --- a/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart +++ b/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart @@ -89,6 +89,7 @@ extension type GtagEventDevTools._(JSObject _) implements GtagEvent { // "onDebugPrompt" - user responded to prompt when running a debug session // "languageStatus" - launched from the language status popout String? ide_launched_feature, + String? is_wasm, // dimension13 whether DevTools is running with WASM. // Performance screen metrics. See [PerformanceScreenMetrics]. int? ui_duration_micros, // metric1 @@ -122,6 +123,7 @@ extension type GtagEventDevTools._(JSObject _) implements GtagEvent { external String? get is_embedded; external String? get g3_username; external String? get ide_launched_feature; + external String? get is_wasm; // Custom metrics: external int? get ui_duration_micros; @@ -169,6 +171,7 @@ extension type GtagExceptionDevTools._(JSObject _) implements GtagException { // "onDebugPrompt" - user responded to prompt when running a debug session // "languageStatus" - launched from the language status popout String? ide_launched_feature, + String? is_wasm, // dimension13 whether DevTools is running with WASM. // Performance screen metrics. See [PerformanceScreenMetrics]. int? ui_duration_micros, // metric1 @@ -202,6 +205,7 @@ extension type GtagExceptionDevTools._(JSObject _) implements GtagException { external String? get is_embedded; external String? get g3_username; external String? get ide_launched_feature; + external String? get is_wasm; // Custom metrics: external int? get ui_duration_micros; @@ -246,6 +250,7 @@ GtagEventDevTools _gtagEvent({ is_embedded: isEmbedded().toString(), g3_username: devToolsEnvironmentParameters.username(), ide_launched_feature: ideLaunchedFeature, + is_wasm: kIsWasm.toString(), // [PerformanceScreenMetrics] ui_duration_micros: screenMetrics is PerformanceScreenMetrics ? screenMetrics.uiDuration?.inMicroseconds @@ -311,6 +316,7 @@ GtagExceptionDevTools _gtagException( is_embedded: isEmbedded().toString(), g3_username: devToolsEnvironmentParameters.username(), ide_launched_feature: ideLaunchedFeature, + is_wasm: kIsWasm.toString(), // [PerformanceScreenMetrics] ui_duration_micros: screenMetrics is PerformanceScreenMetrics ? screenMetrics.uiDuration?.inMicroseconds @@ -612,16 +618,13 @@ void reportError( if (_lastGaError == errorMessage) return; _lastGaError = errorMessage; - GTag.exception( - gaExceptionProvider: () => _gtagException( - errorMessage, - fatal: fatal, - ), + final gTagException = _gtagException( + errorMessage, + fatal: fatal, ); + GTag.exception(gaExceptionProvider: () => gTagException); - // TODO(kenz): we may want to create a new event `devtoolsException` if we - // need all of our custom dimensions logged with exceptions. - final uaEvent = ua.Event.exception(exception: errorMessage); + final uaEvent = _uaEventFromGtagException(gTagException); unawaited(dtdManager.sendAnalyticsEvent(uaEvent)); } @@ -847,11 +850,11 @@ void _sendEventForScreen(String screenName, GtagEventDevTools gtagEvent) { screenName, gaEventProvider: () => gtagEvent, ); - final uaEvent = uaEventFromGtagEvent(gtagEvent); + final uaEvent = _uaEventFromGtagEvent(gtagEvent); unawaited(dtdManager.sendAnalyticsEvent(uaEvent)); } -ua.Event uaEventFromGtagEvent(GtagEventDevTools gtagEvent) { +ua.Event _uaEventFromGtagEvent(GtagEventDevTools gtagEvent) { return ua.Event.devtoolsEvent( eventCategory: gtagEvent.event_category!, label: gtagEvent.event_label!, @@ -867,6 +870,7 @@ ua.Event uaEventFromGtagEvent(GtagEventDevTools gtagEvent) { isExternalBuild: gtagEvent.is_external_build, isEmbedded: gtagEvent.is_embedded, ideLaunchedFeature: gtagEvent.ide_launched_feature, + isWasm: gtagEvent.is_wasm, g3Username: gtagEvent.g3_username, uiDurationMicros: gtagEvent.ui_duration_micros, rasterDurationMicros: gtagEvent.raster_duration_micros, @@ -883,3 +887,37 @@ ua.Event uaEventFromGtagEvent(GtagEventDevTools gtagEvent) { inspectorTreeControllerId: gtagEvent.inspector_tree_controller_id, ); } + +ua.Event _uaEventFromGtagException(GtagExceptionDevTools gtagException) { + return ua.Event.exception( + exception: gtagException.description ?? 'unknown exception', + data: { + 'fatal': gtagException.fatal, + 'userApp': gtagException.user_app, + 'userBuild': gtagException.user_build, + 'userPlatform': gtagException.user_platform, + 'devtoolsPlatform': gtagException.devtools_platform, + 'devtoolsChrome': gtagException.devtools_chrome, + 'devtoolsVersion': gtagException.devtools_version, + 'ideLaunched': gtagException.ide_launched, + 'isExternalBuild': gtagException.is_external_build, + 'isEmbedded': gtagException.is_embedded, + 'ideLaunchedFeature': gtagException.ide_launched_feature, + 'isWasm': gtagException.is_wasm, + 'g3Username': gtagException.g3_username, + 'uiDurationMicros': gtagException.ui_duration_micros, + 'rasterDurationMicros': gtagException.raster_duration_micros, + 'shaderCompilationDurationMicros': + gtagException.shader_compilation_duration_micros, + 'traceEventCount': gtagException.trace_event_count, + 'cpuSampleCount': gtagException.cpu_sample_count, + 'cpuStackDepth': gtagException.cpu_stack_depth, + 'heapDiffObjectsBefore': gtagException.heap_diff_objects_before, + 'heapDiffObjectsAfter': gtagException.heap_diff_objects_after, + 'heapObjectsTotal': gtagException.heap_objects_total, + 'rootSetCount': gtagException.root_set_count, + 'rowCount': gtagException.row_count, + 'inspectorTreeControllerId': gtagException.inspector_tree_controller_id, + }, + ); +} \ No newline at end of file diff --git a/packages/devtools_app/lib/src/shared/common_widgets.dart b/packages/devtools_app/lib/src/shared/common_widgets.dart index 8866f8fc4bc..f46ff5761f3 100644 --- a/packages/devtools_app/lib/src/shared/common_widgets.dart +++ b/packages/devtools_app/lib/src/shared/common_widgets.dart @@ -1521,7 +1521,7 @@ class CheckboxSetting extends StatelessWidget { this.tooltip, this.onChanged, this.enabled = true, - this.gaScreenName, + this.gaScreen, this.gaItem, this.checkboxKey, }); @@ -1539,7 +1539,7 @@ class CheckboxSetting extends StatelessWidget { /// Whether this checkbox setting should be enabled for interaction. final bool enabled; - final String? gaScreenName; + final String? gaScreen; final String? gaItem; @@ -1554,10 +1554,10 @@ class CheckboxSetting extends StatelessWidget { NotifierCheckbox( notifier: notifier, onChanged: (bool? value) { - final gaScreenName = this.gaScreenName; + final gaScreen = this.gaScreen; final gaItem = this.gaItem; - if (gaScreenName != null && gaItem != null) { - ga.select(gaScreenName, gaItem); + if (gaScreen != null && gaItem != null) { + ga.select(gaScreen, gaItem); } final onChanged = this.onChanged; if (onChanged != null) { diff --git a/packages/devtools_app/pubspec.yaml b/packages/devtools_app/pubspec.yaml index abeca29fdf3..55328e7dd66 100644 --- a/packages/devtools_app/pubspec.yaml +++ b/packages/devtools_app/pubspec.yaml @@ -53,7 +53,7 @@ dependencies: stack_trace: ^1.10.0 stream_channel: ^2.1.1 string_scanner: ^1.1.0 - unified_analytics: ^6.1.0 + unified_analytics: ^6.1.3 vm_service: ^14.2.5 vm_service_protos: ^1.0.0 vm_snapshot_analysis: ^0.7.6 From 6563601450b15ee4d96e6153b4560d8a5a488a6b Mon Sep 17 00:00:00 2001 From: Kenzie Davisson Date: Tue, 10 Sep 2024 10:06:26 -0700 Subject: [PATCH 2/2] formatting --- .../devtools_app/lib/src/shared/analytics/_analytics_web.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart b/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart index 4a0d5fe4e2d..62f34ca9183 100644 --- a/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart +++ b/packages/devtools_app/lib/src/shared/analytics/_analytics_web.dart @@ -920,4 +920,4 @@ ua.Event _uaEventFromGtagException(GtagExceptionDevTools gtagException) { 'inspectorTreeControllerId': gtagException.inspector_tree_controller_id, }, ); -} \ No newline at end of file +}