Shuffle analytics (#3185)
diff --git a/lib/src/solver/result.dart b/lib/src/solver/result.dart index 8d4e891..cec4f75 100644 --- a/lib/src/solver/result.dart +++ b/lib/src/solver/result.dart
@@ -134,31 +134,39 @@ final analytics = pubAnalytics.analytics; if (analytics == null) return; + final dependenciesForAnalytics = <PackageId>[]; for (final package in packages) { final source = package.source; // Only send analytics for packages from pub.dev. if (source is HostedSource && (runningFromTest || package.description['url'] == HostedSource.pubDevUrl)) { - final dependencyKind = const { - DependencyType.dev: 'dev', - DependencyType.direct: 'direct', - DependencyType.none: 'transitive' - }[_root.dependencyType(package.name)]!; - analytics.sendEvent( - 'pub-get', - package.name, - label: package.version.canonicalizedVersion, - value: 1, - parameters: { - 'ni': '1', // We consider a pub-get a non-interactive event. - pubAnalytics.dependencyKindCustomDimensionName: dependencyKind, - }, - ); - log.fine( - 'Sending analytics hit for "pub-get" of ${package.name} version ${package.version} as dependency-kind $dependencyKind'); + dependenciesForAnalytics.add(package); } } + // Randomize the dependencies, such that even if some analytics events don't + // get sent, the results will still be representative. + shuffle(dependenciesForAnalytics); + for (final package in dependenciesForAnalytics) { + final dependencyKind = const { + DependencyType.dev: 'dev', + DependencyType.direct: 'direct', + DependencyType.none: 'transitive' + }[_root.dependencyType(package.name)]!; + analytics.sendEvent( + 'pub-get', + package.name, + label: package.version.canonicalizedVersion, + value: 1, + parameters: { + 'ni': '1', // We consider a pub-get a non-interactive event. + pubAnalytics.dependencyKindCustomDimensionName: dependencyKind, + }, + ); + log.fine( + 'Sending analytics hit for "pub-get" of ${package.name} version ${package.version} as dependency-kind $dependencyKind'); + } + analytics.sendTiming( 'resolution', resolutionTime.inMilliseconds,