Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ class TraceWidgetBuildsCheckbox extends StatelessWidget {
tooltip: extension.tooltip,
onChanged: _checkboxChanged,
enabled: enabled,
gaScreenName: extension.gaScreenName,
gaScreen: extension.gaScreenName,
gaItem: extension.gaItem,
),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ class _ServiceExtensionCheckboxState extends State<ServiceExtensionCheckbox>
tooltip: widget.serviceExtension.tooltip,
onChanged: _onChanged,
enabled: available,
gaScreenName: widget.serviceExtension.gaScreenName,
gaScreen: widget.serviceExtension.gaScreenName,
gaItem: widget.serviceExtension.gaItem,
),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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));
}

Expand Down Expand Up @@ -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!,
Expand All @@ -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,
Expand All @@ -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,
},
);
}
10 changes: 5 additions & 5 deletions packages/devtools_app/lib/src/shared/common_widgets.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1521,7 +1521,7 @@ class CheckboxSetting extends StatelessWidget {
this.tooltip,
this.onChanged,
this.enabled = true,
this.gaScreenName,
this.gaScreen,
this.gaItem,
this.checkboxKey,
});
Expand All @@ -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;

Expand All @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion packages/devtools_app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down