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
ff2dde2c
Unverified
Commit
ff2dde2c
authored
3 years ago
by
xster
Committed by
GitHub
3 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Reland double gzip wrapping NOTICES to reduce on-disk installed space (#80897)
parent
a8e41f82
Changes
19
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
202 additions
and
13 deletions
+202
-13
pubspec.yaml
dev/bots/pubspec.yaml
+2
-1
module_test.dart
dev/devicelab/bin/tasks/module_test.dart
+21
-0
module_test_ios.dart
dev/devicelab/bin/tasks/module_test_ios.dart
+26
-0
apk_utils.dart
dev/devicelab/lib/framework/apk_utils.dart
+1
-1
perf_tests.dart
dev/devicelab/lib/tasks/perf_tests.dart
+1
-1
pubspec.yaml
dev/devicelab/pubspec.yaml
+3
-2
binding.dart
packages/flutter/lib/src/services/binding.dart
+17
-1
asset_bundle_test.dart
packages/flutter/test/services/asset_bundle_test.dart
+1
-1
binding_test.dart
packages/flutter/test/services/binding_test.dart
+13
-0
fuchsia_asset_builder.dart
packages/flutter_tools/bin/fuchsia_asset_builder.dart
+2
-0
asset.dart
packages/flutter_tools/lib/src/asset.dart
+39
-2
io.dart
packages/flutter_tools/lib/src/base/io.dart
+2
-1
assets.dart
...es/flutter_tools/lib/src/build_system/targets/assets.dart
+1
-0
bundle.dart
packages/flutter_tools/lib/src/bundle.dart
+2
-0
devfs.dart
packages/flutter_tools/lib/src/devfs.dart
+55
-0
resident_web_runner.dart
...s/flutter_tools/lib/src/isolated/resident_web_runner.dart
+4
-1
assets_test.dart
.../test/general.shard/build_system/targets/assets_test.dart
+1
-1
devfs_test.dart
packages/flutter_tools/test/general.shard/devfs_test.dart
+10
-0
install_manifest_test.dart
...ols/test/general.shard/windows/install_manifest_test.dart
+1
-1
No files found.
dev/bots/pubspec.yaml
View file @
ff2dde2c
...
...
@@ -18,6 +18,7 @@ dependencies:
_fe_analyzer_shared
:
21.0.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
analyzer
:
1.5.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
archive
:
3.1.2
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
async
:
2.5.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
boolean_selector
:
2.1.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
charcode
:
1.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...
...
@@ -61,4 +62,4 @@ dependencies:
dev_dependencies
:
test_api
:
0.3.0
# PUBSPEC CHECKSUM:
4292
# PUBSPEC CHECKSUM:
a6c4
This diff is collapsed.
Click to expand it.
dev/devicelab/bin/tasks/module_test.dart
View file @
ff2dde2c
...
...
@@ -2,8 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:convert'
;
import
'dart:io'
;
import
'dart:typed_data'
;
import
'package:archive/archive.dart'
;
import
'package:flutter_devicelab/framework/apk_utils.dart'
;
import
'package:flutter_devicelab/framework/framework.dart'
;
import
'package:flutter_devicelab/framework/task_result.dart'
;
...
...
@@ -314,6 +317,24 @@ Future<void> main() async {
'lib/armeabi-v7a/libflutter.so'
,
],
await
getFilesInApk
(
releaseHostApk
));
section
(
'Check the NOTICE file is correct'
);
await
inDirectory
(
hostApp
,
()
async
{
final
File
apkFile
=
File
(
releaseHostApk
);
final
Archive
apk
=
ZipDecoder
().
decodeBytes
(
apkFile
.
readAsBytesSync
());
// Shouldn't be missing since we already checked it exists above.
final
ArchiveFile
noticesFile
=
apk
.
findFile
(
'assets/flutter_assets/NOTICES.Z'
);
final
Uint8List
licenseData
=
noticesFile
.
content
as
Uint8List
;
if
(
licenseData
==
null
)
{
return
TaskResult
.
failure
(
'Invalid license file.'
);
}
final
String
licenseString
=
utf8
.
decode
(
gzip
.
decode
(
licenseData
));
if
(!
licenseString
.
contains
(
'skia'
)
||
!
licenseString
.
contains
(
'Flutter Authors'
))
{
return
TaskResult
.
failure
(
'License content missing.'
);
}
});
section
(
'Check release AndroidManifest.xml'
);
final
String
androidManifestRelease
=
await
getAndroidManifest
(
debugHostApk
);
...
...
This diff is collapsed.
Click to expand it.
dev/devicelab/bin/tasks/module_test_ios.dart
View file @
ff2dde2c
...
...
@@ -2,7 +2,9 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:convert'
;
import
'dart:io'
;
import
'dart:typed_data'
;
import
'package:flutter_devicelab/framework/framework.dart'
;
import
'package:flutter_devicelab/framework/host_agent.dart'
;
...
...
@@ -214,6 +216,8 @@ Future<void> main() async {
final
File
objectiveCAnalyticsOutputFile
=
File
(
path
.
join
(
tempDir
.
path
,
'analytics-objc.log'
));
final
Directory
objectiveCBuildDirectory
=
Directory
(
path
.
join
(
tempDir
.
path
,
'build-objc'
));
section
(
'Build iOS Objective-C host app'
);
await
inDirectory
(
objectiveCHostApp
,
()
async
{
await
exec
(
'pod'
,
...
...
@@ -282,6 +286,28 @@ Future<void> main() async {
'isolate_snapshot_data'
,
));
section
(
'Check the NOTICE file is correct'
);
final
String
licenseFilePath
=
path
.
join
(
objectiveCBuildDirectory
.
path
,
'Host.app'
,
'Frameworks'
,
'App.framework'
,
'flutter_assets'
,
'NOTICES.Z'
,
);
checkFileExists
(
licenseFilePath
);
await
inDirectory
(
objectiveCBuildDirectory
,
()
async
{
final
Uint8List
licenseData
=
File
(
licenseFilePath
).
readAsBytesSync
();
final
String
licenseString
=
utf8
.
decode
(
gzip
.
decode
(
licenseData
));
if
(!
licenseString
.
contains
(
'skia'
)
||
!
licenseString
.
contains
(
'Flutter Authors'
))
{
return
TaskResult
.
failure
(
'License content missing'
);
}
});
section
(
'Check that the host build sends the correct analytics'
);
final
String
objectiveCAnalyticsOutput
=
objectiveCAnalyticsOutputFile
.
readAsStringSync
();
if
(!
objectiveCAnalyticsOutput
.
contains
(
'cd24: ios'
)
||
!
objectiveCAnalyticsOutput
.
contains
(
'cd25: true'
)
...
...
This diff is collapsed.
Click to expand it.
dev/devicelab/lib/framework/apk_utils.dart
View file @
ff2dde2c
...
...
@@ -13,7 +13,7 @@ final String platformLineSep = Platform.isWindows ? '\r\n' : '\n';
final
List
<
String
>
flutterAssets
=
<
String
>[
'assets/flutter_assets/AssetManifest.json'
,
'assets/flutter_assets/NOTICES'
,
'assets/flutter_assets/NOTICES
.Z
'
,
'assets/flutter_assets/fonts/MaterialIcons-Regular.otf'
,
'assets/flutter_assets/packages/cupertino_icons/assets/CupertinoIcons.ttf'
,
];
...
...
This diff is collapsed.
Click to expand it.
dev/devicelab/lib/tasks/perf_tests.dart
View file @
ff2dde2c
...
...
@@ -1186,7 +1186,7 @@ class CompileTest {
final
_UnzipListEntry
libflutter
=
fileToMetadata
[
'lib/armeabi-v7a/libflutter.so'
];
final
_UnzipListEntry
libapp
=
fileToMetadata
[
'lib/armeabi-v7a/libapp.so'
];
final
_UnzipListEntry
license
=
fileToMetadata
[
'assets/flutter_assets/NOTICES'
];
final
_UnzipListEntry
license
=
fileToMetadata
[
'assets/flutter_assets/NOTICES
.Z
'
];
return
<
String
,
dynamic
>{
'libflutter_uncompressed_bytes'
:
libflutter
.
uncompressedSize
,
...
...
This diff is collapsed.
Click to expand it.
dev/devicelab/pubspec.yaml
View file @
ff2dde2c
...
...
@@ -7,6 +7,7 @@ environment:
sdk
:
"
>=2.3.0
<3.0.0"
dependencies
:
archive
:
3.1.2
args
:
2.1.0
file
:
6.1.0
http
:
0.13.1
...
...
@@ -20,6 +21,7 @@ dependencies:
charcode
:
1.2.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
collection
:
1.15.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto
:
3.0.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_parser
:
4.0.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
pedantic
:
1.11.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
source_span
:
1.8.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...
...
@@ -37,7 +39,6 @@ dev_dependencies:
cli_util
:
0.3.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
convert
:
3.0.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
coverage
:
1.0.2
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
crypto
:
3.0.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
glob
:
2.0.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
http_multi_server
:
3.0.1
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
io
:
1.0.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
...
...
@@ -63,4 +64,4 @@ dev_dependencies:
webkit_inspection_protocol
:
1.0.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
yaml
:
3.1.0
# THIS LINE IS AUTOGENERATED - TO UPDATE USE "flutter update-packages --force-upgrade"
# PUBSPEC CHECKSUM:
4292
# PUBSPEC CHECKSUM:
a6c4
This diff is collapsed.
Click to expand it.
packages/flutter/lib/src/services/binding.dart
View file @
ff2dde2c
...
...
@@ -4,6 +4,8 @@
import
'dart:async'
;
import
'dart:convert'
;
import
'dart:io'
;
import
'dart:typed_data'
;
import
'dart:ui'
as
ui
;
...
...
@@ -104,7 +106,21 @@ mixin ServicesBinding on BindingBase, SchedulerBinding {
// TODO(ianh): Remove this complexity once these bugs are fixed.
final
Completer
<
String
>
rawLicenses
=
Completer
<
String
>();
scheduleTask
(()
async
{
rawLicenses
.
complete
(
await
rootBundle
.
loadString
(
'NOTICES'
,
cache:
false
));
rawLicenses
.
complete
(
kIsWeb
// NOTICES for web isn't compressed since we don't have access to
// dart:io on the client side and it's already compressed between
// the server and client.
?
rootBundle
.
loadString
(
'NOTICES'
,
cache:
false
)
:
()
async
{
// The compressed version doesn't have a more common .gz extension
// because gradle for Android non-transparently manipulates .gz files.
final
ByteData
licenseBytes
=
await
rootBundle
.
load
(
'NOTICES.Z'
);
List
<
int
>
bytes
=
licenseBytes
.
buffer
.
asUint8List
();
bytes
=
gzip
.
decode
(
bytes
);
return
utf8
.
decode
(
bytes
);
}()
);
},
Priority
.
animation
);
await
rawLicenses
.
future
;
final
Completer
<
List
<
LicenseEntry
>>
parsedLicenses
=
Completer
<
List
<
LicenseEntry
>>();
...
...
This diff is collapsed.
Click to expand it.
packages/flutter/test/services/asset_bundle_test.dart
View file @
ff2dde2c
...
...
@@ -15,10 +15,10 @@ class TestAssetBundle extends CachingAssetBundle {
@override
Future
<
ByteData
>
load
(
String
key
)
async
{
loadCallCount
[
key
]
=
loadCallCount
[
key
]
??
0
+
1
;
if
(
key
==
'AssetManifest.json'
)
return
ByteData
.
view
(
Uint8List
.
fromList
(
const
Utf8Encoder
().
convert
(
'{"one": ["one"]}'
)).
buffer
);
loadCallCount
[
key
]
=
loadCallCount
[
key
]
??
0
+
1
;
if
(
key
==
'one'
)
return
ByteData
(
1
)..
setInt8
(
0
,
49
);
throw
FlutterError
(
'key not found'
);
...
...
This diff is collapsed.
Click to expand it.
packages/flutter/test/services/binding_test.dart
View file @
ff2dde2c
...
...
@@ -2,6 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import
'dart:convert'
;
import
'dart:io'
;
import
'dart:typed_data'
;
import
'package:flutter/foundation.dart'
;
import
'package:flutter/scheduler.dart'
;
import
'package:flutter/services.dart'
;
...
...
@@ -45,6 +49,15 @@ class TestBinding extends BindingBase with SchedulerBinding, ServicesBinding {
return
const
StringCodec
().
encodeMessage
(
licenses
);
}
return
null
;
})
..
setMockMessageHandler
(
'flutter/assets'
,
(
ByteData
?
message
)
async
{
if
(
const
StringCodec
().
decodeMessage
(
message
)
==
'NOTICES.Z'
&&
!
kIsWeb
)
{
return
Uint8List
.
fromList
(
gzip
.
encode
(
utf8
.
encode
(
licenses
))).
buffer
.
asByteData
();
}
if
(
const
StringCodec
().
decodeMessage
(
message
)
==
'NOTICES'
&&
kIsWeb
)
{
return
const
StringCodec
().
encodeMessage
(
licenses
);
}
return
null
;
});
}
}
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/bin/fuchsia_asset_builder.dart
View file @
ff2dde2c
...
...
@@ -10,6 +10,7 @@ import 'package:flutter_tools/src/base/context.dart';
import
'package:flutter_tools/src/base/file_system.dart'
as
libfs
;
import
'package:flutter_tools/src/base/io.dart'
;
import
'package:flutter_tools/src/bundle.dart'
;
import
'package:flutter_tools/src/build_info.dart'
;
import
'package:flutter_tools/src/cache.dart'
;
import
'package:flutter_tools/src/context_runner.dart'
;
import
'package:flutter_tools/src/devfs.dart'
;
...
...
@@ -61,6 +62,7 @@ Future<void> run(List<String> args) async {
manifestPath:
argResults
[
_kOptionManifest
]
as
String
??
defaultManifestPath
,
assetDirPath:
assetDir
,
packagesPath:
argResults
[
_kOptionPackages
]
as
String
,
targetPlatform:
TargetPlatform
.
fuchsia_arm64
// This is not arch specific.
);
if
(
assets
==
null
)
{
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/asset.dart
View file @
ff2dde2c
...
...
@@ -82,6 +82,7 @@ abstract class AssetBundle {
String
assetDirPath
,
@required
String
packagesPath
,
bool
deferredComponentsEnabled
=
false
,
TargetPlatform
targetPlatform
,
});
}
...
...
@@ -141,6 +142,13 @@ class ManifestAssetBundle implements AssetBundle {
static
const
String
_kAssetManifestJson
=
'AssetManifest.json'
;
static
const
String
_kNoticeFile
=
'NOTICES'
;
// Comically, this can't be name with the more common .gz file extension
// because when it's part of an AAR and brought into another APK via gradle,
// gradle individually traverses all the files of the AAR and unzips .gz
// files (b/37117906). A less common .Z extension still describes how the
// file is formatted if users want to manually inspect the application
// bundle and is recognized by default file handlers on OS such as macOS.˚
static
const
String
_kNoticeZippedFile
=
'NOTICES.Z'
;
@override
bool
wasBuiltOnce
()
=>
_lastBuildTimestamp
!=
null
;
...
...
@@ -180,6 +188,7 @@ class ManifestAssetBundle implements AssetBundle {
String
assetDirPath
,
@required
String
packagesPath
,
bool
deferredComponentsEnabled
=
false
,
TargetPlatform
targetPlatform
,
})
async
{
assetDirPath
??=
getAssetBuildDirectory
();
FlutterProject
flutterProject
;
...
...
@@ -407,7 +416,6 @@ class ManifestAssetBundle implements AssetBundle {
return
1
;
}
final
DevFSStringContent
licenses
=
DevFSStringContent
(
licenseResult
.
combinedLicenses
);
additionalDependencies
=
licenseResult
.
dependencies
;
if
(
wildcardDirectories
.
isNotEmpty
)
{
...
...
@@ -425,7 +433,7 @@ class ManifestAssetBundle implements AssetBundle {
_setIfChanged
(
_kAssetManifestJson
,
assetManifest
);
_setIfChanged
(
kFontManifestJson
,
fontManifest
);
_set
IfChanged
(
_kNoticeFile
,
licenses
);
_set
LicenseIfChanged
(
licenseResult
.
combinedLicenses
,
targetPlatform
);
return
0
;
}
...
...
@@ -443,6 +451,35 @@ class ManifestAssetBundle implements AssetBundle {
}
}
void
_setLicenseIfChanged
(
String
combinedLicenses
,
TargetPlatform
targetPlatform
,
)
{
// On the web, don't compress the NOTICES file since the client doesn't have
// dart:io to decompress it. So use the standard _setIfChanged to check if
// the strings still match.
if
(
targetPlatform
==
TargetPlatform
.
web_javascript
)
{
_setIfChanged
(
_kNoticeFile
,
DevFSStringContent
(
combinedLicenses
));
return
;
}
// On other platforms, let the NOTICES file be compressed. But use a
// specialized DevFSStringCompressingBytesContent class to compare
// the uncompressed strings to not incur decompression/decoding while making
// the comparison.
if
(!
entries
.
containsKey
(
_kNoticeZippedFile
)
||
!(
entries
[
_kNoticeZippedFile
]
as
DevFSStringCompressingBytesContent
)
.
equals
(
combinedLicenses
))
{
entries
[
_kNoticeZippedFile
]
=
DevFSStringCompressingBytesContent
(
combinedLicenses
,
// A zlib dictionary is a hinting string sequence with the most
// likely string occurrences at the end. This ends up just being
// common English words with domain specific words like copyright.
hintString:
'copyrightsoftwaretothisinandorofthe'
,
);
}
}
List
<
_Asset
>
_getMaterialAssets
()
{
final
List
<
_Asset
>
result
=
<
_Asset
>[];
for
(
final
Map
<
String
,
Object
>
family
in
kMaterialFonts
)
{
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/base/io.dart
View file @
ff2dde2c
...
...
@@ -102,7 +102,8 @@ export 'dart:io'
systemEncoding
,
WebSocket
,
WebSocketException
,
WebSocketTransformer
;
WebSocketTransformer
,
ZLibEncoder
;
/// Exits the process with the given [exitCode].
typedef
ExitFunction
=
void
Function
(
int
exitCode
);
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/build_system/targets/assets.dart
View file @
ff2dde2c
...
...
@@ -58,6 +58,7 @@ Future<Depfile> copyAssets(Environment environment, Directory outputDirectory, {
packagesPath:
environment
.
projectDir
.
childFile
(
'.packages'
).
path
,
assetDirPath:
null
,
deferredComponentsEnabled:
environment
.
defines
[
kDeferredComponents
]
==
'true'
,
targetPlatform:
targetPlatform
,
);
if
(
resultCode
!=
0
)
{
throw
Exception
(
'Failed to bundle asset files.'
);
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/bundle.dart
View file @
ff2dde2c
...
...
@@ -182,6 +182,7 @@ Future<AssetBundle> buildAssets({
String
manifestPath
,
String
assetDirPath
,
@required
String
packagesPath
,
TargetPlatform
targetPlatform
,
})
async
{
assetDirPath
??=
getAssetBuildDirectory
();
packagesPath
??=
globals
.
fs
.
path
.
absolute
(
packagesPath
);
...
...
@@ -192,6 +193,7 @@ Future<AssetBundle> buildAssets({
manifestPath:
manifestPath
,
assetDirPath:
assetDirPath
,
packagesPath:
packagesPath
,
targetPlatform:
targetPlatform
,
);
if
(
result
!=
0
)
{
return
null
;
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/devfs.dart
View file @
ff2dde2c
...
...
@@ -203,6 +203,61 @@ class DevFSStringContent extends DevFSByteContent {
}
}
/// A string compressing DevFSContent.
///
/// A specialized DevFSContent similar to DevFSByteContent where the contents
/// are the compressed bytes of a string. Its difference is that the original
/// uncompressed string can be compared with directly without the indirection
/// of a compute-expensive uncompress/decode and compress/encode to compare
/// the strings.
///
/// The `hintString` parameter is a zlib dictionary hinting mechanism to suggest
/// the most common string occurrences to potentially assist with compression.
class
DevFSStringCompressingBytesContent
extends
DevFSContent
{
DevFSStringCompressingBytesContent
(
this
.
_string
,
{
String
hintString
})
:
_compressor
=
ZLibEncoder
(
dictionary:
hintString
==
null
?
null
:
utf8
.
encode
(
hintString
),
gzip:
true
,
level:
9
,
);
final
String
_string
;
final
ZLibEncoder
_compressor
;
final
DateTime
_modificationTime
=
DateTime
.
now
();
List
<
int
>
_bytes
;
bool
_isModified
=
true
;
List
<
int
>
get
bytes
=>
_bytes
??=
_compressor
.
convert
(
utf8
.
encode
(
_string
));
/// Return true only once so that the content is written to the device only once.
@override
bool
get
isModified
{
final
bool
modified
=
_isModified
;
_isModified
=
false
;
return
modified
;
}
@override
bool
isModifiedAfter
(
DateTime
time
)
{
return
time
==
null
||
_modificationTime
.
isAfter
(
time
);
}
@override
int
get
size
=>
bytes
.
length
;
@override
Future
<
List
<
int
>>
contentsAsBytes
()
async
=>
bytes
;
@override
Stream
<
List
<
int
>>
contentsAsStream
()
=>
Stream
<
List
<
int
>>.
value
(
bytes
);
/// This checks the source string with another string.
bool
equals
(
String
string
)
=>
_string
==
string
;
}
class
DevFSException
implements
Exception
{
DevFSException
(
this
.
message
,
[
this
.
error
,
this
.
stackTrace
]);
final
String
message
;
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/lib/src/isolated/resident_web_runner.dart
View file @
ff2dde2c
...
...
@@ -483,7 +483,10 @@ class ResidentWebRunner extends ResidentRunner {
final
bool
rebuildBundle
=
assetBundle
.
needsBuild
();
if
(
rebuildBundle
)
{
_logger
.
printTrace
(
'Updating assets'
);
final
int
result
=
await
assetBundle
.
build
(
packagesPath:
debuggingOptions
.
buildInfo
.
packagesPath
);
final
int
result
=
await
assetBundle
.
build
(
packagesPath:
debuggingOptions
.
buildInfo
.
packagesPath
,
targetPlatform:
TargetPlatform
.
web_javascript
,
);
if
(
result
!=
0
)
{
return
UpdateFSReport
(
success:
false
);
}
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/build_system/targets/assets_test.dart
View file @
ff2dde2c
...
...
@@ -88,7 +88,7 @@ flutter:
expect
(
fileSystem
.
file
(
'
${environment.buildDir.path}
/flutter_assets/AssetManifest.json'
),
exists
);
expect
(
fileSystem
.
file
(
'
${environment.buildDir.path}
/flutter_assets/FontManifest.json'
),
exists
);
expect
(
fileSystem
.
file
(
'
${environment.buildDir.path}
/flutter_assets/NOTICES'
),
exists
);
expect
(
fileSystem
.
file
(
'
${environment.buildDir.path}
/flutter_assets/NOTICES
.Z
'
),
exists
);
// See https://github.com/flutter/flutter/issues/35293
expect
(
fileSystem
.
file
(
'
${environment.buildDir.path}
/flutter_assets/assets/foo/bar.png'
),
exists
);
// See https://github.com/flutter/flutter/issues/46163
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/devfs_test.dart
View file @
ff2dde2c
...
...
@@ -111,6 +111,16 @@ void main() {
expect
(
content
.
isModified
,
isFalse
);
});
testWithoutContext
(
'DevFSStringCompressingBytesContent'
,
()
{
final
DevFSStringCompressingBytesContent
content
=
DevFSStringCompressingBytesContent
(
'uncompressed string'
);
expect
(
content
.
equals
(
'uncompressed string'
),
isTrue
);
expect
(
content
.
bytes
,
isNotNull
);
expect
(
content
.
isModified
,
isTrue
);
expect
(
content
.
isModified
,
isFalse
);
});
testWithoutContext
(
'DevFS create throws a DevFSException when vmservice disconnects unexpectedly'
,
()
async
{
final
FileSystem
fileSystem
=
MemoryFileSystem
.
test
();
final
OperatingSystemUtils
osUtils
=
MockOperatingSystemUtils
();
...
...
This diff is collapsed.
Click to expand it.
packages/flutter_tools/test/general.shard/windows/install_manifest_test.dart
View file @
ff2dde2c
...
...
@@ -132,7 +132,7 @@ flutter:
'C:/build/flutter_assets/assets/foo.png'
,
'C:/build/flutter_assets/AssetManifest.json'
,
'C:/build/flutter_assets/FontManifest.json'
,
'C:/build/flutter_assets/NOTICES'
,
'C:/build/flutter_assets/NOTICES
.Z
'
,
'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll'
,
'C:/winuwp/flutter/ephemeral/flutter_windows_winuwp.dll.pdb'
,
'C:/winuwp/flutter/ephemeral/icudtl.dat'
...
...
This diff is collapsed.
Click to expand it.
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