Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.

Commit ba25fd1

Browse files
zichanggcommit-bot@chromium.org
authored andcommitted
[dart:io] Fixes the FileIO performance regression
Previous CL (https://dart-review.googlesource.com/c/sdk/+/139881) causes performance regression. Improves: FileIO_readwrite_512kb: 196.5%, 224.1% FileIO_readwrite_verify_512kb: 38.28% 46.71% Change-Id: I5fb7752f14a2b39238e82bf45b059fe145b9087f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148563 Commit-Queue: Zichang Guo <[email protected]> Reviewed-by: Martin Kustermann <[email protected]> Reviewed-by: Jonas Termansen <[email protected]>
1 parent 8020a0f commit ba25fd1

File tree

13 files changed

+118
-12
lines changed

13 files changed

+118
-12
lines changed

runtime/vm/object.cc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4270,6 +4270,10 @@ bool Class::InjectCIDFields() const {
42704270
#define ADD_SET_FIELD(clazz) {"cid" #clazz, kTypedData##clazz##Cid},
42714271
CLASS_LIST_TYPED_DATA(ADD_SET_FIELD)
42724272
#undef ADD_SET_FIELD
4273+
#define ADD_SET_FIELD(clazz) \
4274+
{"cidExternal" #clazz, kExternalTypedData##clazz##Cid},
4275+
CLASS_LIST_TYPED_DATA(ADD_SET_FIELD)
4276+
#undef ADD_SET_FIELD
42734277
#undef CLASS_LIST_WITH_NULL
42744278
};
42754279

sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ class _RandomAccessFileOps {
218218

219219
@patch
220220
bool _isDirectIOCapableTypedList(List<int> buffer) {
221-
return buffer is Uint8List || buffer is Int8List;
221+
return false;
222222
}
223223

224224
@patch

sdk/lib/_internal/js_runtime/lib/io_patch.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ class _RandomAccessFileOps {
218218

219219
@patch
220220
bool _isDirectIOCapableTypedList(List<int> buffer) {
221-
return buffer is Uint8List || buffer is Int8List;
221+
return false;
222222
}
223223

224224
@patch

sdk/lib/_internal/vm/bin/common_patch.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,14 @@ import "dart:typed_data" show Uint8List;
5454
@patch
5555
bool _isDirectIOCapableTypedList(List<int> buffer) {
5656
int classID = ClassID.getID(buffer);
57-
return classID == ClassID.cidUint8Array || classID == ClassID.cidInt8Array;
57+
return classID == ClassID.cidUint8ArrayView ||
58+
classID == ClassID.cidUint8Array ||
59+
classID == ClassID.cidInt8ArrayView ||
60+
classID == ClassID.cidInt8Array ||
61+
classID == ClassID.cidExternalUInt8Array ||
62+
classID == ClassID.cidExternalInt8Array ||
63+
classID == ClassID.cidUint8ClampedArray ||
64+
classID == ClassID.cidExternalUint8ClampedArray;
5865
}
5966

6067
@patch

sdk/lib/_internal/vm/lib/class_id_fasta.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,15 @@ class ClassID {
2929
@pragma("vm:entry-point")
3030
static final int cidUint8Array = 0;
3131
@pragma("vm:entry-point")
32+
static final int cidInt8ArrayView = 0;
33+
@pragma("vm:entry-point")
3234
static final int cidInt8Array = 0;
35+
@pragma("vm:entry-point")
36+
static final int cidExternalUInt8Array = 0;
37+
@pragma("vm:entry-point")
38+
static final int cidExternalInt8Array = 0;
39+
@pragma("vm:entry-point")
40+
static final int cidUint8ClampedArray = 0;
41+
@pragma("vm:entry-point")
42+
static final int cidExternalUint8ClampedArray = 0;
3343
}

sdk/lib/io/common.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ _BufferAndStart _ensureFastAndSerializableByteData(
108108
return new _BufferAndStart(newBuffer, 0);
109109
}
110110

111-
// VM will use ClassID to check whether buffer is Uint8List or Int8List.
111+
// The VM will use ClassID to check whether buffer is Uint8List or Int8List.
112112
external bool _isDirectIOCapableTypedList(List<int> buffer);
113113

114114
class _IOCrypto {

sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class _RandomAccessFileOps {
216216

217217
@patch
218218
bool _isDirectIOCapableTypedList(List<int> buffer) {
219-
return buffer is Uint8List || buffer is Int8List;
219+
return false;
220220
}
221221

222222
@patch

sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ class _RandomAccessFileOps {
216216

217217
@patch
218218
bool _isDirectIOCapableTypedList(List<int> buffer) {
219-
return buffer is Uint8List || buffer is Int8List;
219+
return false;
220220
}
221221

222222
@patch

sdk_nnbd/lib/_internal/vm/bin/common_patch.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,14 @@ import "dart:typed_data" show Uint8List;
5252
@patch
5353
bool _isDirectIOCapableTypedList(List<int> buffer) {
5454
int classID = ClassID.getID(buffer);
55-
return classID == ClassID.cidUint8Array || classID == ClassID.cidInt8Array;
55+
return classID == ClassID.cidUint8ArrayView ||
56+
classID == ClassID.cidUint8Array ||
57+
classID == ClassID.cidInt8ArrayView ||
58+
classID == ClassID.cidInt8Array ||
59+
classID == ClassID.cidExternalUint8Array ||
60+
classID == ClassID.cidExternalInt8Array ||
61+
classID == ClassID.cidUint8ClampedArray ||
62+
classID == ClassID.cidExternalUint8ClampedArray;
5663
}
5764

5865
@patch

sdk_nnbd/lib/_internal/vm/lib/class_id_fasta.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,15 @@ class ClassID {
2727
@pragma("vm:entry-point")
2828
static final int cidUint8Array = 0;
2929
@pragma("vm:entry-point")
30+
static final int cidInt8ArrayView = 0;
31+
@pragma("vm:entry-point")
3032
static final int cidInt8Array = 0;
33+
@pragma("vm:entry-point")
34+
static final int cidExternalUint8Array = 0;
35+
@pragma("vm:entry-point")
36+
static final int cidExternalInt8Array = 0;
37+
@pragma("vm:entry-point")
38+
static final int cidUint8ClampedArray = 0;
39+
@pragma("vm:entry-point")
40+
static final int cidExternalUint8ClampedArray = 0;
3141
}

0 commit comments

Comments
 (0)