commit | 2ebdf7c0f88de0a1f6920486c133eea0a6bc56bd | [log] [tgz] |
---|---|---|
author | Martin Kustermann <kustermann@google.com> | Thu Nov 22 14:02:27 2018 +0000 |
committer | commit-bot@chromium.org <commit-bot@chromium.org> | Thu Nov 22 14:02:27 2018 +0000 |
tree | 2934c980b9ecd43b2052c0776fbcb75b2a96a7d0 | |
parent | 614ae7f362ac2df8500c050862e76c4fc66b8822 [diff] |
[VM] Ensure the _TypedListView.{offsetInBytes,length} fields are always initialized with _Smi's Until now a typed data view was first constructed and then afterwards the constructor body validated that the offsetInBytes/length are non-null and in range. This CL moves the range check to the call sites of the constructor, thereby guarenteeing that we will never initialize the _TypedListView.{offsetInBytes,length} fields with non-_Smi values. (The views are constructed only within the "dart:typed_data" library. Neither the embedder nor the runtime construct them.) Further more this CL removes the redundant _defaultIfNull() call, since the call sites already handled the `length == null` case. This CL also starts annotating _TypedListView.{offsetInBytes,length} with @pragma("vm:exact-result-type", "dart:core#_Smi") to ensure any [LoadFieldInstr] will have the right type attached, thereby avoiding any null-checks and mint-handling. This improves dart-aot On arm7hf: MD5: +38%, SHA256: +87%, SHA1: +89% (plus various typed data microbenchmarks) JsonParseDefaultReviver/StringBuffer/StringIdiomatic/JsonParseCustomReviver: -5-8% (probably due to not inlining static calls, will find out) On arm8: MD5: +6.5%, SHA256: +12%, SHA1: 3.6%, JsonUtf8RoundTrip: 8% (plus various typed data microbenchmarks) DeltaBlue: -6.7% (probably due to not inlining static calls, will find out) Issue https://github.com/dart-lang/sdk/issues/35154 Issue https://github.com/dart-lang/sdk/issues/31954 Change-Id: I37c822e6879f5a2d17fd9650a68cf2eee4326b01 Reviewed-on: https://dart-review.googlesource.com/c/84241 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Alexander Markov <alexmarkov@google.com> Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Dart is an open-source, scalable programming language, with robust libraries and runtimes, for building web, server, and mobile apps.
Visit the dartlang.org to learn more about the language, tools, getting started, and more.
Browse pub.dartlang.org for more packages and libraries contributed by the community and the Dart team.
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.