Commit Graph

13143 Commits

Author SHA1 Message Date
Alexander Markov f0ea02bc51 [vm/nnbd] Do not trust non-nullable Object for parameter of operator==
Operator== has parameter type Object, which is non-nullable in NNBD
strong mode. This is useful, as null should be handled magically by
the implementation, and the body of operator== should never receive
null.

However, VM handles comparison of an object with null inside
operator==, so its parameter type should not be taken into account
when inferring type of ParameterInstr. Otherwise implicit null
handling code is removed by the optimizer.

Fixes https://github.com/dart-lang/sdk/issues/42287

Change-Id: I856a2ce47a11309e8c32d4d9bb481d7cc03bab85
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151021
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-06-11 21:49:39 +00:00
Regis Crelier f46efc71c2 [VM/nnbd] Do not apply legacy erasure to type literals.
See issue #42262.

Change-Id: I326eff8ca836c345caab266f5d27991b251e77ba
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/151020
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-06-11 20:00:08 +00:00
Ryan Macnak b0484ecbde [vm] Check prefix.loadLibrary is called and returns before prefix members are used.
Restore checks against reloading a library with deferred prefixes.

No loading is actually deferred.

Bug: https://github.com/dart-lang/sdk/issues/26878
Bug: https://github.com/dart-lang/sdk/issues/41974
Change-Id: Iec2662de117453d596cca28dd9481a9751091ce9
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149613
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-06-11 16:33:21 +00:00
Regis Crelier 9f904ff184 [VM/runtime] Remove intermediate array copy step when rehashing types.
Change-Id: Iffe90ef347b026f87cc21c07710fbfea34f36413
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150697
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-06-11 15:49:22 +00:00
Tess Strickland 7c9f7f4bf8 [vm/aot] Fix UB behavior due to WriteFixed usage at unaligned positions.
Change-Id: Icc4f05bbec03aee1f60c690e3bef8b5f6f159470
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150933
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-11 13:52:51 +00:00
Aske Simon Christensen e35ca30ca5 Reland "[vm] MemoryCopy instruction for copying between typed data and strings."
This is a reland of 6ecd8a10ea

Original change's description:
> [vm] MemoryCopy instruction for copying between typed data and strings.
> 
> Used for copying the bytes from the Uint8List to the _OneByteString in
> String.fromCharCodes and the pure-ASCII case of UTF-8 decoding.
> 
> Issue https://github.com/dart-lang/sdk/issues/42072
> Closes https://github.com/dart-lang/sdk/issues/41703
> 
> Change-Id: I1ae300222877d1c6e64e32c2f40b8fb187a584c0
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149500
> Commit-Queue: Aske Simon Christensen <askesc@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>

Change-Id: Ia231c521e5f2db168cfc6094dfc7322327dedc6d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150925
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
2020-06-11 12:29:19 +00:00
Tess Strickland 83d4f3af61 [vm/aot] Rework Dwarf object to be output-agnostic.
Previously, we created a separate DWARF object for each possible output.
For the most part, the information stored in each DWARF object was the
same, but the DWARF object was responsible for keeping track of abstract
origin addresses (in the non-assembly case) and for actually generating
the desired output (assembly or binary).

Instead, abstract out the output formatting into a DwarfWriteStream,
whose subclasses handle both the final output format and certain details
that differ between assembly and binary outputs. With this, the DWARF
class no longer depends on having direct access to the ELF file if being
used to generate ELF sections, and as such is output agnostic.

Now, if we have one or more outputs that contain DWARF information, we
only generate a single DWARF object that is shared across these outputs.
The only additional change required is in Dwarf::AddCode(), which now
handles being called multiple times for the same Code object.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try
Change-Id: I71de887a07a673164b3ccfa7fbbab2ccef80c576
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150302
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-11 08:57:59 +00:00
asiva a782dd82db [VM/runtime] - detect null safety before isolate initialization
- Detect null safety when not specified before isolate
      initialization
      - for source files by having CFE parse the source file
        for @dart annotations
      - for kernel files by sniffing the kernel file for
        compilation mode
      - for appJIT files by sniffing the feature string
      - for AOT snapshots by sniffing the feature string

    - Remove workaround of returning null safety to false during
      bootstrapping

    - Add a new Dart C API call for detecting null safety

Bug: 41766
Change-Id: Ia8cf264323a2d0d58c2855ce6491456aa6f1da07
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150089
Commit-Queue: Siva Annamalai <asiva@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-11 01:22:35 +00:00
Regis Crelier c0c66ab10f Reland "[VM/nnbd] Canonicalize TypeParameter objects in the VM."
This is a reland of 6a98e2719e

Original change's description:
> [VM/nnbd] Canonicalize TypeParameter objects in the VM.
> 
> Prior to this CL, type parameters were all assumed canonical, even duplicate ones.
> 
> Per a new convention introduced in this CL, the type parameter array in generic classes and generic functions contains canonical type parameters. As these type parameters get cloned with a different nullability, they are inserted in a new hash table of canonical type parameters.
> 
> This fixes performance issue https://github.com/dart-lang/sdk/issues/41421
> 
> Change-Id: I9086158fa6b6261e9997bb50edec6d7c54abbfa1
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148223
> Commit-Queue: Régis Crelier <regis@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

Change-Id: I4a42d0f9d53c2244b1a638432ed2cd6a055fa72a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150266
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-06-11 00:44:05 +00:00
Ryan Macnak 0fab083e1c [vm, isolate] Merge heaps without evacuating new-space.
Change-Id: I03d65e866215f243f2ab6a4a1d9d41625be4d56f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148682
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-10 20:22:02 +00:00
Martin Kustermann cfe45b6e3e [vm] Add opt-in flag to set priority for worker threads created by the VM
The newly added --worker-thread-priority can be used by users as an
opt-in to set the thread priority / nice value.

It is the responsibility of the user to ensure that the process has the
right to change the priority to the given value. Failure to set the
priority will be fatal.

See b/154918152

Change-Id: I3b3791e88b6ddf4fa6e39e4587f7fe1ab4d2312f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150560
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-06-10 19:57:02 +00:00
Ryan Macnak d1b0713e8b Revert "[vm] MemoryCopy instruction for copying between typed data and strings."
This reverts commit 6ecd8a10ea.

Reason for revert: Breaks ABI

Original change's description:
> [vm] MemoryCopy instruction for copying between typed data and strings.
> 
> Used for copying the bytes from the Uint8List to the _OneByteString in
> String.fromCharCodes and the pure-ASCII case of UTF-8 decoding.
> 
> Issue https://github.com/dart-lang/sdk/issues/42072
> Closes https://github.com/dart-lang/sdk/issues/41703
> 
> Change-Id: I1ae300222877d1c6e64e32c2f40b8fb187a584c0
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149500
> Commit-Queue: Aske Simon Christensen <askesc@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>

TBR=kustermann@google.com,askesc@google.com

Change-Id: I5fc0b58da80dca23c91b57ec2833492e9d0885a8
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150802
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-10 18:41:55 +00:00
Aske Simon Christensen 6ecd8a10ea [vm] MemoryCopy instruction for copying between typed data and strings.
Used for copying the bytes from the Uint8List to the _OneByteString in
String.fromCharCodes and the pure-ASCII case of UTF-8 decoding.

Issue https://github.com/dart-lang/sdk/issues/42072
Closes https://github.com/dart-lang/sdk/issues/41703

Change-Id: I1ae300222877d1c6e64e32c2f40b8fb187a584c0
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149500
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-10 14:40:17 +00:00
Tess Strickland 977997bd76 [vm/aot] Add Image objects to V8 snapshot profiles.
This avoids attributing the header and padding bytes in Image objects
to the artificial root, instead making it clear why these bytes exist.
It also ensures Instructions objects (in the non-bare-payload case) are
never considered roots of the profile.

Also unify semantics of text_offset in AssemblyImageWriter::WriteText()
and BlobImageWriter::WriteText(). Originally the former was the offset
from the start of the text section and the latter was the offset from
the start of the instructions objects/payloads. Now they're both the
offset in the text section.

Bug: https://github.com/dart-lang/sdk/issues/41249

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try
Change-Id: I617e76c9c390a93abb6bc37efc1355368c64691e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149286
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-10 11:29:27 +00:00
Vyacheslav Egorov 45310394a6 [vm] Exclude class name from function name in instruction sizes json.
Issue https://github.com/dart-lang/sdk/issues/41249

Cq-Include-Trybots: luci.dart.try:pkg-linux-debug-try,pkg-linux-release-try,pkg-win-release-try,pkg-mac-release-try
Change-Id: Idf2bb9c9d6392c7a95aa09a2cc1f2190adcf782d
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150522
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-10 10:18:37 +00:00
Ryan Macnak 0f15f8722e [vm, gc] Use a clear, decreasing-cost order in deciding idle GC actions.
Change-Id: I873676bf7e7ba6d98505bbd2dad604a12ae56f0e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150168
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-09 16:24:11 +00:00
Tess Strickland 956620e044 [vm] Only exchange initial values in BSS when different.
BSS::Initialize() can run multiple times when isolate code is
loaded in separate threads. Even though the values used each
time are consistent and so they'll only change the first time,
TSAN sees the compare_exchange_strong calls as possible
read/write data races.

Cq-Include-Trybots: luci.dart.try:vm-kernel-tsan-linux-release-x64-try,vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-product-x64-try,vm-kernel-precomp-linux-debug-x64-try,vm-kernel-precomp-linux-release-simarm_x64-try
Bug: https://github.com/dart-lang/sdk/issues/42095
Change-Id: Iedb368939f9d86889a820edfa534522a4731a9d7
Fixed: 42095
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150340
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Tess Strickland <sstrickl@google.com>
2020-06-09 13:23:56 +00:00
Vyacheslav Egorov df68f17ebb [vm/compiler] Make NameOfStub work for BuildMethodExtractor stub.
Change-Id: Id0da8d175a92c52e142a5b4e9aecc3b06fc2f05c
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150360
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-09 09:08:54 +00:00
Vyacheslav Egorov d8a03b0a41 [vm] Fix disambiguated qualified names for tear-offs of async functions
Before this CL they erroneously had {body} appended to them.

Change-Id: Idc27d7a20b4b64194fb6fd16ac68ec8db3223f74
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150420
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-08 21:34:52 +00:00
Martin Kustermann 7da7e9d06b [vm] Remove -lrt dependency: It was required for clock_gettime with GLIBC before 2.17 (~ 2012)
Originally this dependency got added in this CL:

   https://codereview.chromium.org/8463032


Debian Wheezy used to have older glibc but Wheezy's LTS has expired.


Change-Id: I667da14f7dc8054837d0946c041e1021a5f3128a
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150104
Reviewed-by: Alexander Thomas <athom@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-06-08 17:23:01 +00:00
Aske Simon Christensen cf6f8903a5 [vm] IL instruction for UTF-8 scan.
Speeds up decoding across the board, with medium-length pure ASCII
strings seeing about 2x on X64 and IA32.

Closes https://github.com/dart-lang/sdk/issues/41702

Change-Id: I1c8e0bc69baaaeb6755d4c775e6fa0e6d18e1c57
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148762
Commit-Queue: Aske Simon Christensen <askesc@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-08 15:03:34 +00:00
Tess Strickland df435c9235 [vm/aot] For ELF output, make DW_AT_high_pc the end of the isolate text.
This avoids treating addresses within segments added after the isolate
text section as valid PC addresses for our DWARF information.

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-simarm_x64-try,vm-kernel-precomp-linux-product-x64-try
Change-Id: Ibdac611d97b5a24226c226a3904c958f131ab961
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149290
Commit-Queue: Tess Strickland <sstrickl@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-06-08 08:35:32 +00:00
Régis Crelier c48263e901 Revert "[VM/nnbd] Canonicalize TypeParameter objects in the VM."
This reverts commit 6a98e2719e.

Reason for revert: Unexpected test failures

Original change's description:
> [VM/nnbd] Canonicalize TypeParameter objects in the VM.
> 
> Prior to this CL, type parameters were all assumed canonical, even duplicate ones.
> 
> Per a new convention introduced in this CL, the type parameter array in generic classes and generic functions contains canonical type parameters. As these type parameters get cloned with a different nullability, they are inserted in a new hash table of canonical type parameters.
> 
> This fixes performance issue https://github.com/dart-lang/sdk/issues/41421
> 
> Change-Id: I9086158fa6b6261e9997bb50edec6d7c54abbfa1
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148223
> Commit-Queue: Régis Crelier <regis@google.com>
> Reviewed-by: Ryan Macnak <rmacnak@google.com>

TBR=rmacnak@google.com,alexmarkov@google.com,asiva@google.com,regis@google.com

Change-Id: I0ca3b6b66e2281c285eba6b564f78c0e6b2f2217
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150265
Reviewed-by: Régis Crelier <regis@google.com>
Commit-Queue: Régis Crelier <regis@google.com>
2020-06-05 23:36:45 +00:00
Regis Crelier 6a98e2719e [VM/nnbd] Canonicalize TypeParameter objects in the VM.
Prior to this CL, type parameters were all assumed canonical, even duplicate ones.

Per a new convention introduced in this CL, the type parameter array in generic classes and generic functions contains canonical type parameters. As these type parameters get cloned with a different nullability, they are inserted in a new hash table of canonical type parameters.

This fixes performance issue https://github.com/dart-lang/sdk/issues/41421

Change-Id: I9086158fa6b6261e9997bb50edec6d7c54abbfa1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148223
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-06-05 22:56:50 +00:00
Regis Crelier a5f8ddac99 [VM/runtime] Introduce a trail in IsSubtypeOf() to avoid cycles.
Clean up signatures of runtime functions in object.{cc,h} using the trail to avoid cycles. Move the trail to the last parameter of these functions.
Introduce a trail in IsSubtypeOf() to avoid cycles introduced by bounds of F-bounded types. Issue uncovered by the new normalization tests.

Change-Id: I3241c7e4023a09c122e1594b7aff90b5b103f4f4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150180
Commit-Queue: Régis Crelier <regis@google.com>
Reviewed-by: Alexander Markov <alexmarkov@google.com>
2020-06-05 19:57:46 +00:00
Alexander Markov b42aa2df68 [vm] Properly synchronize EnsureInitializerFunction
Initializer functions are created lazily at compile time when generating
LoadField which calls initializer. This may happen in the background
compiler thread, where Field objects are cloned.
EnsureInitializerFunction should be called from original field, and it
should be properly synchronized to make sure there are no races with
mutator thread.

Change-Id: Icc339afa2ee410385019c72c717737719767d367
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/150166
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-05 17:55:14 +00:00
Ben Konyi 32615994fd [ VM Service / DDS ] Redirect web socket connection requests made to VM Service to DDS
Also fixes issue where test_helper wasn't running tests provided by
runDDSTest

Change-Id: I031a741a2aec30a3055153afce042105af2e5398
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149660
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
2020-06-05 00:30:03 +00:00
Ryan Macnak 1cbf6c31e5 [vm, gc] Prevent a program with sufficient idle time and dominated by direct old-space allocations from avoiding scavenges for too long.
This is the idle equivalent of 3451c348db.

Change-Id: Ica6e0595c39257540ea731355868a107de2c2597
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149960
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-05 00:01:12 +00:00
Ben Konyi 62903873df [ VM ] Fix crash when expression compilation is attempted without an internal or external compilation service
Discovered using the DevTools widget inspector with a Flutter
application which did not have a flutter_tools instance connected. The
widget inspector attempts to evaluate expressions, the VM service
realizes there's no external compilation service and attempts to fall
back onto the kernel isolate's compilation service. The crash occurs as
KernelIsolate::InitializeState had not been called during initialization
as Dart_InitializeParams.start_kernel_isolate == false.

Fixes b/155649002

Change-Id: I9b1225f17dc4d4dff39503d4353b3bb539b08267
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149880
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Ben Konyi <bkonyi@google.com>
2020-06-04 22:06:09 +00:00
Martin Kustermann 10df757a49 [vm/ffi] Fix issue due to unspecified argument evaluation order in C++
We already have tests that exercise this, namely:

  - ffi_2/regress_39044_test
  - ffi_2/vmspecific_send_port_id_test

Though the bug only appears if C++ compiler decides to evaluate arguments
in a different order. This happens to be only the case on Windows.

We don't have Windows hardware with Android phones on our CI, which is
why this was not caught earlier.

We have manually confirmed (via building app on windows with this fix
and running on android) that the issue is fixed by this change.

Fixes https://github.com/flutter/flutter/issues/54948

Change-Id: I51109cf1062964a5fb77948cffb9e2ba8fe2055f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149980
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-06-04 10:46:11 +00:00
Kaushik Iska 02915ec5ce Revert "Replaces fuchsia.deprecatedtimezone"
This reverts commit cf30ff2953.

Bug: b/158105817 for more details
Change-Id: I8b37329f8d90cbf5012aa4fb3c5a45dac649f555
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149920
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-06-03 21:58:10 +00:00
Ryan Macnak f27d705c56 [vm, gc] Use the standard out-of-memory message when the scavenger fails to copy.
Bug: b/155227688
Change-Id: I865f4abaf82469c89739f3effeb0a4683ceb2686
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149900
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-06-03 21:00:10 +00:00
Alexander Markov 1d14868685 [vm/nnbd] Finish migration of vm/cc tests to NNBD
Also, vm/cc tests are enabled on NNBD bots.

Issue: https://github.com/dart-lang/sdk/issues/41314
Change-Id: Iddfa68de3de041436a009dd3426431211471b4dc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149780
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-03 18:09:39 +00:00
Nathan Rogers ff13c4e31a [fuchsia] Avoid unnecessary zx_clock_get(ZX_CLOCK_THREAD, ...) calls
When system tracing is enabled on the Fuchsia platform, avoid calling
|OS::GetCurrentThreadCPUMicros|.  The thread timestamp values are
discarded later, so querying them is wasteful w.r.t. both time and
trace buffer space.

Change-Id: I400075c89e69ddde6b032808859826c95f029008
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149395
Reviewed-by: Siva Annamalai <asiva@google.com>
Auto-Submit: Nathan Rogers <nathanrogers@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-06-03 17:27:41 +00:00
Vyacheslav Egorov 10c5dd0f06 [vm/compiler] Handle phis specially in TryCreateConstantReplacementFor.
When replacing an unboxed phi with its contant value we should not
try to insert unboxing instruction before the phi - as phis exist
outside of the normal stream of instructions and InsertBefore does
not work on them.

Instead we should insert unboxing into the block which contains
the phi.

Original test is expanded to cover this case as well now.

Fixes https://github.com/dart-lang/sdk/issues/42164

TEST=vm/cc/ConstantPropagator_Regress35371

Cq-Include-Trybots: luci.dart.try:vm-kernel-precomp-linux-release-x64-try,vm-kernel-precomp-linux-debug-x64-try
Fixed: 42164
Change-Id: I53f984216e53195206fb8247b0ed8999590415a3
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149842
Commit-Queue: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-06-03 15:00:49 +00:00
Ryan Macnak 407ca1be87 [vm, api] Add Dart_UpdateExternalSize to the embedding API.
Allows an embedder (or native extension) to inform the VM when external memory is released before a weak handle is finalized.

Bug: https://github.com/dart-lang/sdk/issues/42078
Change-Id: Ifffd0c160e5305bc6e6752207a2315139f245e2f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149245
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Vyacheslav Egorov <vegorov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-02 21:29:03 +00:00
Alexander Markov 50f1f1459e [vm/nnbd] Support NNBD weak mode in vm/cc tests
Change-Id: Ia49c64bf8461b8acf019c398635e27b11fe6d25e
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149666
Reviewed-by: Ben Konyi <bkonyi@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-06-02 20:40:03 +00:00
Zichang Guo 4489805956 Revert "[dart:io] Fixes the FileIO performance regression"
This reverts commit ba25fd190e.

Reason for revert: It broke dart2js. https://logs.chromium.org/logs/dart/buildbucket/cr-buildbucket.appspot.com/8878578963299042720/+/steps/build_dart/0/stdout?format=raw.
Unimplemented handling of missing static target.

Original change's description:
> [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 <zichangguo@google.com>
> Reviewed-by: Martin Kustermann <kustermann@google.com>
> Reviewed-by: Jonas Termansen <sortie@google.com>

TBR=sortie@google.com,kustermann@google.com,zichangguo@google.com

Change-Id: I170eeed56484f2ece3c3b7f1b93f54edf5ae2736
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149743
Reviewed-by: Zichang Guo <zichangguo@google.com>
Commit-Queue: Zichang Guo <zichangguo@google.com>
2020-06-02 19:14:05 +00:00
Zichang Guo ba25fd190e [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 <zichangguo@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Jonas Termansen <sortie@google.com>
2020-06-02 17:47:05 +00:00
Martin Kustermann 3d53df52af Revert "[vm] Call OSThread::Cleanup() during VM shutdown (as with all other Init/Cleanup functions)"
See b/157883819: Custom embedder doesn't correctly join threads that
interacted with Dart API, which causes us to hit the newly added
RELEASE_ASSERT.

This reverts commit ea4b17533c.

Change-Id: I9fec45196646f67ae46efccc2f83a43e8941a626
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149592
Reviewed-by: David Morgan <davidmorgan@google.com>
Commit-Queue: Martin Kustermann <kustermann@google.com>
2020-06-02 13:25:01 +00:00
Alexander Aprelev 13ea0b3e9f [vm/deterministic] When sorting CallTargets by frequency, sort by id in case of ties.
This addresses an issue that AOT snapshot, disassembly and flowgraph are different when generated on Windows vs Linux.
Difference is caused by different order of targets in CallTargets, caused by the fact that qsort doesn't have to preserve the order of equal elements in the original list.
While qsort on Linux preserves original (by id) order, on Windows it does not.

See https://github.com/flutter/flutter/issues/44425 for context.

Change-Id: I74c17fd83e5ae21f9733712a87de8f55a1ba94fd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149496
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2020-06-01 23:55:08 +00:00
Alexander Aprelev 164948ab0a [vm/aot] Fix aot cross-compilation scenario when gen_snapshot runs on Windows targets android x64.
At present calling convention code is guarded by _WIN64 macro, which indicates that compiler is running on Windows, doesn't take into account target os. This causes problems when one attempts to generate aot snapshot for Android os.

Fixes https://github.com/flutter/flutter/issues/44425.

Change-Id: I8b21d9e9c357071f29632826dd7bbedc19be00a2
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149497
Reviewed-by: Ryan Macnak <rmacnak@google.com>
Commit-Queue: Alexander Aprelev <aam@google.com>
2020-06-01 23:21:38 +00:00
Alexander Markov 1618fd965b [vm/compiler] Optimize lazy field initialization
Load*Field and Init*Field IL instructions are fused into load
instructions with 'calls_initializer' flag.

A new, more powerful elimination of lazy initializer calls uses
data flow analysis and load forwarding (place numbering).

In addition to improved elimination of initializer calls,
fusing instructions avoids extra load after field is already
loaded for lazy initialization check.

Fixes https://github.com/dart-lang/sdk/issues/41417

Change-Id: Ibb2a63f84b9b0c970db67b3d6684ec15384a64e7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/148283
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-06-01 21:28:18 +00:00
Ryan Macnak cd55d62ac1 [vm] Change THR_Print to filter based on isolate group.
Parts of the GC now run without a current isolate, so THR_Prints there were all silenced.

Change-Id: Icd4be68eca8a2edfa43b4f140f69babd798f17af
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149371
Commit-Queue: Ryan Macnak <rmacnak@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
Reviewed-by: Alexander Aprelev <aam@google.com>
2020-05-30 01:06:44 +00:00
Ben Konyi 8ff37f07dc [ VM ] Fix asserts in ARM64 simulator
https://dart-review.googlesource.com/c/sdk/+/148539 hoisted an assert
out of a conditional block and started causing failures for DebugSIMARM64
fuzzing runs as `stxr` does not have `Rs = 31`.

Change-Id: Ibbcc1ba105567ca1142843261756b8ee6a8e119f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149483
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2020-05-29 21:54:04 +00:00
Ryan Macnak 3451c348db [vm, gc] Prevent a program dominated by direct old-space allocations from avoiding scavenges for too long.
Bug: https://github.com/flutter/flutter/issues/48360
Change-Id: I75263809aed45879ff513e60280ea3f28b61b1c8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149480
Reviewed-by: Siva Annamalai <asiva@google.com>
Commit-Queue: Ryan Macnak <rmacnak@google.com>
2020-05-29 21:40:57 +00:00
asiva 02bfe67840 [VM/Runtime] - Remove Dart_CompileSourcesToKernel from the Dart C API
Remove Dart_CompileSourcesToKernel from the Dart C API as it is not used
anywhere except in unit tests (unit_test.cc)

Change-Id: I314dafbe4cddbe20a81890505bc07c8bf2100eaa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149380
Reviewed-by: Alexander Aprelev <aam@google.com>
Commit-Queue: Siva Annamalai <asiva@google.com>
2020-05-29 18:43:54 +00:00
Filip Filmar cf30ff2953 Replaces fuchsia.deprecatedtimezone
The FIDL library fuchsia.deprecatedtimezone is going away.  There are
different and better ways to obtain the same functionality.  This change
removes the dependency on fuchsia.deprecatedtimezone from the Dart SDK.

Adds inspect metrics that allow whitebox testing of the runners.  Here's
a sample `fx iquery` excerpt from a running device, showing both a dart
and a flutter runner exposing the same OS diagnostic metrics.

```
/hub/c/dart_jit_runner.cmx/70981/out/diagnostics:
  /hub/c/dart_jit_runner.cmx/70981/out/diagnostics#os:
    dst_status = 0
    get_profile_status = 0
    timezone_content_status = 0
    tz_data_close_status = 0
    tz_data_status = 0
/hub/c/flutter_jit_runner.cmx/29567/out/diagnostics:
  /hub/c/flutter_jit_runner.cmx/29567/out/diagnostics#os:
    dst_status = 0
    get_profile_status = 0
    timezone_content_status = 0
    tz_data_close_status = 0
    tz_data_status = 0
```

Under nominal operation, all of the above values should be equal to 0.
Nonzero values indicate an error.

This functionality is guarded by Fuchsia integration tests at
//src/tests/intl.

Tested:
  (compile locally for Fuchsia and deploy)
  fx test //src/tests/intl

Fixes #39650

Change-Id: I5fc3ed305301abe1b183948a7cf478e014f351e7
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149206
Commit-Queue: Filip Filmar <fmil@google.com>
Reviewed-by: Martin Kustermann <kustermann@google.com>
2020-05-29 18:36:58 +00:00
Alexander Markov f57c99fc31 [vm/compiler] Fix crash in inliner when receiver is dead
Fixes https://github.com/dart-lang/sdk/issues/42065

Change-Id: Ib66163a41a13f02cfa9df9bcb1cf505e934fea93
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149370
Reviewed-by: Martin Kustermann <kustermann@google.com>
Commit-Queue: Alexander Markov <alexmarkov@google.com>
2020-05-29 16:34:45 +00:00
Aske Simon Christensen bbf34035dd Revert "[vm] Check prefix.loadLibrary is called and returns before prefix members are used."
This reverts commit f049a410e5.

Reason for revert: Broke reload bots.

Original change's description:
> [vm] Check prefix.loadLibrary is called and returns before prefix members are used.
> 
> Not loading is actually deferred.
> 
> Bug: https://github.com/dart-lang/sdk/issues/41974
> Change-Id: I62688007bd36dbcb2e8ffb4a1fd2dceb1775b1c8
> Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149053
> Commit-Queue: Ryan Macnak <rmacnak@google.com>
> Reviewed-by: Siva Annamalai <asiva@google.com>

TBR=rmacnak@google.com,alexmarkov@google.com,asiva@google.com

Change-Id: I923e339465fdf13199efc11a9cef4a842abebd67
No-Presubmit: true
No-Tree-Checks: true
No-Try: true
Bug: https://github.com/dart-lang/sdk/issues/41974
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149423
Reviewed-by: Aske Simon Christensen <askesc@google.com>
Commit-Queue: Aske Simon Christensen <askesc@google.com>
2020-05-29 09:04:02 +00:00