Skip to content

Commit 60d5c8a

Browse files
authored
Migration for the sendTiming events for package:unified_analytics (#138896)
Related to tracker issue: - flutter/flutter#128251 <img width="278" alt="image" src="https://github.com/flutter/flutter/assets/42216813/cee7b9be-48d6-48e5-8c39-de28d0a1f0de"> The image above shows all of the instances where we have `sendTiming`. All of the call sites have been updated to use the new `Event.timing` event from `package:unified_analytics`.
1 parent 5e5b529 commit 60d5c8a

27 files changed

+806
-274
lines changed

packages/flutter_tools/lib/src/android/gradle.dart

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -490,7 +490,13 @@ class AndroidGradleBuilder implements AndroidBuilder {
490490
status.stop();
491491
}
492492

493-
_usage.sendTiming('build', 'gradle', sw.elapsed);
493+
final Duration elapsedDuration = sw.elapsed;
494+
_usage.sendTiming('build', 'gradle', elapsedDuration);
495+
_analytics.send(Event.timing(
496+
workflow: 'build',
497+
variableName: 'gradle',
498+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
499+
));
494500

495501
if (exitCode != 0) {
496502
if (detectedGradleError == null) {
@@ -757,7 +763,13 @@ class AndroidGradleBuilder implements AndroidBuilder {
757763
} finally {
758764
status.stop();
759765
}
760-
_usage.sendTiming('build', 'gradle-aar', sw.elapsed);
766+
final Duration elapsedDuration = sw.elapsed;
767+
_usage.sendTiming('build', 'gradle-aar', elapsedDuration);
768+
_analytics.send(Event.timing(
769+
workflow: 'build',
770+
variableName: 'gradle-aar',
771+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
772+
));
761773

762774
if (result.exitCode != 0) {
763775
_logger.printStatus(result.stdout, wrap: false);
@@ -792,7 +804,13 @@ class AndroidGradleBuilder implements AndroidBuilder {
792804
project: project,
793805
);
794806

795-
_usage.sendTiming('print', 'android build variants', sw.elapsed);
807+
final Duration elapsedDuration = sw.elapsed;
808+
_usage.sendTiming('print', 'android build variants', elapsedDuration);
809+
_analytics.send(Event.timing(
810+
workflow: 'print',
811+
variableName: 'android build variants',
812+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
813+
));
796814

797815
if (result.exitCode != 0) {
798816
_logger.printStatus(result.stdout, wrap: false);
@@ -828,7 +846,13 @@ class AndroidGradleBuilder implements AndroidBuilder {
828846
options: <String>['-q', '-PoutputPath=$outputPath'],
829847
project: project,
830848
);
831-
_usage.sendTiming('outputs', 'app link settings', sw.elapsed);
849+
final Duration elapsedDuration = sw.elapsed;
850+
_usage.sendTiming('outputs', 'app link settings', elapsedDuration);
851+
_analytics.send(Event.timing(
852+
workflow: 'outputs',
853+
variableName: 'app link settings',
854+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
855+
));
832856

833857
if (result.exitCode != 0) {
834858
_logger.printStatus(result.stdout, wrap: false);

packages/flutter_tools/lib/src/commands/packages.dart

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
// found in the LICENSE file.
44

55
import 'package:args/args.dart';
6+
import 'package:unified_analytics/unified_analytics.dart';
67

78
import '../base/common.dart';
89
import '../base/os.dart';
@@ -298,7 +299,7 @@ class PackagesGetCommand extends FlutterCommand {
298299
processManager: globals.processManager,
299300
platform: globals.platform,
300301
usage: globals.flutterUsage,
301-
analytics: globals.analytics,
302+
analytics: analytics,
302303
projectDir: rootProject.directory,
303304
generateDartPluginRegistry: true,
304305
);
@@ -319,7 +320,7 @@ class PackagesGetCommand extends FlutterCommand {
319320
processManager: globals.processManager,
320321
platform: globals.platform,
321322
usage: globals.flutterUsage,
322-
analytics: globals.analytics,
323+
analytics: analytics,
323324
projectDir: rootProject.directory,
324325
generateDartPluginRegistry: true,
325326
);
@@ -354,10 +355,24 @@ class PackagesGetCommand extends FlutterCommand {
354355
command: name,
355356
touchesPackageConfig: !(isHelp || dryRun),
356357
);
357-
globals.flutterUsage.sendTiming('pub', 'get', timer.elapsed, label: 'success');
358+
final Duration elapsedDuration = timer.elapsed;
359+
globals.flutterUsage.sendTiming('pub', 'get', elapsedDuration, label: 'success');
360+
analytics.send(Event.timing(
361+
workflow: 'pub',
362+
variableName: 'get',
363+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
364+
label: 'success'
365+
));
358366
// Not limiting to catching Exception because the exception is rethrown.
359367
} catch (_) { // ignore: avoid_catches_without_on_clauses
360-
globals.flutterUsage.sendTiming('pub', 'get', timer.elapsed, label: 'failure');
368+
final Duration elapsedDuration = timer.elapsed;
369+
globals.flutterUsage.sendTiming('pub', 'get', elapsedDuration, label: 'failure');
370+
analytics.send(Event.timing(
371+
workflow: 'pub',
372+
variableName: 'get',
373+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
374+
label: 'failure'
375+
));
361376
rethrow;
362377
}
363378

packages/flutter_tools/lib/src/ios/mac.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,13 @@ Future<XcodeBuildResult> buildXcodeProject({
419419
'Xcode ${xcodeBuildActionToString(buildAction)} done.'.padRight(kDefaultStatusPadding + 1)
420420
+ getElapsedAsSeconds(sw.elapsed).padLeft(5),
421421
);
422-
globals.flutterUsage.sendTiming(xcodeBuildActionToString(buildAction), 'xcode-ios', Duration(milliseconds: sw.elapsedMilliseconds));
422+
final Duration elapsedDuration = sw.elapsed;
423+
globals.flutterUsage.sendTiming(xcodeBuildActionToString(buildAction), 'xcode-ios', elapsedDuration);
424+
globals.analytics.send(Event.timing(
425+
workflow: xcodeBuildActionToString(buildAction),
426+
variableName: 'xcode-ios',
427+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
428+
));
423429

424430
if (tempDir.existsSync()) {
425431
// Display additional warning and error message from xcresult bundle.

packages/flutter_tools/lib/src/isolated/resident_web_runner.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -452,6 +452,11 @@ Please provide a valid TCP port (an integer between 0 and 65535, inclusive).
452452
// Don't track restart times for dart2js builds or web-server devices.
453453
if (debuggingOptions.buildInfo.isDebug && deviceIsDebuggable) {
454454
_usage.sendTiming('hot', 'web-incremental-restart', elapsed);
455+
_analytics.send(Event.timing(
456+
workflow: 'hot',
457+
variableName: 'web-incremental-restart',
458+
elapsedMilliseconds: elapsed.inMilliseconds,
459+
));
455460
final String sdkName = await device!.device!.sdkNameAndVersion;
456461
HotEvent(
457462
'restart',

packages/flutter_tools/lib/src/linux/build_linux.dart

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5+
import 'package:unified_analytics/unified_analytics.dart';
6+
57
import '../artifacts.dart';
68
import '../base/analyze_size.dart';
79
import '../base/common.dart';
@@ -155,7 +157,13 @@ Future<void> _runCmake(String buildModeName, Directory sourceDir, Directory buil
155157
if (result != 0) {
156158
throwToolExit('Unable to generate build files');
157159
}
158-
globals.flutterUsage.sendTiming('build', 'cmake-linux', Duration(milliseconds: sw.elapsedMilliseconds));
160+
final Duration elapsedDuration = sw.elapsed;
161+
globals.flutterUsage.sendTiming('build', 'cmake-linux', elapsedDuration);
162+
globals.analytics.send(Event.timing(
163+
workflow: 'build',
164+
variableName: 'cmake-linux',
165+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
166+
));
159167
}
160168

161169
Future<void> _runBuild(Directory buildDir) async {
@@ -185,5 +193,11 @@ Future<void> _runBuild(Directory buildDir) async {
185193
if (result != 0) {
186194
throwToolExit('Build process failed');
187195
}
188-
globals.flutterUsage.sendTiming('build', 'linux-ninja', Duration(milliseconds: sw.elapsedMilliseconds));
196+
final Duration elapsedDuration = sw.elapsed;
197+
globals.flutterUsage.sendTiming('build', 'linux-ninja', elapsedDuration);
198+
globals.analytics.send(Event.timing(
199+
workflow: 'build',
200+
variableName: 'linux-ninja',
201+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
202+
));
189203
}

packages/flutter_tools/lib/src/macos/build_macos.dart

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5+
import 'package:unified_analytics/unified_analytics.dart';
6+
57
import '../base/analyze_size.dart';
68
import '../base/common.dart';
79
import '../base/file_system.dart';
@@ -160,7 +162,13 @@ Future<void> buildMacOS({
160162
throwToolExit('Build process failed');
161163
}
162164
await _writeCodeSizeAnalysis(buildInfo, sizeAnalyzer);
163-
globals.flutterUsage.sendTiming('build', 'xcode-macos', Duration(milliseconds: sw.elapsedMilliseconds));
165+
final Duration elapsedDuration = sw.elapsed;
166+
globals.flutterUsage.sendTiming('build', 'xcode-macos', elapsedDuration);
167+
globals.analytics.send(Event.timing(
168+
workflow: 'build',
169+
variableName: 'xcode-macos',
170+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
171+
));
164172
}
165173

166174
/// Performs a size analysis of the AOT snapshot and writes to an analysis file, if configured.

packages/flutter_tools/lib/src/run_hot.dart

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -713,7 +713,13 @@ class HotRunner extends ResidentRunner {
713713
restartTimer.elapsed.inMilliseconds);
714714

715715
// Send timing analytics.
716-
globals.flutterUsage.sendTiming('hot', 'restart', restartTimer.elapsed);
716+
final Duration elapsedDuration = restartTimer.elapsed;
717+
globals.flutterUsage.sendTiming('hot', 'restart', elapsedDuration);
718+
_analytics.send(Event.timing(
719+
workflow: 'hot',
720+
variableName: 'restart',
721+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
722+
));
717723

718724
// Toggle the main dill name after successfully uploading.
719725
_swap =! _swap;
@@ -1112,6 +1118,11 @@ class HotRunner extends ResidentRunner {
11121118
// Only report timings if we reloaded a single view without any errors.
11131119
if ((reassembleResult.reassembleViews.length == 1) && !reassembleResult.failedReassemble && shouldReportReloadTime) {
11141120
globals.flutterUsage.sendTiming('hot', 'reload', reloadDuration);
1121+
_analytics.send(Event.timing(
1122+
workflow: 'hot',
1123+
variableName: 'reload',
1124+
elapsedMilliseconds: reloadDuration.inMilliseconds,
1125+
));
11151126
}
11161127
return OperationResult(
11171128
reassembleResult.failedReassemble ? 1 : OperationResult.ok.code,

packages/flutter_tools/lib/src/runner/flutter_command.dart

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,16 +1634,26 @@ abstract class FlutterCommand extends Command<void> {
16341634
final String label = labels
16351635
.where((String? label) => label != null && !_isBlank(label))
16361636
.join('-');
1637+
1638+
// If the command provides its own end time, use it. Otherwise report
1639+
// the duration of the entire execution.
1640+
final Duration elapsedDuration = (commandResult.endTimeOverride ?? endTime).difference(startTime);
16371641
globals.flutterUsage.sendTiming(
16381642
'flutter',
16391643
name,
1640-
// If the command provides its own end time, use it. Otherwise report
1641-
// the duration of the entire execution.
1642-
(commandResult.endTimeOverride ?? endTime).difference(startTime),
1644+
elapsedDuration,
16431645
// Report in the form of `success-[parameter1-parameter2]`, all of which
16441646
// can be null if the command doesn't provide a FlutterCommandResult.
16451647
label: label == '' ? null : label,
16461648
);
1649+
analytics.send(Event.timing(
1650+
workflow: 'flutter',
1651+
variableName: name,
1652+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
1653+
// Report in the form of `success-[parameter1-parameter2]`, all of which
1654+
// can be null if the command doesn't provide a FlutterCommandResult.
1655+
label: label == '' ? null : label,
1656+
));
16471657
}
16481658

16491659
/// Perform validation then call [runCommand] to execute the command.
@@ -1707,7 +1717,7 @@ Run 'flutter -h' (or 'flutter <command> -h') for available flutter commands and
17071717
processManager: globals.processManager,
17081718
platform: globals.platform,
17091719
usage: globals.flutterUsage,
1710-
analytics: globals.analytics,
1720+
analytics: analytics,
17111721
projectDir: project.directory,
17121722
generateDartPluginRegistry: true,
17131723
);

packages/flutter_tools/lib/src/runner/flutter_command_runner.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'package:args/args.dart';
66
import 'package:args/command_runner.dart';
77
import 'package:completion/completion.dart';
88
import 'package:file/file.dart';
9+
import 'package:unified_analytics/unified_analytics.dart';
910

1011
import '../artifacts.dart';
1112
import '../base/common.dart';
@@ -329,6 +330,11 @@ class FlutterCommandRunner extends CommandRunner<void> {
329330

330331
if ((topLevelResults[FlutterGlobalOptions.kVersionFlag] as bool?) ?? false) {
331332
globals.flutterUsage.sendCommand(FlutterGlobalOptions.kVersionFlag);
333+
globals.analytics.send(Event.flutterCommandResult(
334+
commandPath: 'version',
335+
result: 'success',
336+
commandHasTerminal: globals.stdio.hasTerminal,
337+
));
332338
final FlutterVersion version = globals.flutterVersion.fetchTagsAndGetVersion(
333339
clock: globals.systemClock,
334340
);

packages/flutter_tools/lib/src/web/compile.dart

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,11 +150,17 @@ class WebBuilder {
150150
settings: buildSettingsString,
151151
));
152152

153+
final Duration elapsedDuration = sw.elapsed;
153154
_flutterUsage.sendTiming(
154155
'build',
155156
compilerConfig.isWasm ? 'dart2wasm' : 'dart2js',
156-
Duration(milliseconds: sw.elapsedMilliseconds),
157+
elapsedDuration,
157158
);
159+
_analytics.send(Event.timing(
160+
workflow: 'build',
161+
variableName: compilerConfig.isWasm ? 'dart2wasm' : 'dart2js',
162+
elapsedMilliseconds: elapsedDuration.inMilliseconds,
163+
));
158164
}
159165
}
160166

0 commit comments

Comments
 (0)