Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Sign in
Toggle navigation
F
Front-End
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
abdullh.alsoleman
Front-End
Commits
ef146f63
Unverified
Commit
ef146f63
authored
Jul 29, 2019
by
Zachary Anderson
Committed by
GitHub
Jul 29, 2019
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[flutter_tool] Clean up usage events and custom dimensions (#36785)
parent
24f483cf
Changes
46
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
46 changed files
with
755 additions
and
397 deletions
+755
-397
fuchsia_asset_builder.dart
packages/flutter_tools/bin/fuchsia_asset_builder.dart
+1
-2
fuchsia_tester.dart
packages/flutter_tools/bin/fuchsia_tester.dart
+1
-2
runner.dart
packages/flutter_tools/lib/runner.dart
+1
-2
gradle.dart
packages/flutter_tools/lib/src/android/gradle.dart
+2
-7
build.dart
packages/flutter_tools/lib/src/base/build.dart
+1
-1
build_aar.dart
packages/flutter_tools/lib/src/commands/build_aar.dart
+7
-7
build_bundle.dart
packages/flutter_tools/lib/src/commands/build_bundle.dart
+6
-8
config.dart
packages/flutter_tools/lib/src/commands/config.dart
+1
-1
create.dart
packages/flutter_tools/lib/src/commands/create.dart
+6
-6
packages.dart
packages/flutter_tools/lib/src/commands/packages.dart
+8
-8
run.dart
packages/flutter_tools/lib/src/commands/run.dart
+9
-9
context_runner.dart
packages/flutter_tools/lib/src/context_runner.dart
+1
-1
devfs.dart
packages/flutter_tools/lib/src/devfs.dart
+1
-0
doctor.dart
packages/flutter_tools/lib/src/doctor.dart
+2
-2
fuchsia_build.dart
packages/flutter_tools/lib/src/fuchsia/fuchsia_build.dart
+1
-1
mac.dart
packages/flutter_tools/lib/src/ios/mac.dart
+5
-8
build_linux.dart
packages/flutter_tools/lib/src/linux/build_linux.dart
+1
-1
build_macos.dart
packages/flutter_tools/lib/src/macos/build_macos.dart
+1
-1
crash_reporting.dart
...ages/flutter_tools/lib/src/reporting/crash_reporting.dart
+1
-11
disabled_usage.dart
packages/flutter_tools/lib/src/reporting/disabled_usage.dart
+1
-3
events.dart
packages/flutter_tools/lib/src/reporting/events.dart
+137
-0
reporting.dart
packages/flutter_tools/lib/src/reporting/reporting.dart
+30
-0
usage.dart
packages/flutter_tools/lib/src/reporting/usage.dart
+147
-74
run_hot.dart
packages/flutter_tools/lib/src/run_hot.dart
+210
-141
flutter_command.dart
packages/flutter_tools/lib/src/runner/flutter_command.dart
+27
-24
flutter_command_runner.dart
.../flutter_tools/lib/src/runner/flutter_command_runner.dart
+1
-1
compile.dart
packages/flutter_tools/lib/src/web/compile.dart
+1
-1
build_windows.dart
packages/flutter_tools/lib/src/windows/build_windows.dart
+1
-1
analytics_test.dart
...ages/flutter_tools/test/general.shard/analytics_test.dart
+9
-8
artifacts_test.dart
...ages/flutter_tools/test/general.shard/artifacts_test.dart
+1
-1
build_aar_test.dart
...ter_tools/test/general.shard/commands/build_aar_test.dart
+4
-4
build_bundle_test.dart
..._tools/test/general.shard/commands/build_bundle_test.dart
+5
-5
create_usage_test.dart
..._tools/test/general.shard/commands/create_usage_test.dart
+27
-14
doctor_test.dart
...lutter_tools/test/general.shard/commands/doctor_test.dart
+1
-1
packages_test.dart
...tter_tools/test/general.shard/commands/packages_test.dart
+7
-4
compile_test.dart
packages/flutter_tools/test/general.shard/compile_test.dart
+1
-1
crash_reporting_test.dart
...lutter_tools/test/general.shard/crash_reporting_test.dart
+4
-5
hot_test.dart
packages/flutter_tools/test/general.shard/hot_test.dart
+3
-0
mac_test.dart
packages/flutter_tools/test/general.shard/ios/mac_test.dart
+7
-6
project_test.dart
packages/flutter_tools/test/general.shard/project_test.dart
+3
-3
resident_runner_test.dart
...lutter_tools/test/general.shard/resident_runner_test.dart
+60
-9
flutter_command_test.dart
...tools/test/general.shard/runner/flutter_command_test.dart
+3
-3
utils.dart
packages/flutter_tools/test/general.shard/runner/utils.dart
+1
-1
common.dart
packages/flutter_tools/test/src/common.dart
+2
-3
context.dart
packages/flutter_tools/test/src/context.dart
+2
-2
testbed.dart
packages/flutter_tools/test/src/testbed.dart
+4
-4
No files found.
packages/flutter_tools/bin/fuchsia_asset_builder.dart
View file @
ef146f63
...
...
@@ -15,8 +15,7 @@ import 'package:flutter_tools/src/context_runner.dart';
import
'package:flutter_tools/src/devfs.dart'
;
import
'package:flutter_tools/src/bundle.dart'
;
import
'package:flutter_tools/src/globals.dart'
;
import
'package:flutter_tools/src/reporting/disabled_usage.dart'
;
import
'package:flutter_tools/src/reporting/usage.dart'
;
import
'package:flutter_tools/src/reporting/reporting.dart'
;
const
String
_kOptionPackages
=
'packages'
;
const
String
_kOptionAsset
=
'asset-dir'
;
...
...
packages/flutter_tools/bin/fuchsia_tester.dart
View file @
ef146f63
...
...
@@ -18,8 +18,7 @@ import 'package:flutter_tools/src/dart/package_map.dart';
import
'package:flutter_tools/src/artifacts.dart'
;
import
'package:flutter_tools/src/globals.dart'
;
import
'package:flutter_tools/src/project.dart'
;
import
'package:flutter_tools/src/reporting/disabled_usage.dart'
;
import
'package:flutter_tools/src/reporting/usage.dart'
;
import
'package:flutter_tools/src/reporting/reporting.dart'
;
import
'package:flutter_tools/src/test/coverage_collector.dart'
;
import
'package:flutter_tools/src/test/runner.dart'
;
...
...
packages/flutter_tools/lib/runner.dart
View file @
ef146f63
...
...
@@ -19,8 +19,7 @@ import 'src/base/utils.dart';
import
'src/context_runner.dart'
;
import
'src/doctor.dart'
;
import
'src/globals.dart'
;
import
'src/reporting/crash_reporting.dart'
;
import
'src/reporting/usage.dart'
;
import
'src/reporting/reporting.dart'
;
import
'src/runner/flutter_command.dart'
;
import
'src/runner/flutter_command_runner.dart'
;
import
'src/version.dart'
;
...
...
packages/flutter_tools/lib/src/android/gradle.dart
View file @
ef146f63
...
...
@@ -24,8 +24,7 @@ import '../features.dart';
import
'../flutter_manifest.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../reporting/usage.dart'
;
import
'../runner/flutter_command.dart'
;
import
'../reporting/reporting.dart'
;
import
'android_sdk.dart'
;
import
'android_studio.dart'
;
...
...
@@ -747,11 +746,7 @@ Future<void> _buildGradleProjectV2(
printError
(
'The Gradle failure may have been because of AndroidX incompatibilities in this Flutter app.'
);
printError
(
'See https://goo.gl/CP92wY for more information on the problem and how to fix it.'
);
printError
(
'*******************************************************************************************'
);
String
commandName
=
''
;
if
(
FlutterCommand
.
current
!=
null
)
{
commandName
=
'-
${FlutterCommand.current.name}
'
;
}
flutterUsage
.
sendEvent
(
'build
$commandName
'
,
'android-x-failure'
);
BuildEvent
(
'android-x-failure'
).
send
();
}
throwToolExit
(
'Gradle task
$assembleTask
failed with exit code
$exitCode
'
,
exitCode:
exitCode
);
}
...
...
packages/flutter_tools/lib/src/base/build.dart
View file @
ef146f63
...
...
@@ -14,7 +14,7 @@ import '../dart/package_map.dart';
import
'../globals.dart'
;
import
'../macos/xcode.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'context.dart'
;
import
'file_system.dart'
;
...
...
packages/flutter_tools/lib/src/commands/build_aar.dart
View file @
ef146f63
...
...
@@ -9,7 +9,7 @@ import '../base/context.dart';
import
'../base/os.dart'
;
import
'../build_info.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../runner/flutter_command.dart'
show
DevelopmentArtifact
,
FlutterCommandResult
;
import
'build.dart'
;
...
...
@@ -38,20 +38,20 @@ class BuildAarCommand extends BuildSubCommand {
final
String
name
=
'aar'
;
@override
Future
<
Map
<
String
,
String
>>
get
usageValues
async
{
final
Map
<
String
,
String
>
usage
=
<
String
,
String
>{};
Future
<
Map
<
CustomDimensions
,
String
>>
get
usageValues
async
{
final
Map
<
CustomDimensions
,
String
>
usage
=
<
CustomDimensions
,
String
>{};
final
FlutterProject
futterProject
=
_getProject
();
if
(
futterProject
==
null
)
{
return
usage
;
}
if
(
futterProject
.
manifest
.
isModule
)
{
usage
[
kC
ommandBuildAarProjectType
]
=
'module'
;
usage
[
CustomDimensions
.
c
ommandBuildAarProjectType
]
=
'module'
;
}
else
if
(
futterProject
.
manifest
.
isPlugin
)
{
usage
[
kC
ommandBuildAarProjectType
]
=
'plugin'
;
usage
[
CustomDimensions
.
c
ommandBuildAarProjectType
]
=
'plugin'
;
}
else
{
usage
[
kC
ommandBuildAarProjectType
]
=
'app'
;
usage
[
CustomDimensions
.
c
ommandBuildAarProjectType
]
=
'app'
;
}
usage
[
kC
ommandBuildAarTargetPlatform
]
=
usage
[
CustomDimensions
.
c
ommandBuildAarTargetPlatform
]
=
(
argResults
[
'target-platform'
]
as
List
<
String
>).
join
(
','
);
return
usage
;
}
...
...
packages/flutter_tools/lib/src/commands/build_bundle.dart
View file @
ef146f63
...
...
@@ -10,7 +10,7 @@ import '../build_info.dart';
import
'../bundle.dart'
;
import
'../features.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../runner/flutter_command.dart'
show
FlutterOptions
,
FlutterCommandResult
;
import
'build.dart'
;
...
...
@@ -74,17 +74,15 @@ class BuildBundleCommand extends BuildSubCommand {
' iOS runtimes.'
;
@override
Future
<
Map
<
String
,
String
>>
get
usageValues
async
{
Future
<
Map
<
CustomDimensions
,
String
>>
get
usageValues
async
{
final
String
projectDir
=
fs
.
file
(
targetFile
).
parent
.
parent
.
path
;
final
FlutterProject
futterProject
=
FlutterProject
.
fromPath
(
projectDir
);
if
(
futterProject
==
null
)
{
return
const
<
String
,
String
>{};
return
const
<
CustomDimensions
,
String
>{};
}
return
<
String
,
String
>{
kCommandBuildBundleTargetPlatform:
argResults
[
'target-platform'
],
kCommandBuildBundleIsModule:
'
${futterProject.isModule}
'
return
<
CustomDimensions
,
String
>{
CustomDimensions
.
commandBuildBundleTargetPlatform
:
argResults
[
'target-platform'
],
CustomDimensions
.
commandBuildBundleIsModule
:
'
${futterProject.isModule}
'
};
}
...
...
packages/flutter_tools/lib/src/commands/config.dart
View file @
ef146f63
...
...
@@ -11,7 +11,7 @@ import '../base/file_system.dart';
import
'../convert.dart'
;
import
'../features.dart'
;
import
'../globals.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../runner/flutter_command.dart'
;
import
'../version.dart'
;
...
...
packages/flutter_tools/lib/src/commands/create.dart
View file @
ef146f63
...
...
@@ -23,7 +23,7 @@ import '../doctor.dart';
import
'../features.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../runner/flutter_command.dart'
;
import
'../template.dart'
;
import
'../version.dart'
;
...
...
@@ -165,11 +165,11 @@ class CreateCommand extends FlutterCommand {
String
get
invocation
=>
'
${runner.executableName}
$name
<output directory>'
;
@override
Future
<
Map
<
String
,
String
>>
get
usageValues
async
{
return
<
String
,
String
>{
kC
ommandCreateProjectType:
argResults
[
'template'
],
kC
ommandCreateAndroidLanguage:
argResults
[
'android-language'
],
kC
ommandCreateIosLanguage:
argResults
[
'ios-language'
],
Future
<
Map
<
CustomDimensions
,
String
>>
get
usageValues
async
{
return
<
CustomDimensions
,
String
>{
CustomDimensions
.
c
ommandCreateProjectType
:
argResults
[
'template'
],
CustomDimensions
.
c
ommandCreateAndroidLanguage
:
argResults
[
'android-language'
],
CustomDimensions
.
c
ommandCreateIosLanguage
:
argResults
[
'ios-language'
],
};
}
...
...
packages/flutter_tools/lib/src/commands/packages.dart
View file @
ef146f63
...
...
@@ -9,7 +9,7 @@ import '../base/os.dart';
import
'../cache.dart'
;
import
'../dart/pub.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../runner/flutter_command.dart'
;
class
PackagesCommand
extends
FlutterCommand
{
...
...
@@ -71,8 +71,8 @@ class PackagesGetCommand extends FlutterCommand {
}
@override
Future
<
Map
<
String
,
String
>>
get
usageValues
async
{
final
Map
<
String
,
String
>
usageValues
=
<
String
,
String
>{};
Future
<
Map
<
CustomDimensions
,
String
>>
get
usageValues
async
{
final
Map
<
CustomDimensions
,
String
>
usageValues
=
<
CustomDimensions
,
String
>{};
final
String
workingDirectory
=
argResults
.
rest
.
length
==
1
?
argResults
.
rest
[
0
]
:
null
;
final
String
target
=
findProjectRoot
(
workingDirectory
);
if
(
target
==
null
)
{
...
...
@@ -82,11 +82,11 @@ class PackagesGetCommand extends FlutterCommand {
final
bool
hasPlugins
=
await
rootProject
.
flutterPluginsFile
.
exists
();
if
(
hasPlugins
)
{
final
int
numberOfPlugins
=
(
await
rootProject
.
flutterPluginsFile
.
readAsLines
()).
length
;
usageValues
[
kC
ommandPackagesNumberPlugins
]
=
'
$numberOfPlugins
'
;
usageValues
[
CustomDimensions
.
c
ommandPackagesNumberPlugins
]
=
'
$numberOfPlugins
'
;
}
else
{
usageValues
[
kC
ommandPackagesNumberPlugins
]
=
'0'
;
usageValues
[
CustomDimensions
.
c
ommandPackagesNumberPlugins
]
=
'0'
;
}
usageValues
[
kC
ommandPackagesProjectModule
]
=
'
${rootProject.isModule}
'
;
usageValues
[
CustomDimensions
.
c
ommandPackagesProjectModule
]
=
'
${rootProject.isModule}
'
;
return
usageValues
;
}
...
...
@@ -100,11 +100,11 @@ class PackagesGetCommand extends FlutterCommand {
checkLastModified:
false
,
);
pubGetTimer
.
stop
();
flutterUsage
.
sendEvent
(
'packages-pub-get'
,
'success'
);
PubGetEvent
(
success:
true
).
send
(
);
flutterUsage
.
sendTiming
(
'packages-pub-get'
,
'success'
,
pubGetTimer
.
elapsed
);
}
catch
(
_
)
{
pubGetTimer
.
stop
();
flutterUsage
.
sendEvent
(
'packages-pub-get'
,
'failure'
);
PubGetEvent
(
success:
false
).
send
(
);
flutterUsage
.
sendTiming
(
'packages-pub-get'
,
'failure'
,
pubGetTimer
.
elapsed
);
rethrow
;
}
...
...
packages/flutter_tools/lib/src/commands/run.dart
View file @
ef146f63
...
...
@@ -17,7 +17,7 @@ import '../features.dart';
import
'../globals.dart'
;
import
'../macos/xcode.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../resident_runner.dart'
;
import
'../resident_web_runner.dart'
;
import
'../run_cold.dart'
;
...
...
@@ -198,7 +198,7 @@ class RunCommand extends RunCommandBase {
}
@override
Future
<
Map
<
String
,
String
>>
get
usageValues
async
{
Future
<
Map
<
CustomDimensions
,
String
>>
get
usageValues
async
{
String
deviceType
,
deviceOsVersion
;
bool
isEmulator
;
...
...
@@ -227,13 +227,13 @@ class RunCommand extends RunCommandBase {
hostLanguage
.
add
(
iosProject
.
isSwift
?
'swift'
:
'objc'
);
}
return
<
String
,
String
>{
kC
ommandRunIsEmulator:
'
$isEmulator
'
,
kC
ommandRunTargetName:
deviceType
,
kC
ommandRunTargetOsVersion:
deviceOsVersion
,
kC
ommandRunModeName:
modeName
,
kC
ommandRunProjectModule:
'
${FlutterProject.current().isModule}
'
,
kC
ommandRunProjectHostLanguage:
hostLanguage
.
join
(
','
),
return
<
CustomDimensions
,
String
>{
CustomDimensions
.
c
ommandRunIsEmulator
:
'
$isEmulator
'
,
CustomDimensions
.
c
ommandRunTargetName
:
deviceType
,
CustomDimensions
.
c
ommandRunTargetOsVersion
:
deviceOsVersion
,
CustomDimensions
.
c
ommandRunModeName
:
modeName
,
CustomDimensions
.
c
ommandRunProjectModule
:
'
${FlutterProject.current().isModule}
'
,
CustomDimensions
.
c
ommandRunProjectHostLanguage
:
hostLanguage
.
join
(
','
),
};
}
...
...
packages/flutter_tools/lib/src/context_runner.dart
View file @
ef146f63
...
...
@@ -42,7 +42,7 @@ import 'macos/cocoapods_validator.dart';
import
'macos/macos_workflow.dart'
;
import
'macos/xcode.dart'
;
import
'macos/xcode_validator.dart'
;
import
'reporting/
usage
.dart'
;
import
'reporting/
reporting
.dart'
;
import
'run_hot.dart'
;
import
'version.dart'
;
import
'web/chrome.dart'
;
...
...
packages/flutter_tools/lib/src/devfs.dart
View file @
ef146f63
...
...
@@ -3,6 +3,7 @@
// found in the LICENSE file.
import
'dart:async'
;
import
'package:json_rpc_2/json_rpc_2.dart'
as
rpc
;
import
'package:meta/meta.dart'
;
...
...
packages/flutter_tools/lib/src/doctor.dart
View file @
ef146f63
...
...
@@ -31,7 +31,7 @@ import 'macos/cocoapods_validator.dart';
import
'macos/macos_workflow.dart'
;
import
'macos/xcode_validator.dart'
;
import
'proxy_validator.dart'
;
import
'reporting/
usage
.dart'
;
import
'reporting/
reporting
.dart'
;
import
'tester/flutter_tester.dart'
;
import
'version.dart'
;
import
'vscode/vscode_validator.dart'
;
...
...
@@ -236,7 +236,7 @@ class Doctor {
break
;
}
flutterUsage
.
sendEvent
(
'doctorResult.
${validator.runtimeType.toString()}
'
,
result
.
typeStr
);
DoctorResultEvent
(
validator:
validator
,
result:
result
).
send
(
);
if
(
result
.
statusInfo
!=
null
)
{
printStatus
(
'
${result.coloredLeadingBox}
${validator.title}
(
${result.statusInfo}
)'
,
...
...
packages/flutter_tools/lib/src/fuchsia/fuchsia_build.dart
View file @
ef146f63
...
...
@@ -16,7 +16,7 @@ import '../convert.dart';
import
'../devfs.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'fuchsia_pm.dart'
;
import
'fuchsia_sdk.dart'
;
...
...
packages/flutter_tools/lib/src/ios/mac.dart
View file @
ef146f63
...
...
@@ -24,7 +24,7 @@ import '../globals.dart';
import
'../macos/cocoapod_utils.dart'
;
import
'../macos/xcode.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../services.dart'
;
import
'code_signing.dart'
;
import
'xcodeproj.dart'
;
...
...
@@ -472,13 +472,10 @@ Future<void> diagnoseXcodeBuildFailure(XcodeBuildResult result) async {
if
(
result
.
xcodeBuildExecution
!=
null
&&
result
.
xcodeBuildExecution
.
buildForPhysicalDevice
&&
result
.
stdout
?.
toUpperCase
()?.
contains
(
'BITCODE'
)
==
true
)
{
flutterUsage
.
sendEvent
(
'Xcode'
,
'bitcode-failure'
,
parameters:
<
String
,
String
>{
'build-commands'
:
result
.
xcodeBuildExecution
.
buildCommands
.
toString
(),
'build-settings'
:
result
.
xcodeBuildExecution
.
buildSettings
.
toString
(),
});
BuildEvent
(
'xcode-bitcode-failure'
,
command:
result
.
xcodeBuildExecution
.
buildCommands
.
toString
(),
settings:
result
.
xcodeBuildExecution
.
buildSettings
.
toString
(),
).
send
();
}
if
(
result
.
xcodeBuildExecution
!=
null
&&
...
...
packages/flutter_tools/lib/src/linux/build_linux.dart
View file @
ef146f63
...
...
@@ -13,7 +13,7 @@ import '../cache.dart';
import
'../convert.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
/// Builds the Linux project through the Makefile.
Future
<
void
>
buildLinux
(
LinuxProject
linuxProject
,
BuildInfo
buildInfo
,
{
String
target
=
'lib/main.dart'
})
async
{
...
...
packages/flutter_tools/lib/src/macos/build_macos.dart
View file @
ef146f63
...
...
@@ -12,7 +12,7 @@ import '../convert.dart';
import
'../globals.dart'
;
import
'../ios/xcodeproj.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'cocoapod_utils.dart'
;
...
...
packages/flutter_tools/lib/src/reporting/crash_reporting.dart
View file @
ef146f63
...
...
@@ -2,17 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:async'
;
import
'package:http/http.dart'
as
http
;
import
'package:meta/meta.dart'
;
import
'../base/io.dart'
;
import
'../base/os.dart'
;
import
'../base/platform.dart'
;
import
'../globals.dart'
;
import
'usage.dart'
;
part of
reporting
;
/// Tells crash backend that the error is from the Flutter CLI.
const
String
_kProductId
=
'Flutter_Tools'
;
...
...
packages/flutter_tools/lib/src/reporting/disabled_usage.dart
View file @
ef146f63
...
...
@@ -2,9 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:async'
;
import
'usage.dart'
;
part of
reporting
;
class
DisabledUsage
implements
Usage
{
@override
...
...
packages/flutter_tools/lib/src/reporting/events.dart
0 → 100644
View file @
ef146f63
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
part of
reporting
;
/// A generic usage even that does not involve custom dimensions.
///
/// If sending values for custom dimensions is required, extend this class as
/// below.
class
UsageEvent
{
UsageEvent
(
this
.
category
,
this
.
parameter
);
final
String
category
;
final
String
parameter
;
void
send
()
{
flutterUsage
.
sendEvent
(
category
,
parameter
);
}
}
/// A usage event related to hot reload/restart.
///
/// On a successful hot reload, we collect stats that help understand scale of
/// the update. For example, [syncedLibraryCount]/[finalLibraryCount] indicates
/// how many libraries were affected by the hot reload request. Relation of
/// [invalidatedSourcesCount] to [syncedLibraryCount] should help understand
/// sync/transfer "overhead" of updating this number of source files.
class
HotEvent
extends
UsageEvent
{
HotEvent
(
String
parameter
,
{
@required
this
.
targetPlatform
,
@required
this
.
sdkName
,
@required
this
.
emulator
,
@required
this
.
fullRestart
,
this
.
reason
,
this
.
finalLibraryCount
,
this
.
syncedLibraryCount
,
this
.
syncedClassesCount
,
this
.
syncedProceduresCount
,
this
.
syncedBytes
,
this
.
invalidatedSourcesCount
,
this
.
transferTimeInMs
,
this
.
overallTimeInMs
,
})
:
super
(
'hot'
,
parameter
);
final
String
reason
;
final
String
targetPlatform
;
final
String
sdkName
;
final
bool
emulator
;
final
bool
fullRestart
;
final
int
finalLibraryCount
;
final
int
syncedLibraryCount
;
final
int
syncedClassesCount
;
final
int
syncedProceduresCount
;
final
int
syncedBytes
;
final
int
invalidatedSourcesCount
;
final
int
transferTimeInMs
;
final
int
overallTimeInMs
;
@override
void
send
()
{
final
Map
<
String
,
String
>
parameters
=
_useCdKeys
(<
CustomDimensions
,
String
>{
CustomDimensions
.
hotEventTargetPlatform
:
targetPlatform
,
CustomDimensions
.
hotEventSdkName
:
sdkName
,
CustomDimensions
.
hotEventEmulator
:
emulator
.
toString
(),
CustomDimensions
.
hotEventFullRestart
:
fullRestart
.
toString
(),
if
(
reason
!=
null
)
CustomDimensions
.
hotEventReason
:
reason
,
if
(
finalLibraryCount
!=
null
)
CustomDimensions
.
hotEventFinalLibraryCount
:
finalLibraryCount
.
toString
(),
if
(
syncedLibraryCount
!=
null
)
CustomDimensions
.
hotEventSyncedLibraryCount
:
syncedLibraryCount
.
toString
(),
if
(
syncedClassesCount
!=
null
)
CustomDimensions
.
hotEventSyncedClassesCount
:
syncedClassesCount
.
toString
(),
if
(
syncedProceduresCount
!=
null
)
CustomDimensions
.
hotEventSyncedProceduresCount
:
syncedProceduresCount
.
toString
(),
if
(
syncedBytes
!=
null
)
CustomDimensions
.
hotEventSyncedBytes
:
syncedBytes
.
toString
(),
if
(
invalidatedSourcesCount
!=
null
)
CustomDimensions
.
hotEventInvalidatedSourcesCount
:
invalidatedSourcesCount
.
toString
(),
if
(
transferTimeInMs
!=
null
)
CustomDimensions
.
hotEventTransferTimeInMs
:
transferTimeInMs
.
toString
(),
if
(
overallTimeInMs
!=
null
)
CustomDimensions
.
hotEventOverallTimeInMs
:
overallTimeInMs
.
toString
(),
});
flutterUsage
.
sendEvent
(
category
,
parameter
,
parameters:
parameters
);
}
}
/// An event that reports the result of a [DoctorValidator]
class
DoctorResultEvent
extends
UsageEvent
{
DoctorResultEvent
({
@required
DoctorValidator
validator
,
@required
ValidationResult
result
})
:
super
(
'doctorResult.
${validator.runtimeType.toString()}
'
,
result
.
typeStr
);
// TODO(zra): Override send() to detect a GroupedValidator and send separate
// events for each sub-validator.
}
/// An event that reports success or failure of a pub get.
class
PubGetEvent
extends
UsageEvent
{
PubGetEvent
({
@required
bool
success
,
})
:
super
(
'packages-pub-get'
,
success
?
'success'
:
'failure'
);
}
/// An event that reports something about a build.
class
BuildEvent
extends
UsageEvent
{
BuildEvent
(
String
parameter
,
{
this
.
command
,
this
.
settings
,
})
:
super
(
'build'
+
(
FlutterCommand
.
current
==
null
?
''
:
'-
${FlutterCommand.current.name}
'
),
parameter
);
final
String
command
;
final
String
settings
;
@override
void
send
()
{
final
Map
<
String
,
String
>
parameters
=
_useCdKeys
(<
CustomDimensions
,
String
>{
if
(
command
!=
null
)
CustomDimensions
.
buildEventCommand
:
command
,
if
(
settings
!=
null
)
CustomDimensions
.
buildEventSettings
:
settings
,
});
flutterUsage
.
sendEvent
(
category
,
parameter
,
parameters:
parameters
);
}
}
/// An event that reports the result of a top-level command.
class
CommandResultEvent
extends
UsageEvent
{
CommandResultEvent
(
String
commandPath
,
FlutterCommandResult
result
)
:
super
(
commandPath
,
result
?.
toString
()
??
'unspecified'
);
}
packages/flutter_tools/lib/src/reporting/reporting.dart
0 → 100644
View file @
ef146f63
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library
reporting
;
import
'dart:async'
;
import
'package:http/http.dart'
as
http
;
import
'package:meta/meta.dart'
;
import
'package:usage/usage_io.dart'
;
import
'../base/config.dart'
;
import
'../base/context.dart'
;
import
'../base/file_system.dart'
;
import
'../base/io.dart'
;
import
'../base/os.dart'
;
import
'../base/platform.dart'
;
import
'../base/time.dart'
;
import
'../base/utils.dart'
;
import
'../doctor.dart'
;
import
'../features.dart'
;
import
'../globals.dart'
;
import
'../runner/flutter_command.dart'
;
import
'../version.dart'
;
part
'crash_reporting.dart'
;
part
'disabled_usage.dart'
;
part
'events.dart'
;
part
'usage.dart'
;
packages/flutter_tools/lib/src/reporting/usage.dart
View file @
ef146f63
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/run_hot.dart
View file @
ef146f63
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/runner/flutter_command.dart
View file @
ef146f63
...
...
@@ -28,7 +28,7 @@ import '../doctor.dart';
import
'../features.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'flutter_command_runner.dart'
;
export
'../cache.dart'
show
DevelopmentArtifact
;
...
...
@@ -63,6 +63,21 @@ class FlutterCommandResult {
/// [FlutterCommand] will automatically measure and report the command's
/// complete time if not overridden.
final
DateTime
endTimeOverride
;
@override
String
toString
()
{
switch
(
exitStatus
)
{
case
ExitStatus
.
success
:
return
'success'
;
case
ExitStatus
.
warning
:
return
'warning'
;
case
ExitStatus
.
fail
:
return
'fail'
;
default
:
assert
(
false
);
return
null
;
}
}
}
/// Common flutter command line options.
...
...
@@ -366,7 +381,8 @@ abstract class FlutterCommand extends Command<void> {
}
/// Additional usage values to be sent with the usage ping.
Future
<
Map
<
String
,
String
>>
get
usageValues
async
=>
const
<
String
,
String
>{};
Future
<
Map
<
CustomDimensions
,
String
>>
get
usageValues
async
=>
const
<
CustomDimensions
,
String
>{};
/// Runs this command.
///
...
...
@@ -382,8 +398,9 @@ abstract class FlutterCommand extends Command<void> {
name:
'command'
,
overrides:
<
Type
,
Generator
>{
FlutterCommand:
()
=>
this
},
body:
()
async
{
if
(
flutterUsage
.
isFirstRun
)
if
(
flutterUsage
.
isFirstRun
)
{
flutterUsage
.
printWelcome
();
}
final
String
commandPath
=
await
usagePath
;
FlutterCommandResult
commandResult
;
try
{
...
...
@@ -411,21 +428,7 @@ abstract class FlutterCommand extends Command<void> {
}
// Send command result.
String
result
=
'unspecified'
;
if
(
commandResult
!=
null
)
{
switch
(
commandResult
.
exitStatus
)
{
case
ExitStatus
.
success
:
result
=
'success'
;
break
;
case
ExitStatus
.
warning
:
result
=
'warning'
;
break
;
case
ExitStatus
.
fail
:
result
=
'fail'
;
break
;
}
}
flutterUsage
.
sendEvent
(
commandPath
,
result
);
CommandResultEvent
(
commandPath
,
commandResult
).
send
();
// Send timing.
final
List
<
String
>
labels
=
<
String
>[
...
...
@@ -476,12 +479,12 @@ abstract class FlutterCommand extends Command<void> {
setupApplicationPackages
();
if
(
commandPath
!=
null
)
{
final
Map
<
String
,
String
>
additionalUsageValues
=
<
String
,
String
>{
...?
await
usageValues
,
};
additionalUsageValues
[
kCommandHasTerminal
]
=
io
.
stdout
.
hasTerminal
?
'true'
:
'false'
;
flutterUsage
.
sendC
ommand
(
commandPath
,
parameters:
additionalUsageValues
);
final
Map
<
CustomDimensions
,
String
>
additionalUsageValues
=
<
CustomDimensions
,
String
>{
...?
await
usageValues
,
CustomDimensions
.
commandHasTerminal
:
io
.
stdout
.
hasTerminal
?
'true'
:
'false'
,
}
;
Usage
.
c
ommand
(
commandPath
,
parameters:
additionalUsageValues
);
}
return
await
runCommand
();
...
...
packages/flutter_tools/lib/src/runner/flutter_command_runner.dart
View file @
ef146f63
...
...
@@ -30,7 +30,7 @@ import '../convert.dart';
import
'../dart/package_map.dart'
;
import
'../device.dart'
;
import
'../globals.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'../tester/flutter_tester.dart'
;
import
'../version.dart'
;
import
'../vmservice.dart'
;
...
...
packages/flutter_tools/lib/src/web/compile.dart
View file @
ef146f63
...
...
@@ -13,7 +13,7 @@ import '../build_info.dart';
import
'../bundle.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
/// The [WebCompilationProxy] instance.
WebCompilationProxy
get
webCompilationProxy
=>
context
.
get
<
WebCompilationProxy
>();
...
...
packages/flutter_tools/lib/src/windows/build_windows.dart
View file @
ef146f63
...
...
@@ -13,7 +13,7 @@ import '../cache.dart';
import
'../convert.dart'
;
import
'../globals.dart'
;
import
'../project.dart'
;
import
'../reporting/
usage
.dart'
;
import
'../reporting/
reporting
.dart'
;
import
'msbuild_utils.dart'
;
import
'visual_studio.dart'
;
...
...
packages/flutter_tools/test/general.shard/analytics_test.dart
View file @
ef146f63
...
...
@@ -4,22 +4,21 @@
import
'package:args/command_runner.dart'
;
import
'package:file/memory.dart'
;
import
'package:mockito/mockito.dart'
;
import
'package:flutter_tools/src/base/config.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/time.dart'
;
import
'package:flutter_tools/src/features.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/time.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/commands/build.dart'
;
import
'package:flutter_tools/src/commands/config.dart'
;
import
'package:flutter_tools/src/commands/doctor.dart'
;
import
'package:flutter_tools/src/doctor.dart'
;
import
'package:flutter_tools/src/reporting/usage.dart'
;
import
'package:flutter_tools/src/features.dart'
;
import
'package:flutter_tools/src/reporting/reporting.dart'
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:flutter_tools/src/version.dart'
;
import
'package:mockito/mockito.dart'
;
import
'package:platform/platform.dart'
;
import
'../src/common.dart'
;
...
...
@@ -94,7 +93,8 @@ void main() {
final
Usage
usage
=
Usage
();
usage
.
sendCommand
(
'test'
);
expect
(
fs
.
file
(
'test'
).
readAsStringSync
(),
contains
(
'
$enabledFlutterFeatures
: enable-web'
));
final
String
featuresKey
=
cdKey
(
CustomDimensions
.
enabledFlutterFeatures
);
expect
(
fs
.
file
(
'test'
).
readAsStringSync
(),
contains
(
'
$featuresKey
: enable-web'
));
},
overrides:
<
Type
,
Generator
>{
FlutterVersion:
()
=>
FlutterVersion
(
const
SystemClock
()),
Config:
()
=>
mockFlutterConfig
,
...
...
@@ -114,7 +114,8 @@ void main() {
final
Usage
usage
=
Usage
();
usage
.
sendCommand
(
'test'
);
expect
(
fs
.
file
(
'test'
).
readAsStringSync
(),
contains
(
'
$enabledFlutterFeatures
: enable-web,enable-linux-desktop,enable-macos-desktop'
));
final
String
featuresKey
=
cdKey
(
CustomDimensions
.
enabledFlutterFeatures
);
expect
(
fs
.
file
(
'test'
).
readAsStringSync
(),
contains
(
'
$featuresKey
: enable-web,enable-linux-desktop,enable-macos-desktop'
));
},
overrides:
<
Type
,
Generator
>{
FlutterVersion:
()
=>
FlutterVersion
(
const
SystemClock
()),
Config:
()
=>
mockFlutterConfig
,
...
...
packages/flutter_tools/test/general.shard/artifacts_test.dart
View file @
ef146f63
...
...
@@ -3,11 +3,11 @@
// found in the LICENSE file.
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/artifacts.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/artifacts.dart'
;
import
'../src/common.dart'
;
import
'../src/context.dart'
;
...
...
packages/flutter_tools/test/general.shard/commands/build_aar_test.dart
View file @
ef146f63
...
...
@@ -7,7 +7,7 @@ import 'package:flutter_tools/src/android/aar.dart';
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/commands/build_aar.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:mockito/mockito.dart'
;
import
'../../src/common.dart'
;
...
...
@@ -51,7 +51,7 @@ void main() {
final
BuildAarCommand
command
=
await
runCommandIn
(
projectPath
);
expect
(
await
command
.
usageValues
,
containsPair
(
kC
ommandBuildAarProjectType
,
'module'
));
containsPair
(
CustomDimensions
.
c
ommandBuildAarProjectType
,
'module'
));
},
overrides:
<
Type
,
Generator
>{
AarBuilder:
()
=>
mockAarBuilder
,
...
...
@@ -63,7 +63,7 @@ void main() {
final
BuildAarCommand
command
=
await
runCommandIn
(
projectPath
);
expect
(
await
command
.
usageValues
,
containsPair
(
kC
ommandBuildAarProjectType
,
'plugin'
));
containsPair
(
CustomDimensions
.
c
ommandBuildAarProjectType
,
'plugin'
));
},
overrides:
<
Type
,
Generator
>{
AarBuilder:
()
=>
mockAarBuilder
,
...
...
@@ -76,7 +76,7 @@ void main() {
final
BuildAarCommand
command
=
await
runCommandIn
(
projectPath
,
arguments:
<
String
>[
'--target-platform=android-arm'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kC
ommandBuildAarTargetPlatform
,
'android-arm'
));
containsPair
(
CustomDimensions
.
c
ommandBuildAarTargetPlatform
,
'android-arm'
));
},
overrides:
<
Type
,
Generator
>{
AarBuilder:
()
=>
mockAarBuilder
,
...
...
packages/flutter_tools/test/general.shard/commands/build_bundle_test.dart
View file @
ef146f63
...
...
@@ -6,11 +6,11 @@ import 'package:args/command_runner.dart';
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/bundle.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/commands/build_bundle.dart'
;
import
'package:flutter_tools/src/bundle.dart'
;
import
'package:flutter_tools/src/features.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:mockito/mockito.dart'
;
import
'../../src/common.dart'
;
...
...
@@ -70,7 +70,7 @@ void main() {
final
BuildBundleCommand
command
=
await
runCommandIn
(
projectPath
);
expect
(
await
command
.
usageValues
,
containsPair
(
kC
ommandBuildBundleIsModule
,
'true'
));
containsPair
(
CustomDimensions
.
c
ommandBuildBundleIsModule
,
'true'
));
},
timeout:
allowForCreateFlutterProject
);
testUsingContext
(
'bundle getUsage indicate that project is not a module'
,
()
async
{
...
...
@@ -80,7 +80,7 @@ void main() {
final
BuildBundleCommand
command
=
await
runCommandIn
(
projectPath
);
expect
(
await
command
.
usageValues
,
containsPair
(
kC
ommandBuildBundleIsModule
,
'false'
));
containsPair
(
CustomDimensions
.
c
ommandBuildBundleIsModule
,
'false'
));
},
timeout:
allowForCreateFlutterProject
);
testUsingContext
(
'bundle getUsage indicate the target platform'
,
()
async
{
...
...
@@ -90,7 +90,7 @@ void main() {
final
BuildBundleCommand
command
=
await
runCommandIn
(
projectPath
);
expect
(
await
command
.
usageValues
,
containsPair
(
kC
ommandBuildBundleTargetPlatform
,
'android-arm'
));
containsPair
(
CustomDimensions
.
c
ommandBuildBundleTargetPlatform
,
'android-arm'
));
},
timeout:
allowForCreateFlutterProject
);
testUsingContext
(
'bundle fails to build for Windows if feature is disabled'
,
()
async
{
...
...
packages/flutter_tools/test/general.shard/commands/create_usage_test.dart
View file @
ef146f63
...
...
@@ -7,7 +7,7 @@ import 'package:flutter_tools/src/base/file_system.dart';
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/commands/create.dart'
;
import
'package:flutter_tools/src/doctor.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'../../src/common.dart'
;
import
'../../src/context.dart'
;
...
...
@@ -43,25 +43,35 @@ void main() {
final
CreateCommand
command
=
CreateCommand
();
final
CommandRunner
<
void
>
runner
=
createTestCommandRunner
(
command
);
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=module'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateProjectType
,
'module'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=module'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateProjectType
,
'module'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=app'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateProjectType
,
'app'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=app'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateProjectType
,
'app'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=package'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateProjectType
,
'package'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=package'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateProjectType
,
'package'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=plugin'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateProjectType
,
'plugin'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=plugin'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateProjectType
,
'plugin'
));
}));
test
(
'set iOS host language type as usage value'
,
()
=>
testbed
.
run
(()
async
{
final
CreateCommand
command
=
CreateCommand
();
final
CommandRunner
<
void
>
runner
=
createTestCommandRunner
(
command
);
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=app'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateIosLanguage
,
'objc'
));
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=app'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateIosLanguage
,
'objc'
));
await
runner
.
run
(<
String
>[
'create'
,
...
...
@@ -71,7 +81,8 @@ void main() {
'--ios-language=swift'
,
'testy'
,
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateIosLanguage
,
'swift'
));
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateIosLanguage
,
'swift'
));
}));
...
...
@@ -80,7 +91,8 @@ void main() {
final
CommandRunner
<
void
>
runner
=
createTestCommandRunner
(
command
);
await
runner
.
run
(<
String
>[
'create'
,
'--flutter-root=flutter'
,
'--no-pub'
,
'--template=app'
,
'testy'
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateAndroidLanguage
,
'java'
));
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateAndroidLanguage
,
'java'
));
await
runner
.
run
(<
String
>[
'create'
,
...
...
@@ -90,7 +102,8 @@ void main() {
'--android-language=kotlin'
,
'testy'
,
]);
expect
(
await
command
.
usageValues
,
containsPair
(
kCommandCreateAndroidLanguage
,
'kotlin'
));
expect
(
await
command
.
usageValues
,
containsPair
(
CustomDimensions
.
commandCreateAndroidLanguage
,
'kotlin'
));
}));
});
}
...
...
packages/flutter_tools/test/general.shard/commands/doctor_test.dart
View file @
ef146f63
...
...
@@ -16,9 +16,9 @@ import 'package:flutter_tools/src/base/user_messages.dart';
import
'package:flutter_tools/src/doctor.dart'
;
import
'package:flutter_tools/src/globals.dart'
;
import
'package:flutter_tools/src/proxy_validator.dart'
;
import
'package:flutter_tools/src/reporting/reporting.dart'
;
import
'package:flutter_tools/src/vscode/vscode.dart'
;
import
'package:flutter_tools/src/vscode/vscode_validator.dart'
;
import
'package:flutter_tools/src/reporting/usage.dart'
;
import
'../../src/common.dart'
;
import
'../../src/context.dart'
;
...
...
packages/flutter_tools/test/general.shard/commands/packages_test.dart
View file @
ef146f63
...
...
@@ -10,7 +10,7 @@ import 'package:flutter_tools/src/base/io.dart';
import
'package:flutter_tools/src/base/utils.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/commands/packages.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:process/process.dart'
;
import
'../../src/common.dart'
;
...
...
@@ -226,7 +226,8 @@ void main() {
final
PackagesCommand
command
=
await
runCommandIn
(
projectPath
,
'get'
);
final
PackagesGetCommand
getCommand
=
command
.
subcommands
[
'get'
]
as
PackagesGetCommand
;
expect
(
await
getCommand
.
usageValues
,
containsPair
(
kCommandPackagesNumberPlugins
,
'0'
));
expect
(
await
getCommand
.
usageValues
,
containsPair
(
CustomDimensions
.
commandPackagesNumberPlugins
,
'0'
));
},
timeout:
allowForCreateFlutterProject
);
testUsingContext
(
'indicate that the project is not a module in usage value'
,
()
async
{
...
...
@@ -237,7 +238,8 @@ void main() {
final
PackagesCommand
command
=
await
runCommandIn
(
projectPath
,
'get'
);
final
PackagesGetCommand
getCommand
=
command
.
subcommands
[
'get'
]
as
PackagesGetCommand
;
expect
(
await
getCommand
.
usageValues
,
containsPair
(
kCommandPackagesProjectModule
,
'false'
));
expect
(
await
getCommand
.
usageValues
,
containsPair
(
CustomDimensions
.
commandPackagesProjectModule
,
'false'
));
},
timeout:
allowForCreateFlutterProject
);
testUsingContext
(
'indicate that the project is a module in usage value'
,
()
async
{
...
...
@@ -248,7 +250,8 @@ void main() {
final
PackagesCommand
command
=
await
runCommandIn
(
projectPath
,
'get'
);
final
PackagesGetCommand
getCommand
=
command
.
subcommands
[
'get'
]
as
PackagesGetCommand
;
expect
(
await
getCommand
.
usageValues
,
containsPair
(
kCommandPackagesProjectModule
,
'true'
));
expect
(
await
getCommand
.
usageValues
,
containsPair
(
CustomDimensions
.
commandPackagesProjectModule
,
'true'
));
},
timeout:
allowForCreateFlutterProject
);
testUsingContext
(
'upgrade fetches packages'
,
()
async
{
...
...
packages/flutter_tools/test/general.shard/compile_test.dart
View file @
ef146f63
...
...
@@ -6,9 +6,9 @@ import 'dart:async';
import
'dart:convert'
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/base/context.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/context.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/terminal.dart'
;
...
...
packages/flutter_tools/test/general.shard/crash_reporting_test.dart
View file @
ef146f63
...
...
@@ -8,17 +8,16 @@ import 'dart:convert';
import
'package:file/file.dart'
;
import
'package:file/local.dart'
;
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:http/http.dart'
;
import
'package:http/testing.dart'
;
import
'package:flutter_tools/runner.dart'
as
tools
;
import
'package:flutter_tools/src/base/context.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/reporting/
crash_
reporting.dart'
;
import
'package:flutter_tools/src/reporting/reporting.dart'
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:http/http.dart'
;
import
'package:http/testing.dart'
;
import
'package:pedantic/pedantic.dart'
;
import
'../src/common.dart'
;
...
...
packages/flutter_tools/test/general.shard/hot_test.dart
View file @
ef146f63
...
...
@@ -129,6 +129,7 @@ void main() {
final
MockDevice
mockDevice
=
MockDevice
();
when
(
mockDevice
.
supportsHotReload
).
thenReturn
(
true
);
when
(
mockDevice
.
supportsHotRestart
).
thenReturn
(
false
);
when
(
mockDevice
.
targetPlatform
).
thenAnswer
((
Invocation
_
)
async
=>
TargetPlatform
.
tester
);
// Trigger hot restart.
final
List
<
FlutterDevice
>
devices
=
<
FlutterDevice
>[
FlutterDevice
(
mockDevice
,
generator:
residentCompiler
,
trackWidgetCreation:
false
,
buildMode:
BuildMode
.
debug
)..
devFS
=
mockDevFs
,
...
...
@@ -190,6 +191,7 @@ void main() {
final
MockDevice
mockDevice
=
MockDevice
();
when
(
mockDevice
.
supportsHotReload
).
thenReturn
(
true
);
when
(
mockDevice
.
supportsHotRestart
).
thenReturn
(
true
);
when
(
mockDevice
.
targetPlatform
).
thenAnswer
((
Invocation
_
)
async
=>
TargetPlatform
.
tester
);
final
List
<
FlutterDevice
>
devices
=
<
FlutterDevice
>[
FlutterDevice
(
mockDevice
,
generator:
residentCompiler
,
trackWidgetCreation:
false
,
buildMode:
BuildMode
.
debug
),
];
...
...
@@ -206,6 +208,7 @@ void main() {
final
MockDevice
mockDevice
=
MockDevice
();
when
(
mockDevice
.
supportsHotReload
).
thenReturn
(
true
);
when
(
mockDevice
.
supportsHotRestart
).
thenReturn
(
true
);
when
(
mockDevice
.
targetPlatform
).
thenAnswer
((
Invocation
_
)
async
=>
TargetPlatform
.
tester
);
// Trigger hot restart.
final
List
<
FlutterDevice
>
devices
=
<
FlutterDevice
>[
FlutterDevice
(
mockDevice
,
generator:
residentCompiler
,
trackWidgetCreation:
false
,
buildMode:
BuildMode
.
debug
)..
devFS
=
mockDevFs
,
...
...
packages/flutter_tools/test/general.shard/ios/mac_test.dart
View file @
ef146f63
...
...
@@ -5,14 +5,14 @@
import
'dart:async'
;
import
'package:file/file.dart'
;
import
'package:flutter_tools/src/artifacts.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/io.dart'
show
ProcessException
,
ProcessResult
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/ios/mac.dart'
;
import
'package:flutter_tools/src/ios/xcodeproj.dart'
;
import
'package:flutter_tools/src/artifacts.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/project.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:mockito/mockito.dart'
;
import
'package:platform/platform.dart'
;
import
'package:process/process.dart'
;
...
...
@@ -183,9 +183,10 @@ void main() {
);
await
diagnoseXcodeBuildFailure
(
buildResult
);
verify
(
mockUsage
.
sendEvent
(
'Xcode'
,
'bitcode-failure'
,
parameters:
<
String
,
String
>{
'build-commands'
:
buildCommands
.
toString
(),
'build-settings'
:
buildSettings
.
toString
(),
verify
(
mockUsage
.
sendEvent
(
'build'
,
'xcode-bitcode-failure'
,
parameters:
<
String
,
String
>{
cdKey
(
CustomDimensions
.
buildEventCommand
):
buildCommands
.
toString
(),
cdKey
(
CustomDimensions
.
buildEventSettings
):
buildSettings
.
toString
(),
})).
called
(
1
);
},
overrides:
<
Type
,
Generator
>{
Usage:
()
=>
mockUsage
,
...
...
packages/flutter_tools/test/general.shard/project_test.dart
View file @
ef146f63
...
...
@@ -4,17 +4,17 @@
import
'dart:async'
;
import
'package:file/file.dart'
;
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/base/context.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/flutter_manifest.dart'
;
import
'package:flutter_tools/src/ios/ios_workflow.dart'
;
import
'package:flutter_tools/src/ios/xcodeproj.dart'
;
import
'package:flutter_tools/src/project.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:file/file.dart'
;
import
'package:file/memory.dart'
;
import
'package:meta/meta.dart'
;
import
'package:mockito/mockito.dart'
;
...
...
packages/flutter_tools/test/general.shard/resident_runner_test.dart
View file @
ef146f63
...
...
@@ -11,7 +11,7 @@ import 'package:flutter_tools/src/base/logger.dart';
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/devfs.dart'
;
import
'package:flutter_tools/src/device.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:flutter_tools/src/resident_runner.dart'
;
import
'package:flutter_tools/src/run_hot.dart'
;
import
'package:flutter_tools/src/vmservice.dart'
;
...
...
@@ -53,6 +53,7 @@ void main() {
when
(
mockDevFS
.
lastCompiled
).
thenReturn
(
DateTime
(
2000
));
when
(
mockDevFS
.
sources
).
thenReturn
(<
Uri
>[]);
when
(
mockDevFS
.
destroy
()).
thenAnswer
((
Invocation
invocation
)
async
{
});
when
(
mockDevFS
.
assetPathsToEvict
).
thenReturn
(<
String
>{});
// FlutterDevice Mocks.
when
(
mockFlutterDevice
.
updateDevFS
(
// Intentionally provide empty list to match above mock.
...
...
@@ -96,6 +97,19 @@ void main() {
mockVMService
,
]);
when
(
mockFlutterDevice
.
refreshViews
()).
thenAnswer
((
Invocation
invocation
)
async
{
});
when
(
mockFlutterDevice
.
reloadSources
(
any
,
pause:
anyNamed
(
'pause'
))).
thenReturn
(<
Future
<
Map
<
String
,
dynamic
>>>[
Future
<
Map
<
String
,
dynamic
>>.
value
(<
String
,
dynamic
>{
'type'
:
'ReloadReport'
,
'success'
:
true
,
'details'
:
<
String
,
dynamic
>{
'loadedLibraryCount'
:
1
,
'finalLibraryCount'
:
1
,
'receivedLibraryCount'
:
1
,
'receivedClassesCount'
:
1
,
'receivedProceduresCount'
:
1
,
},
}),
]);
// VMService mocks.
when
(
mockVMService
.
wsAddress
).
thenReturn
(
testUri
);
when
(
mockVMService
.
done
).
thenAnswer
((
Invocation
invocation
)
{
...
...
@@ -108,6 +122,9 @@ void main() {
when
(
mockIsolate
.
flutterExit
()).
thenAnswer
((
Invocation
invocation
)
{
return
Future
<
Map
<
String
,
Object
>>.
value
(
null
);
});
when
(
mockIsolate
.
reload
()).
thenAnswer
((
Invocation
invocation
)
{
return
Future
<
ServiceObject
>.
value
(
null
);
});
});
test
(
'ResidentRunner can attach to device successfully'
,
()
=>
testbed
.
run
(()
async
{
...
...
@@ -162,15 +179,48 @@ void main() {
expect
(
result
.
fatal
,
true
);
expect
(
result
.
code
,
1
);
verify
(
flutterUsage
.
sendEvent
(
'hot'
,
'exception'
,
parameters:
<
String
,
String
>{
reloadExceptionTargetPlatform:
getNameForTargetPlatform
(
TargetPlatform
.
android_arm
),
reloadExceptionSdkName:
'Example'
,
reloadExceptionEmulator:
'false'
,
reloadExceptionFullRestart:
'false'
,
cdKey
(
CustomDimensions
.
hotEventTargetPlatform
):
getNameForTargetPlatform
(
TargetPlatform
.
android_arm
),
cdKey
(
CustomDimensions
.
hotEventSdkName
):
'Example'
,
cdKey
(
CustomDimensions
.
hotEventEmulator
):
'false'
,
cdKey
(
CustomDimensions
.
hotEventFullRestart
):
'false'
,
})).
called
(
1
);
},
overrides:
<
Type
,
Generator
>{
Usage:
()
=>
MockUsage
(),
}));
// Need one for hot restart as well.
test
(
'ResidentRunner can send target platform to analytics from hot reload'
,
()
=>
testbed
.
run
(()
async
{
when
(
mockDevice
.
sdkNameAndVersion
).
thenAnswer
((
Invocation
invocation
)
async
{
return
'Example'
;
});
when
(
mockDevice
.
targetPlatform
).
thenAnswer
((
Invocation
invocation
)
async
{
return
TargetPlatform
.
android_arm
;
});
when
(
mockDevice
.
isLocalEmulator
).
thenAnswer
((
Invocation
invocation
)
async
{
return
false
;
});
final
Completer
<
DebugConnectionInfo
>
onConnectionInfo
=
Completer
<
DebugConnectionInfo
>.
sync
();
final
Completer
<
void
>
onAppStart
=
Completer
<
void
>.
sync
();
unawaited
(
residentRunner
.
attach
(
appStartedCompleter:
onAppStart
,
connectionInfoCompleter:
onConnectionInfo
,
));
final
OperationResult
result
=
await
residentRunner
.
restart
(
fullRestart:
false
);
expect
(
result
.
fatal
,
false
);
expect
(
result
.
code
,
0
);
expect
(
verify
(
flutterUsage
.
sendEvent
(
'hot'
,
'reload'
,
parameters:
captureAnyNamed
(
'parameters'
))).
captured
[
0
],
containsPair
(
cdKey
(
CustomDimensions
.
hotEventTargetPlatform
),
getNameForTargetPlatform
(
TargetPlatform
.
android_arm
))
);
},
overrides:
<
Type
,
Generator
>{
Usage:
()
=>
MockUsage
(),
}));
test
(
'ResidentRunner Can handle an RPC exception from hot restart'
,
()
=>
testbed
.
run
(()
async
{
when
(
mockDevice
.
sdkNameAndVersion
).
thenAnswer
((
Invocation
invocation
)
async
{
return
'Example'
;
...
...
@@ -206,10 +256,11 @@ void main() {
expect
(
result
.
fatal
,
true
);
expect
(
result
.
code
,
1
);
verify
(
flutterUsage
.
sendEvent
(
'hot'
,
'exception'
,
parameters:
<
String
,
String
>{
reloadExceptionTargetPlatform:
getNameForTargetPlatform
(
TargetPlatform
.
android_arm
),
reloadExceptionSdkName:
'Example'
,
reloadExceptionEmulator:
'false'
,
reloadExceptionFullRestart:
'true'
,
cdKey
(
CustomDimensions
.
hotEventTargetPlatform
):
getNameForTargetPlatform
(
TargetPlatform
.
android_arm
),
cdKey
(
CustomDimensions
.
hotEventSdkName
):
'Example'
,
cdKey
(
CustomDimensions
.
hotEventEmulator
):
'false'
,
cdKey
(
CustomDimensions
.
hotEventFullRestart
):
'true'
,
})).
called
(
1
);
},
overrides:
<
Type
,
Generator
>{
Usage:
()
=>
MockUsage
(),
...
...
packages/flutter_tools/test/general.shard/runner/flutter_command_test.dart
View file @
ef146f63
...
...
@@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/base/time.dart'
;
import
'package:flutter_tools/src/reporting/usage.dart'
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/base/time.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/reporting/reporting.dart'
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:flutter_tools/src/version.dart'
;
import
'package:mockito/mockito.dart'
;
...
...
packages/flutter_tools/test/general.shard/runner/utils.dart
View file @
ef146f63
...
...
@@ -5,7 +5,7 @@
import
'dart:async'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:mockito/mockito.dart'
;
...
...
packages/flutter_tools/test/src/common.dart
View file @
ef146f63
...
...
@@ -5,9 +5,6 @@
import
'dart:async'
;
import
'package:args/command_runner.dart'
;
import
'package:test_api/test_api.dart'
hide
TypeMatcher
,
isInstanceOf
;
import
'package:test_api/test_api.dart'
as
test_package
show
TypeMatcher
;
import
'package:flutter_tools/src/base/common.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
...
...
@@ -15,6 +12,8 @@ import 'package:flutter_tools/src/base/process.dart';
import
'package:flutter_tools/src/commands/create.dart'
;
import
'package:flutter_tools/src/runner/flutter_command.dart'
;
import
'package:flutter_tools/src/runner/flutter_command_runner.dart'
;
import
'package:test_api/test_api.dart'
as
test_package
show
TypeMatcher
;
import
'package:test_api/test_api.dart'
hide
TypeMatcher
,
isInstanceOf
;
export
'package:test_core/test_core.dart'
hide
TypeMatcher
,
isInstanceOf
;
// Defines a 'package:test' shim.
...
...
packages/flutter_tools/test/src/context.dart
View file @
ef146f63
...
...
@@ -13,15 +13,15 @@ import 'package:flutter_tools/src/base/io.dart';
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/os.dart'
;
import
'package:flutter_tools/src/base/terminal.dart'
;
import
'package:flutter_tools/src/base/time.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/context_runner.dart'
;
import
'package:flutter_tools/src/device.dart'
;
import
'package:flutter_tools/src/doctor.dart'
;
import
'package:flutter_tools/src/ios/simulators.dart'
;
import
'package:flutter_tools/src/ios/xcodeproj.dart'
;
import
'package:flutter_tools/src/base/time.dart'
;
import
'package:flutter_tools/src/project.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:flutter_tools/src/version.dart'
;
import
'package:meta/meta.dart'
;
import
'package:mockito/mockito.dart'
;
...
...
packages/flutter_tools/test/src/testbed.dart
View file @
ef146f63
...
...
@@ -8,17 +8,17 @@ import 'dart:io';
import
'dart:typed_data'
;
import
'package:file/memory.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/os.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/context.dart'
;
import
'package:flutter_tools/src/base/file_system.dart'
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/base/logger.dart'
;
import
'package:flutter_tools/src/base/os.dart'
;
import
'package:flutter_tools/src/base/platform.dart'
;
import
'package:flutter_tools/src/base/terminal.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/context_runner.dart'
;
import
'package:flutter_tools/src/features.dart'
;
import
'package:flutter_tools/src/reporting/
usage
.dart'
;
import
'package:flutter_tools/src/reporting/
reporting
.dart'
;
import
'package:flutter_tools/src/version.dart'
;
import
'context.dart'
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment