Skip to content

Commit aedc56f

Browse files
author
Ivan Dlugos
committed
flatbuffers - vm:prefer-inline annotations for hotspots
1 parent f0ad325 commit aedc56f

File tree

2 files changed

+46
-0
lines changed

2 files changed

+46
-0
lines changed

objectbox/lib/flatbuffers/flat_buffers.dart

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,35 +49,48 @@ class BufferContext {
4949

5050
BufferContext._(this._buffer);
5151

52+
@pragma('vm:prefer-inline')
5253
int derefObject(int offset) {
5354
return offset + _getUint32(offset);
5455
}
5556

57+
@pragma('vm:prefer-inline')
5658
Uint8List _asUint8LIst(int offset, int length) =>
5759
_buffer.buffer.asUint8List(_buffer.offsetInBytes + offset, length);
5860

61+
@pragma('vm:prefer-inline')
5962
double _getFloat64(int offset) => _buffer.getFloat64(offset, Endian.little);
6063

64+
@pragma('vm:prefer-inline')
6165
double _getFloat32(int offset) => _buffer.getFloat32(offset, Endian.little);
6266

67+
@pragma('vm:prefer-inline')
6368
int _getInt64(int offset) => _buffer.getInt64(offset, Endian.little);
6469

70+
@pragma('vm:prefer-inline')
6571
int _getInt32(int offset) => _buffer.getInt32(offset, Endian.little);
6672

73+
@pragma('vm:prefer-inline')
6774
int _getInt16(int offset) => _buffer.getInt16(offset, Endian.little);
6875

76+
@pragma('vm:prefer-inline')
6977
int _getInt8(int offset) => _buffer.getInt8(offset);
7078

79+
@pragma('vm:prefer-inline')
7180
int _getUint64(int offset) => _buffer.getUint64(offset, Endian.little);
7281

82+
@pragma('vm:prefer-inline')
7383
int _getUint32(int offset) => _buffer.getUint32(offset, Endian.little);
7484

85+
@pragma('vm:prefer-inline')
7586
int _getUint16(int offset) => _buffer.getUint16(offset, Endian.little);
7687

88+
@pragma('vm:prefer-inline')
7789
int _getUint8(int offset) => _buffer.getUint8(offset);
7890

7991
/// If the [byteList] is already a [Uint8List] return it.
8092
/// Otherwise return a [Uint8List] copy of the [byteList].
93+
@pragma('vm:prefer-inline')
8194
static Uint8List _asUint8List(List<int> byteList) {
8295
if (byteList is Uint8List) {
8396
return byteList;
@@ -802,6 +815,7 @@ class BoolListReader extends Reader<List<bool>> {
802815
int get size => _sizeofUint32;
803816

804817
@override
818+
@pragma('vm:prefer-inline')
805819
List<bool> read(BufferContext bc, int offset) =>
806820
new _FbBoolList(bc, bc.derefObject(offset));
807821
}
@@ -814,6 +828,7 @@ class BoolReader extends Reader<bool> {
814828
int get size => _sizeofUint8;
815829

816830
@override
831+
@pragma('vm:prefer-inline')
817832
bool read(BufferContext bc, int offset) => bc._getInt8(offset) != 0;
818833
}
819834

@@ -827,6 +842,7 @@ class Float64ListReader extends Reader<List<double>> {
827842
int get size => _sizeofFloat64;
828843

829844
@override
845+
@pragma('vm:prefer-inline')
830846
List<double> read(BufferContext bc, int offset) =>
831847
new _FbFloat64List(bc, bc.derefObject(offset));
832848
}
@@ -838,6 +854,7 @@ class Float32ListReader extends Reader<List<double>> {
838854
int get size => _sizeofFloat32;
839855

840856
@override
857+
@pragma('vm:prefer-inline')
841858
List<double> read(BufferContext bc, int offset) =>
842859
new _FbFloat32List(bc, bc.derefObject(offset));
843860
}
@@ -849,6 +866,7 @@ class Float64Reader extends Reader<double> {
849866
int get size => _sizeofFloat64;
850867

851868
@override
869+
@pragma('vm:prefer-inline')
852870
double read(BufferContext bc, int offset) => bc._getFloat64(offset);
853871
}
854872

@@ -859,6 +877,7 @@ class Float32Reader extends Reader<double> {
859877
int get size => _sizeofFloat32;
860878

861879
@override
880+
@pragma('vm:prefer-inline')
862881
double read(BufferContext bc, int offset) => bc._getFloat32(offset);
863882
}
864883

@@ -868,6 +887,7 @@ class Int64Reader extends Reader<int> {
868887
int get size => _sizeofInt64;
869888

870889
@override
890+
@pragma('vm:prefer-inline')
871891
int read(BufferContext bc, int offset) => bc._getInt64(offset);
872892
}
873893

@@ -879,6 +899,7 @@ class Int32Reader extends Reader<int> {
879899
int get size => _sizeofInt32;
880900

881901
@override
902+
@pragma('vm:prefer-inline')
882903
int read(BufferContext bc, int offset) => bc._getInt32(offset);
883904
}
884905

@@ -890,6 +911,7 @@ class Int16Reader extends Reader<int> {
890911
int get size => _sizeofInt16;
891912

892913
@override
914+
@pragma('vm:prefer-inline')
893915
int read(BufferContext bc, int offset) => bc._getInt16(offset);
894916
}
895917

@@ -901,6 +923,7 @@ class Int8Reader extends Reader<int> {
901923
int get size => _sizeofInt8;
902924

903925
@override
926+
@pragma('vm:prefer-inline')
904927
int read(BufferContext bc, int offset) => bc._getInt8(offset);
905928
}
906929

@@ -930,6 +953,7 @@ abstract class Reader<T> {
930953
/// Read the value at the given [offset] in [bc].
931954
T read(BufferContext bc, int offset);
932955

956+
@pragma('vm:prefer-inline')
933957
int _vTableFieldOffset(BufferContext object, int offset, int field) {
934958
int vTableSOffset = object._getInt32(offset);
935959
int vTableOffset = offset - vTableSOffset;
@@ -939,12 +963,14 @@ abstract class Reader<T> {
939963
}
940964

941965
/// Read the value of the given [field] in the given [object].
966+
@pragma('vm:prefer-inline')
942967
T? vTableGetNullable(BufferContext object, int offset, int field) {
943968
int fieldOffset = _vTableFieldOffset(object, offset, field);
944969
return fieldOffset == 0 ? null : read(object, offset + fieldOffset);
945970
}
946971

947972
/// Read the value of the given [field] in the given [object].
973+
@pragma('vm:prefer-inline')
948974
T vTableGet(BufferContext object, int offset, int field, T defaultValue) {
949975
int fieldOffset = _vTableFieldOffset(object, offset, field);
950976
return fieldOffset == 0 ? defaultValue : read(object, offset + fieldOffset);
@@ -959,6 +985,7 @@ class StringReader extends Reader<String> {
959985
int get size => 4;
960986

961987
@override
988+
@pragma('vm:prefer-inline')
962989
String read(BufferContext bc, int offset) {
963990
int strOffset = bc.derefObject(offset);
964991
int length = bc._getUint32(strOffset);
@@ -969,6 +996,7 @@ class StringReader extends Reader<String> {
969996
return utf8.decode(bytes);
970997
}
971998

999+
@pragma('vm:prefer-inline')
9721000
static bool _isLatin(Uint8List bytes) {
9731001
int length = bytes.length;
9741002
for (int i = 0; i < length; i++) {
@@ -1019,6 +1047,7 @@ class Uint32ListReader extends Reader<List<int>> {
10191047
int get size => _sizeofUint32;
10201048

10211049
@override
1050+
@pragma('vm:prefer-inline')
10221051
List<int> read(BufferContext bc, int offset) =>
10231052
new _FbUint32List(bc, bc.derefObject(offset));
10241053
}
@@ -1033,6 +1062,7 @@ class Uint64Reader extends Reader<int> {
10331062
int get size => _sizeofUint64;
10341063

10351064
@override
1065+
@pragma('vm:prefer-inline')
10361066
int read(BufferContext bc, int offset) => bc._getUint64(offset);
10371067
}
10381068

@@ -1044,6 +1074,7 @@ class Uint32Reader extends Reader<int> {
10441074
int get size => _sizeofUint32;
10451075

10461076
@override
1077+
@pragma('vm:prefer-inline')
10471078
int read(BufferContext bc, int offset) => bc._getUint32(offset);
10481079
}
10491080

@@ -1057,6 +1088,7 @@ class Uint16ListReader extends Reader<List<int>> {
10571088
int get size => _sizeofUint32;
10581089

10591090
@override
1091+
@pragma('vm:prefer-inline')
10601092
List<int> read(BufferContext bc, int offset) =>
10611093
new _FbUint16List(bc, bc.derefObject(offset));
10621094
}
@@ -1069,6 +1101,7 @@ class Uint16Reader extends Reader<int> {
10691101
int get size => _sizeofUint16;
10701102

10711103
@override
1104+
@pragma('vm:prefer-inline')
10721105
int read(BufferContext bc, int offset) => bc._getUint16(offset);
10731106
}
10741107

@@ -1082,6 +1115,7 @@ class Uint8ListReader extends Reader<List<int>> {
10821115
int get size => _sizeofUint32;
10831116

10841117
@override
1118+
@pragma('vm:prefer-inline')
10851119
List<int> read(BufferContext bc, int offset) =>
10861120
new _FbUint8List(bc, bc.derefObject(offset));
10871121
}
@@ -1094,6 +1128,7 @@ class Uint8Reader extends Reader<int> {
10941128
int get size => _sizeofUint8;
10951129

10961130
@override
1131+
@pragma('vm:prefer-inline')
10971132
int read(BufferContext bc, int offset) => bc._getUint8(offset);
10981133
}
10991134

@@ -1102,6 +1137,7 @@ class _FbFloat64List extends _FbList<double> {
11021137
_FbFloat64List(BufferContext bc, int offset) : super(bc, offset);
11031138

11041139
@override
1140+
@pragma('vm:prefer-inline')
11051141
double operator [](int i) {
11061142
return bc._getFloat64(offset + 4 + 8 * i);
11071143
}
@@ -1112,6 +1148,7 @@ class _FbFloat32List extends _FbList<double> {
11121148
_FbFloat32List(BufferContext bc, int offset) : super(bc, offset);
11131149

11141150
@override
1151+
@pragma('vm:prefer-inline')
11151152
double operator [](int i) {
11161153
return bc._getFloat32(offset + 4 + 4 * i);
11171154
}
@@ -1127,6 +1164,7 @@ class _FbGenericList<E> extends _FbList<E> {
11271164
: super(bp, offset);
11281165

11291166
@override
1167+
@pragma('vm:prefer-inline')
11301168
E operator [](int i) {
11311169
_items ??= List<E?>.filled(length, null);
11321170
E? item = _items![i];
@@ -1147,6 +1185,7 @@ abstract class _FbList<E> extends Object with ListMixin<E> implements List<E> {
11471185
_FbList(this.bc, this.offset);
11481186

11491187
@override
1188+
@pragma('vm:prefer-inline')
11501189
int get length {
11511190
_length ??= bc._getUint32(offset);
11521191
return _length!;
@@ -1166,6 +1205,7 @@ class _FbUint32List extends _FbList<int> {
11661205
_FbUint32List(BufferContext bc, int offset) : super(bc, offset);
11671206

11681207
@override
1208+
@pragma('vm:prefer-inline')
11691209
int operator [](int i) {
11701210
return bc._getUint32(offset + 4 + 4 * i);
11711211
}
@@ -1176,6 +1216,7 @@ class _FbUint16List extends _FbList<int> {
11761216
_FbUint16List(BufferContext bc, int offset) : super(bc, offset);
11771217

11781218
@override
1219+
@pragma('vm:prefer-inline')
11791220
int operator [](int i) {
11801221
return bc._getUint16(offset + 4 + 2 * i);
11811222
}
@@ -1186,6 +1227,7 @@ class _FbUint8List extends _FbList<int> {
11861227
_FbUint8List(BufferContext bc, int offset) : super(bc, offset);
11871228

11881229
@override
1230+
@pragma('vm:prefer-inline')
11891231
int operator [](int i) {
11901232
return bc._getUint8(offset + 4 + i);
11911233
}
@@ -1196,6 +1238,7 @@ class _FbBoolList extends _FbList<bool> {
11961238
_FbBoolList(BufferContext bc, int offset) : super(bc, offset);
11971239

11981240
@override
1241+
@pragma('vm:prefer-inline')
11991242
bool operator [](int i) {
12001243
return bc._getUint8(offset + 4 + i) == 1 ? true : false;
12011244
}
@@ -1224,6 +1267,7 @@ class _VTable {
12241267

12251268
int get numOfUint16 => 1 + 1 + fieldOffsets.length;
12261269

1270+
@pragma('vm:prefer-inline')
12271271
void addField(int field, int offset) {
12281272
assert(!offsetsComputed);
12291273
// We need to increase the offset by 1 to later (in [computeFieldOffsets])
@@ -1332,6 +1376,7 @@ class DefaultAllocator extends Allocator {
13321376
}
13331377

13341378
@override
1379+
@pragma('vm:prefer-inline')
13351380
void clear(ByteData data, bool isFresh) {
13361381
if (isFresh) {
13371382
// nothing to do, ByteData is created all zeroed out

objectbox/lib/src/fb_readers.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ class EagerListReader<E> extends Reader<List<E>> {
1414
int get size => 4;
1515

1616
@override
17+
@pragma('vm:prefer-inline')
1718
List<E> read(BufferContext bc, int offset) {
1819
final listOffset = bc.derefObject(offset);
1920
final length = bc.buffer.getUint32(listOffset, Endian.little);

0 commit comments

Comments
 (0)