mirror of
https://github.com/flutter/flutter
synced 2024-10-14 04:02:56 +00:00
Increase threshold for usage of compute for utf8 decoding on large strings to 50 KB (#64350)
On a local benchmark, removing compute is faster than compute in both debug and release mode on a Pixel 4. On a MotoG4, a much larger text sample (800 Kb) takes 50 ms, so we cannot simple remove the limit. Increase to 50 Kb which should take at most a ms or two on an older device, and only microseconds on newerones.
This commit is contained in:
parent
cce3edf843
commit
f07f4120e9
|
@ -71,11 +71,13 @@ abstract class AssetBundle {
|
|||
// that the null-handling logic is dead code).
|
||||
if (data == null)
|
||||
throw FlutterError('Unable to load asset: $key'); // ignore: dead_code
|
||||
if (data.lengthInBytes < 10 * 1024) {
|
||||
// 10KB takes about 3ms to parse on a Pixel 2 XL.
|
||||
// See: https://github.com/dart-lang/sdk/issues/31954
|
||||
// 50 KB of data should take 2-3 ms to parse on a Moto G4, and about 400 μs
|
||||
// on a Pixel 4.
|
||||
if (data.lengthInBytes < 50 * 1024) {
|
||||
return utf8.decode(data.buffer.asUint8List());
|
||||
}
|
||||
// For strings larger than 50 KB, run the computation in an isolate to
|
||||
// avoid causing main thread jank.
|
||||
return compute(_utf8decode, data, debugLabel: 'UTF8 decode for "$key"');
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue