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
0b93a921
Unverified
Commit
0b93a921
authored
Apr 22, 2020
by
Jonah Williams
Committed by
GitHub
Apr 22, 2020
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[flutter_tools] default tree-shake-icons to enabled and improve performance (#54923)
parent
7eb8873a
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
202 additions
and
100 deletions
+202
-100
pubspec.yaml
dev/benchmarks/macrobenchmarks/pubspec.yaml
+2
-1
assets.dart
...es/flutter_tools/lib/src/build_system/targets/assets.dart
+2
-2
icon_tree_shaker.dart
..._tools/lib/src/build_system/targets/icon_tree_shaker.dart
+29
-16
build_bundle_test.dart
...ools/test/commands.shard/permeable/build_bundle_test.dart
+1
-1
icon_tree_shaker_test.dart
...ral.shard/build_system/targets/icon_tree_shaker_test.dart
+155
-79
build_aot_test.dart
...ter_tools/test/general.shard/commands/build_aot_test.dart
+1
-1
build_apk_test.dart
...ter_tools/test/general.shard/commands/build_apk_test.dart
+7
-0
build_appbundle_test.dart
...ols/test/general.shard/commands/build_appbundle_test.dart
+5
-0
No files found.
dev/benchmarks/macrobenchmarks/pubspec.yaml
View file @
0b93a921
...
...
@@ -16,6 +16,7 @@ dependencies:
# and run
# flutter update-packages --force-upgrade
flutter_gallery_assets
:
0.1.9+2
cupertino_icons
:
0.1.3
archive
:
2.0.13
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
args
:
1.6.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...
...
@@ -91,4 +92,4 @@ flutter:
-
packages/flutter_gallery_assets/food/cherry_pie.png
-
assets/999x1000.png
# PUBSPEC CHECKSUM:
3a55
# PUBSPEC CHECKSUM:
49fa
packages/flutter_tools/lib/src/build_system/targets/assets.dart
View file @
0b93a921
...
...
@@ -60,9 +60,9 @@ Future<Depfile> copyAssets(Environment environment, Directory outputDirectory) a
file
.
parent
.
createSync
(
recursive:
true
);
final
DevFSContent
content
=
entry
.
value
;
if
(
content
is
DevFSFileContent
&&
content
.
file
is
File
)
{
inputs
.
add
(
globals
.
fs
.
file
(
content
.
file
.
path
)
);
inputs
.
add
(
content
.
file
as
File
);
if
(!
await
iconTreeShaker
.
subsetFont
(
input
Path:
content
.
file
.
path
,
input
:
content
.
file
as
File
,
outputPath:
file
.
path
,
relativePath:
entry
.
key
,
))
{
...
...
packages/flutter_tools/lib/src/build_system/targets/icon_tree_shaker.dart
View file @
0b93a921
...
...
@@ -4,6 +4,7 @@
import
'package:meta/meta.dart'
;
import
'package:process/process.dart'
;
import
'package:mime/mime.dart'
as
mime
;
import
'../../artifacts.dart'
;
import
'../../base/common.dart'
;
...
...
@@ -20,7 +21,7 @@ import 'dart.dart';
const
String
kIconTreeShakerFlag
=
'TreeShakeIcons'
;
/// Whether icon font subsetting is enabled by default.
const
bool
kIconTreeShakerEnabledDefault
=
fals
e
;
const
bool
kIconTreeShakerEnabledDefault
=
tru
e
;
List
<
Map
<
String
,
dynamic
>>
_getList
(
dynamic
object
,
String
errorMessage
)
{
try
{
...
...
@@ -66,6 +67,12 @@ class IconTreeShaker {
}
}
/// The MIME type for ttf fonts.
static
const
Set
<
String
>
kTtfMimeTypes
=
<
String
>{
'font/ttf'
,
// based on internet search
'application/x-font-ttf'
,
// based on running locally.
};
/// The [Source] inputs that targets using this should depend on.
///
/// See [Target.inputs].
...
...
@@ -77,6 +84,7 @@ class IconTreeShaker {
final
Environment
_environment
;
final
String
_fontManifest
;
Future
<
void
>
_iconDataProcessing
;
Map
<
String
,
_IconTreeShakerData
>
_iconData
;
final
ProcessManager
_processManager
;
...
...
@@ -89,10 +97,10 @@ class IconTreeShaker {
&&
_environment
.
defines
[
kIconTreeShakerFlag
]
==
'true'
&&
_environment
.
defines
[
kBuildMode
]
!=
'debug'
;
//
/
Fills the [_iconData] map.
Future
<
Map
<
String
,
_IconTreeShakerData
>
>
_getIconData
(
Environment
environment
)
async
{
// Fills the [_iconData] map.
Future
<
void
>
_getIconData
(
Environment
environment
)
async
{
if
(!
enabled
)
{
return
null
;
return
;
}
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
);
...
...
@@ -135,13 +143,11 @@ class IconTreeShaker {
codePoints:
iconData
[
entry
.
key
],
);
}
return
result
;
_iconData
=
result
;
}
/// Calls font-subset, which transforms the `inputPath` font file to a
/// subsetted version at `outputPath`.
///
/// The `relativePath` parameter
/// Calls font-subset, which transforms the [input] font file to a
/// subsetted version at [outputPath].
///
/// All parameters are required.
///
...
...
@@ -150,15 +156,24 @@ class IconTreeShaker {
/// If the font-subset subprocess fails, it will [throwToolExit].
/// Otherwise, it will return true.
Future
<
bool
>
subsetFont
({
@required
String
inputPath
,
@required
File
input
,
@required
String
outputPath
,
@required
String
relativePath
,
})
async
{
if
(!
enabled
)
{
return
false
;
}
_iconData
??=
await
_getIconData
(
_environment
);
if
(
input
.
lengthSync
()
<
12
)
{
return
false
;
}
final
String
mimeType
=
mime
.
lookupMimeType
(
input
.
path
,
headerBytes:
await
input
.
openRead
(
0
,
12
).
first
,
);
if
(!
kTtfMimeTypes
.
contains
(
mimeType
))
{
return
false
;
}
await
(
_iconDataProcessing
??=
_getIconData
(
_environment
));
assert
(
_iconData
!=
null
);
final
_IconTreeShakerData
iconTreeShakerData
=
_iconData
[
relativePath
];
...
...
@@ -176,7 +191,7 @@ class IconTreeShaker {
final
List
<
String
>
cmd
=
<
String
>[
fontSubset
.
path
,
outputPath
,
input
P
ath
,
input
.
p
ath
,
];
final
String
codePoints
=
iconTreeShakerData
.
codePoints
.
join
(
' '
);
_logger
.
printTrace
(
'Running font-subset:
${cmd.join(' ')}
, '
...
...
@@ -186,9 +201,7 @@ class IconTreeShaker {
fontSubsetProcess
.
stdin
.
writeln
(
codePoints
);
await
fontSubsetProcess
.
stdin
.
flush
();
await
fontSubsetProcess
.
stdin
.
close
();
}
on
Exception
catch
(
_
)
{
// handled by checking the exit code.
}
on
OSError
catch
(
_
)
{
// ignore: dead_code_on_catch_subtype
}
on
Exception
{
// handled by checking the exit code.
}
...
...
packages/flutter_tools/test/commands.shard/permeable/build_bundle_test.dart
View file @
0b93a921
...
...
@@ -219,7 +219,7 @@ void main() {
kBuildMode:
'debug'
,
kTargetPlatform:
'android-arm'
,
kTrackWidgetCreation:
'true'
,
kIconTreeShakerFlag:
null
,
kIconTreeShakerFlag:
'true'
,
});
return
BuildResult
(
success:
true
);
...
...
packages/flutter_tools/test/general.shard/build_system/targets/icon_tree_shaker_test.dart
View file @
0b93a921
...
...
@@ -23,38 +23,39 @@ import '../../../src/common.dart';
import
'../../../src/context.dart'
;
import
'../../../src/mocks.dart'
as
mocks
;
final
Platform
_kNoAnsiPlatform
=
FakePlatform
(
stdoutSupportsAnsi:
false
);
final
Platform
kNoAnsiPlatform
=
FakePlatform
(
stdoutSupportsAnsi:
false
);
const
List
<
int
>
_kTtfHeaderBytes
=
<
int
>[
0
,
1
,
0
,
0
,
0
,
15
,
0
,
128
,
0
,
3
,
0
,
112
];
const
String
dartPath
=
'/flutter/dart'
;
const
String
constFinderPath
=
'/flutter/const_finder.snapshot.dart'
;
const
String
fontSubsetPath
=
'/flutter/font-subset'
;
const
String
inputPath
=
'/input/fonts/MaterialIcons-Regular.ttf'
;
const
String
outputPath
=
'/output/fonts/MaterialIcons-Regular.ttf'
;
const
String
relativePath
=
'fonts/MaterialIcons-Regular.ttf'
;
List
<
String
>
getConstFinderArgs
(
String
appDillPath
)
=>
<
String
>[
dartPath
,
constFinderPath
,
'--kernel-file'
,
appDillPath
,
'--class-library-uri'
,
'package:flutter/src/widgets/icon_data.dart'
,
'--class-name'
,
'IconData'
,
];
const
List
<
String
>
fontSubsetArgs
=
<
String
>[
fontSubsetPath
,
outputPath
,
inputPath
,
];
void
main
(
)
{
BufferLogger
logger
;
MemoryFileSystem
f
s
;
MemoryFileSystem
f
ileSystem
;
MockProcessManager
mockProcessManager
;
MockProcess
fontSubsetProcess
;
MockArtifacts
mockArtifacts
;
DevFSStringContent
fontManifestContent
;
const
String
dartPath
=
'/flutter/dart'
;
const
String
constFinderPath
=
'/flutter/const_finder.snapshot.dart'
;
const
String
fontSubsetPath
=
'/flutter/font-subset'
;
const
String
inputPath
=
'/input/fonts/MaterialIcons-Regular.ttf'
;
const
String
outputPath
=
'/output/fonts/MaterialIcons-Regular.ttf'
;
const
String
relativePath
=
'fonts/MaterialIcons-Regular.ttf'
;
List
<
String
>
getConstFinderArgs
(
String
appDillPath
)
=>
<
String
>[
dartPath
,
constFinderPath
,
'--kernel-file'
,
appDillPath
,
'--class-library-uri'
,
'package:flutter/src/widgets/icon_data.dart'
,
'--class-name'
,
'IconData'
,
];
const
List
<
String
>
fontSubsetArgs
=
<
String
>[
fontSubsetPath
,
outputPath
,
inputPath
,
];
void
_addConstFinderInvocation
(
String
appDillPath
,
{
int
exitCode
=
0
,
...
...
@@ -89,19 +90,21 @@ void main() {
mockProcessManager
=
MockProcessManager
();
fontSubsetProcess
=
MockProcess
();
mockArtifacts
=
MockArtifacts
();
fs
=
MemoryFileSystem
();
fileSystem
=
MemoryFileSystem
();
logger
=
BufferLogger
(
terminal:
AnsiTerminal
(
stdio:
mocks
.
MockStdio
(),
platform:
_
kNoAnsiPlatform
,
platform:
kNoAnsiPlatform
,
),
outputPreferences:
OutputPreferences
.
test
(
showColor:
false
),
);
fs
.
file
(
constFinderPath
).
createSync
(
recursive:
true
);
fs
.
file
(
dartPath
).
createSync
(
recursive:
true
);
fs
.
file
(
fontSubsetPath
).
createSync
(
recursive:
true
);
fileSystem
.
file
(
constFinderPath
).
createSync
(
recursive:
true
);
fileSystem
.
file
(
dartPath
).
createSync
(
recursive:
true
);
fileSystem
.
file
(
fontSubsetPath
).
createSync
(
recursive:
true
);
fileSystem
.
file
(
inputPath
)
..
createSync
(
recursive:
true
)
..
writeAsBytesSync
(
_kTtfHeaderBytes
);
when
(
mockArtifacts
.
getArtifactPath
(
Artifact
.
constFinder
)).
thenReturn
(
constFinderPath
);
when
(
mockArtifacts
.
getArtifactPath
(
Artifact
.
fontSubset
)).
thenReturn
(
fontSubsetPath
);
when
(
mockArtifacts
.
getArtifactPath
(
Artifact
.
engineDartBinary
)).
thenReturn
(
dartPath
);
...
...
@@ -109,11 +112,11 @@ void main() {
Environment
_createEnvironment
(
Map
<
String
,
String
>
defines
)
{
return
Environment
.
test
(
f
s
.
directory
(
'/icon_test'
)..
createSync
(
recursive:
true
),
f
ileSystem
.
directory
(
'/icon_test'
)..
createSync
(
recursive:
true
),
defines:
defines
,
artifacts:
mockArtifacts
,
processManager:
FakeProcessManager
.
any
(),
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
logger:
BufferLogger
.
test
(),
);
}
...
...
@@ -129,18 +132,19 @@ void main() {
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
expect
(
logger
.
errorText
,
'Font subetting is not supported in debug mode. The --tree-shake-icons flag will be ignored.
\n
'
,
'Font subetting is not supported in debug mode. The --tree-shake-icons'
' flag will be ignored.
\n
'
,
);
expect
(
iconTreeShaker
.
enabled
,
false
);
final
bool
subsets
=
await
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
);
...
...
@@ -161,7 +165,7 @@ void main() {
null
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
...
...
@@ -185,7 +189,7 @@ void main() {
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
...
...
@@ -209,13 +213,13 @@ void main() {
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
expect
(
()
=>
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
()
async
=>
await
iconTreeShaker
.
subsetFont
(
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
),
...
...
@@ -223,20 +227,20 @@ void main() {
);
});
testWithoutContext
(
'
The happy path
'
,
()
async
{
testWithoutContext
(
'
Can subset a font
'
,
()
async
{
final
Environment
environment
=
_createEnvironment
(<
String
,
String
>{
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
fs
.
file
(
inputPath
)
.
createSync
(
recursive:
true
);
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
.
.
createSync
(
recursive:
true
);
final
IconTreeShaker
iconTreeShaker
=
IconTreeShaker
(
environment
,
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
...
...
@@ -245,7 +249,7 @@ void main() {
_resetFontSubsetInvocation
(
stdinSink:
stdinSink
);
bool
subsetted
=
await
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
);
...
...
@@ -254,7 +258,7 @@ void main() {
expect
(
subsetted
,
true
);
subsetted
=
await
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
);
...
...
@@ -265,33 +269,104 @@ void main() {
verify
(
mockProcessManager
.
start
(
fontSubsetArgs
)).
called
(
2
);
});
testWithoutContext
(
'Does not subset a non-ttf font'
,
()
async
{
final
Environment
environment
=
_createEnvironment
(<
String
,
String
>{
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
final
IconTreeShaker
iconTreeShaker
=
IconTreeShaker
(
environment
,
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
fileSystem
,
artifacts:
mockArtifacts
,
);
final
mocks
.
CompleterIOSink
stdinSink
=
mocks
.
CompleterIOSink
();
_addConstFinderInvocation
(
appDill
.
path
,
stdout:
validConstFinderResult
);
_resetFontSubsetInvocation
(
stdinSink:
stdinSink
);
final
File
notAFont
=
fileSystem
.
file
(
'input/foo/bar.txt'
)
..
createSync
(
recursive:
true
)
..
writeAsStringSync
(
'I could not think of a better string'
);
final
bool
subsetted
=
await
iconTreeShaker
.
subsetFont
(
input:
notAFont
,
outputPath:
outputPath
,
relativePath:
relativePath
,
);
expect
(
subsetted
,
false
);
verifyNever
(
mockProcessManager
.
run
(
getConstFinderArgs
(
appDill
.
path
)));
verifyNever
(
mockProcessManager
.
start
(
fontSubsetArgs
));
});
testWithoutContext
(
'Does not subset an invalid ttf font'
,
()
async
{
final
Environment
environment
=
_createEnvironment
(<
String
,
String
>{
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
final
IconTreeShaker
iconTreeShaker
=
IconTreeShaker
(
environment
,
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
fileSystem
,
artifacts:
mockArtifacts
,
);
final
mocks
.
CompleterIOSink
stdinSink
=
mocks
.
CompleterIOSink
();
_addConstFinderInvocation
(
appDill
.
path
,
stdout:
validConstFinderResult
);
_resetFontSubsetInvocation
(
stdinSink:
stdinSink
);
final
File
notAFont
=
fileSystem
.
file
(
inputPath
)
..
writeAsBytesSync
(<
int
>[
0
,
1
,
2
]);
final
bool
subsetted
=
await
iconTreeShaker
.
subsetFont
(
input:
notAFont
,
outputPath:
outputPath
,
relativePath:
relativePath
,
);
expect
(
subsetted
,
false
);
verifyNever
(
mockProcessManager
.
run
(
getConstFinderArgs
(
appDill
.
path
)));
verifyNever
(
mockProcessManager
.
start
(
fontSubsetArgs
));
});
testWithoutContext
(
'Non-constant instances'
,
()
async
{
final
Environment
environment
=
_createEnvironment
(<
String
,
String
>{
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
fs
.
file
(
inputPath
)
.
createSync
(
recursive:
true
);
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
.
.
createSync
(
recursive:
true
);
final
IconTreeShaker
iconTreeShaker
=
IconTreeShaker
(
environment
,
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
_addConstFinderInvocation
(
appDill
.
path
,
stdout:
constFinderResultWithInvalid
);
expect
(
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
await
expectLater
(
()
async
=>
await
iconTreeShaker
.
subsetFont
(
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
),
throwsToolExit
(
message:
'Avoid non-constant invocations of IconData or try to build again with --no-tree-shake-icons.'
,
message:
'Avoid non-constant invocations of IconData or try to build'
' again with --no-tree-shake-icons.'
,
),
);
...
...
@@ -304,15 +379,16 @@ void main() {
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)..
createSync
(
recursive:
true
);
fs
.
file
(
inputPath
).
createSync
(
recursive:
true
);
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
fileSystem
.
file
(
inputPath
).
createSync
(
recursive:
true
);
final
IconTreeShaker
iconTreeShaker
=
IconTreeShaker
(
environment
,
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
...
...
@@ -320,9 +396,9 @@ void main() {
_addConstFinderInvocation
(
appDill
.
path
,
stdout:
validConstFinderResult
);
_resetFontSubsetInvocation
(
exitCode:
-
1
,
stdinSink:
stdinSink
);
expect
(
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
await
expectLater
(
()
async
=>
await
iconTreeShaker
.
subsetFont
(
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
),
...
...
@@ -330,7 +406,7 @@ void main() {
);
verify
(
mockProcessManager
.
run
(
getConstFinderArgs
(
appDill
.
path
))).
called
(
1
);
verify
Never
(
mockProcessManager
.
start
(
fontSubsetArgs
)
);
verify
(
mockProcessManager
.
start
(
fontSubsetArgs
)).
called
(
1
);
});
testWithoutContext
(
'font-subset throws on write to sdtin'
,
()
async
{
...
...
@@ -338,15 +414,15 @@ void main() {
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
fs
.
file
(
inputPath
)
.
createSync
(
recursive:
true
);
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
.
.
createSync
(
recursive:
true
);
final
IconTreeShaker
iconTreeShaker
=
IconTreeShaker
(
environment
,
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
...
...
@@ -354,9 +430,9 @@ void main() {
_addConstFinderInvocation
(
appDill
.
path
,
stdout:
validConstFinderResult
);
_resetFontSubsetInvocation
(
exitCode:
-
1
,
stdinSink:
stdinSink
);
expect
(
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
await
expectLater
(
()
async
=>
await
iconTreeShaker
.
subsetFont
(
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
),
...
...
@@ -364,7 +440,7 @@ void main() {
);
verify
(
mockProcessManager
.
run
(
getConstFinderArgs
(
appDill
.
path
))).
called
(
1
);
verify
Never
(
mockProcessManager
.
start
(
fontSubsetArgs
)
);
verify
(
mockProcessManager
.
start
(
fontSubsetArgs
)).
called
(
1
);
});
testWithoutContext
(
'Invalid font manifest'
,
()
async
{
...
...
@@ -372,8 +448,8 @@ void main() {
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
fs
.
file
(
inputPath
)
.
createSync
(
recursive:
true
);
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
.
.
createSync
(
recursive:
true
);
fontManifestContent
=
DevFSStringContent
(
invalidFontManifestJson
);
...
...
@@ -382,15 +458,15 @@ void main() {
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
_addConstFinderInvocation
(
appDill
.
path
,
stdout:
validConstFinderResult
);
expect
(
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
await
expectLater
(
()
async
=>
await
iconTreeShaker
.
subsetFont
(
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
),
...
...
@@ -406,8 +482,8 @@ void main() {
kIconTreeShakerFlag:
'true'
,
kBuildMode:
'release'
,
});
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
..
createSync
(
recursive:
true
);
fs
.
file
(
inputPath
)
.
createSync
(
recursive:
true
);
final
File
appDill
=
environment
.
buildDir
.
childFile
(
'app.dill'
)
.
.
createSync
(
recursive:
true
);
fontManifestContent
=
DevFSStringContent
(
invalidFontManifestJson
);
...
...
@@ -416,15 +492,15 @@ void main() {
fontManifestContent
,
logger:
logger
,
processManager:
mockProcessManager
,
fileSystem:
f
s
,
fileSystem:
f
ileSystem
,
artifacts:
mockArtifacts
,
);
_addConstFinderInvocation
(
appDill
.
path
,
exitCode:
-
1
);
expect
(
iconTreeShaker
.
subsetFont
(
input
Path:
inputPath
,
await
expectLater
(
()
async
=>
await
iconTreeShaker
.
subsetFont
(
input
:
fileSystem
.
file
(
inputPath
)
,
outputPath:
outputPath
,
relativePath:
relativePath
,
),
...
...
packages/flutter_tools/test/general.shard/commands/build_aot_test.dart
View file @
0b93a921
...
...
@@ -110,7 +110,7 @@ void main() {
testUsingContext
(
'build aot outputs timing info'
,
()
async
{
globals
.
fs
.
file
(
'.dart_tool/flutter_build/
0c21fd4ab3b8bde8b385ff01d08e0093
/app.so'
)
.
file
(
'.dart_tool/flutter_build/
3f206b606f73e08587a94405f2e86fad
/app.so'
)
.
createSync
(
recursive:
true
);
when
(
globals
.
buildSystem
.
build
(
any
,
any
))
.
thenAnswer
((
Invocation
invocation
)
async
{
...
...
packages/flutter_tools/test/general.shard/commands/build_apk_test.dart
View file @
0b93a921
...
...
@@ -238,6 +238,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=true'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -267,6 +268,7 @@ void main() {
'-Ptrack-widget-creation=true'
,
'-Pshrink=true'
,
'-Psplit-debug-info=
${tempDir.path}
'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -299,6 +301,7 @@ void main() {
'-Ptrack-widget-creation=true'
,
'-Pextra-front-end-options=foo,bar'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -329,6 +332,7 @@ void main() {
'-Ptarget-platform=android-arm,android-arm64,android-x64'
,
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -353,6 +357,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=true'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -414,6 +419,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=true'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -465,6 +471,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=true'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
packages/flutter_tools/test/general.shard/commands/build_appbundle_test.dart
View file @
0b93a921
...
...
@@ -225,6 +225,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=false'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'bundleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -257,6 +258,7 @@ void main() {
'-Ptarget-platform=android-arm,android-arm64,android-x64'
,
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=false'
,
'-Ptree-shake-icons=true'
,
'bundleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -281,6 +283,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=false'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'bundleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -342,6 +345,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=false'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
@@ -393,6 +397,7 @@ void main() {
'-Ptarget=
${globals.fs.path.join(tempDir.path, 'flutter_project', 'lib', 'main.dart')}
'
,
'-Ptrack-widget-creation=false'
,
'-Pshrink=true'
,
'-Ptree-shake-icons=true'
,
'assembleRelease'
,
],
workingDirectory:
anyNamed
(
'workingDirectory'
),
...
...
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