Commit Graph

13561 Commits

Author SHA1 Message Date
Zachary Anderson e2bce948ed [dart:io] Adds Platform.operatingSystemVersion
fixes #30018

R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/3006873002 .
2017-09-01 22:08:48 -07:00
Ryan Macnak a914c24b43 [vm] Rename "grow_ratio" to "grow_pages" since it is an amount, not a ratio.
R=asiva@google.com

Review-Url: https://codereview.chromium.org/3009053002 .
2017-09-01 17:31:39 -07:00
Ryan Macnak a2695ad29b When deduplicating program metadata, try to use objects from the VM isolate.
Expands the mechanism that moves token streams to the VM isolate to include instructions and code metadata.

Allow the isolate snapshot to reference Instructions in the VM isolate.

R=asiva@google.com

Review-Url: https://codereview.chromium.org/2909403002 .
2017-09-01 13:26:29 -07:00
Ryan Macnak 86f602d020 Initial idle GC logic.
Use the speed of previous scavenges to estimate the time required for the next scavenge. When we receive an initial notification, perform a scavenge if we have allocated enough and we estimate we can complete the scavenge before the deadline.

Expand the time recorded for a scavenge to include safepointing and iterating roots.

R=asiva@google.com

Review-Url: https://codereview.chromium.org/3001423002 .
2017-09-01 09:38:08 -07:00
Terry Lucas 0585e74b63 Fixed analyzer test to use dart2js not dartium
R=paulberry@google.com

Committed: https://github.com/dart-lang/sdk/commit/704de3bb3e27313c0eb6eb5ebc03173a5396dd1e
Review-Url: https://codereview.chromium.org/3004153002 .
2017-09-01 09:03:16 -07:00
Peter von der Ahé b460a25459 Store actual Reference(s) for additional exports.
R=johnniwinther@google.com, scheglov@google.com

Review-Url: https://codereview.chromium.org/3009953003 .
2017-09-01 16:30:43 +02:00
Samir Jindel f0941f7c7d Improve the performance of closure-converted code.
Summary:

Previously, we would create a wrapper function in the flowgraph around converted
closures, which would forward all the closure's arguments and unpack the context
argument before calling the real closure function.

Now, we perform the unpacking at the top of the real function to avoid having
any wrapper function.

Previously, captured parameters would still be appear live to the GC even if
they're updated, because after they are copied into the context, all updates to
them are done there.

Now, as in regular closures, we zero-out the parameter variable after copying
it's value into the context, avoiding potential memory leaks.

Test Plan:

Ran the closure conversion test suite.
Ran benchmarks on Golem -- all statistically significant regressions are gone.

BUG=
R=dmitryas@google.com, regis@google.com

Review-Url: https://codereview.chromium.org/3008923002 .
2017-09-01 14:59:40 +02:00
Carlo Bernaschina 4ea98fba56 Allow port and host override in Observatory
R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/3009013002 .
2017-08-31 17:37:40 -07:00
William Hesse a8cab7a205 Revert "Removed Dartium SDK libs"
This reverts commit 4a58918382.
That commit seems to have broken docgen on the html libraries.

BUG=
TBR=terry@google.com

Review-Url: https://codereview.chromium.org/3004173002 .
2017-09-01 00:47:57 +02:00
Carlo Bernaschina 05367c3db8 Update iOS FileSystemWatcher::WatchPath signature
TBR=zra@google.com

Review-Url: https://codereview.chromium.org/3011703002 .
2017-08-31 09:46:28 -07:00
Terry Lucas 4a58918382 Removed Dartium SDK libs
First stage remove the libraries that are no longer part of 1.25 and beyond.

R=alanknight@google.com, sigmund@google.com

Committed: https://github.com/dart-lang/sdk/commit/a18908461adc431af2ee0114ed5ea9ef781bfb67
Committed: https://github.com/dart-lang/sdk/commit/d96561af083777ac9529c75ae05b6e89f8f06a6c
Review-Url: https://codereview.chromium.org/3008563002 .
2017-08-31 07:17:23 -07:00
Peter von der Ahé f0277b32e8 Revert "Store actual Reference(s) for additional exports."
This reverts commit 234c4a7f49.

Revert "Fix for ScopeBuilder[] - look into setters too."

This reverts commit 7924f4c42f.

Revert "Don't include BuiltinTypeBuilder(s) into additional exports."

This reverts commit e28aac09c4.

The reason for reverting is that the two follow-up commits aren't correct.

R=johnniwinther@google.com

Review-Url: https://codereview.chromium.org/3004973002 .
2017-08-31 16:13:50 +02:00
Terry Lucas f1269525a8 Revert: Removed Dartium SDK libs
Review-Url: https://codereview.chromium.org/3005913003 .
2017-08-30 20:47:07 -07:00
Terry Lucas d96561af08 Removed Dartium SDK libs
First stage remove the libraries that are no longer part of 1.25 and beyond.

R=alanknight@google.com, sigmund@google.com

Committed: https://github.com/dart-lang/sdk/commit/a18908461adc431af2ee0114ed5ea9ef781bfb67
Review-Url: https://codereview.chromium.org/3008563002 .
2017-08-30 20:07:15 -07:00
Carlo Bernaschina 5534568ff1 Make service protocol respect isolate lifecycle
Status:
- Currently the getIsolate API tries to guess the status of the isolate
  when it is in between the IsolateRunnable and PauseStart, by reporting
  it as already in the PauseStart status.
  This can potentially make flaky all the tests that uses PauseStart to
  synchronize with the actual status of the Isolate.
- In the previous situation the timestamp of the event is guessed too,
  potentially reporting a wrong value.
- Even with the previous fix the is still a race condition that can lead
  to a getIsolate responde with a PauseStart status to be sent before
  the actual PauseStart event.

Changes:
- Fallback to None pause event if the isolate is in between
  IsolateRunnable and PauseStart, avoiding double posting.
- Send the PauseStart event before the actual status change, partially
  avoiding the race conditions.
- Set the pause timestamp before the actual status change, fully
  avoiding the race condition.

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

R=asiva@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/3006883002 .
2017-08-30 17:09:36 -07:00
Zachary Anderson 732bb45c45 [dart:io] Remove double-close from recursive directory delete
closedir() closes the file descriptor wrapped by the DIR, so we
shouldn't close it again.

R=bkonyi@google.com

Review-Url: https://codereview.chromium.org/3005883002 .
2017-08-30 12:49:05 -07:00
Alexander Markov 3cc0cea37e [vm] Implement gradual refinement of types
Before this CL, each invocation of FlowGraphTypePropagator discarded
(overwritten) all previously inferred types. Due to re-structuring of
the IR (for example, InstanceCall to _simpleInstanceOf may be replaced
with various IR sequences), FlowGraphTypePropagator may yield
better or worse results (for example, not all replacements of
_simpleInstanceOf are recognized by FlowGraphTypePropagator).

As the result, inferred type information could be lost at later
stages of the compilation pipeline. Code generation, which looks
at the types may not see the same types as earlier stages of
compilation pipeline, so EmitNativeCode() may generate code which is
out of sync with ComputeCanDeoptimize().

This CL introduces refinement of types: old type is no longer
blindly replaced with newly inferred type. Instead, more specific type
is selected among new and old types. Conservatively, the new type is
preferred if the types are unrelated (it could happen in certain
corner cases, such as unreachable code).

This CL also contains the following minor changes:

* Fix reaching type of the CheckSmi argument when CheckSmi is moved
  in LICM::TrySpecializeSmiPhi. It looks like it was previosuly
  unnoticed due to full recomputation of types in type propagator.

* Rename local variables to better follow style guide (follow-up
  to my previous change).

* Handle kNE along with other comparisons in AOT.

R=rmacnak@google.com, vegorov@google.com

Issue: https://github.com/dart-lang/sdk/issues/30480
Review-Url: https://codereview.chromium.org/3010673002 .
2017-08-30 12:12:17 -07:00
Zachary Anderson 959de94b85 [dart:io] Build fixes for Namespaces
Small fixes for my previous commit.

Review-Url: https://codereview.chromium.org/3008943002 .
2017-08-30 10:18:09 -07:00
Konstantin Shcheglov 234c4a7f49 Store actual Reference(s) for additional exports.
We need this to be able to tree shake outline.
https://github.com/dart-lang/sdk/issues/30448#issuecomment-325434406

R=ahe@google.com, kmillikin@google.com, paulberry@google.com, sigmund@google.com
BUG=

Review-Url: https://codereview.chromium.org/3008763002 .
2017-08-30 09:56:21 -07:00
Ryan Macnak b7a0458196 [observatory] Add an "ownership" analysis for the heap snapshot.
An object A is said to be owned by object B if all direct references to A come from B. In particular, an object that holds unshared lists and maps will own the heap size of those lists and maps, as well as any unshared elements. We hope a table of owned sizes will be more useful than a table of shallow sizes, since the latter typically says the heap is mostly lists.

R=cbernaschina@google.com

Review-Url: https://codereview.chromium.org/3009743003 .
2017-08-30 09:50:57 -07:00
Zachary Anderson d0295c873c [dart:io] Namespaces for file IO
Fuchsia requires the ability to sandbox Isolates w.r.t. file IO.
When a new Isolate starts, Fuchsia will pass the Isolate an object
called a namespace. We can translate the namespace object into a
file descriptor suitable for passing to the *at() family of
POSIX file system calls. The file system calls will then
have visibility only into the specified namespace.

We also plumb Namespaces through on all the other platforms as well to
make the change easier to test and so that in the future we can
implement e.g. per-isolate cwds.

This change adds a new internal class to dart:io called _Namespace,
which is implemented in a patch file. See:

sdk/lib/io/namespace_impl.dart
runtime/bin/namespace_patch.dart

The embedder can set up a non-default namespace by calling
_Namespace._setupNamespace during Isolate setup.

Instances of _Namespace have a native field that holds a pointer
to a native Namespace object. See:

runtime/bin/namespace.h

Calls from e.g. file_impl.dart are now also passed a
_Namespace object. The implementations in e.g. file.cc and
file_linux.cc then extract the namespace, and use it to compute a
file descriptor and path suitable for passing to e.g. openat().

related US-313

R=asiva@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/3007703002 .
2017-08-30 09:34:36 -07:00
Régis Crelier df70bd64ae [VM generic functions reification] Support generic async* and sync* functions.
R=bkonyi@google.com

Review-Url: https://codereview.chromium.org/3004033002 .
2017-08-30 09:19:47 -07:00
Carlo Bernaschina ad280c8c6c Mark issue_30555_test as flaky
TBR=rmacnak@google.com

Review-Url: https://codereview.chromium.org/3011583002 .
2017-08-29 17:50:21 -07:00
Carlo Bernaschina 39f2dce9d5 Fix issue_30555_test with dartk compiler
Related https://github.com/dart-lang/sdk/issues/30555

TBR=rmacnak@google.com

Review-Url: https://codereview.chromium.org/3008833002 .
2017-08-29 14:44:00 -07:00
Carlo Bernaschina cdd3f4f9e5 Restore "Avoid to run dart code during paused_on_exit"
This restores https://github.com/dart-lang/sdk/commit/20066b625a723d0bca4a13afe408e9d6b1442e0e
That was reverted in https://github.com/dart-lang/sdk/commit/ea3526344ae8460ea50cd73b94904eddda816182
Related https://github.com/dart-lang/sdk/issues/30555

R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/3006743003 .
2017-08-29 13:02:09 -07:00
Carlo Bernaschina ea3526344a Revert "Avoid to run dart code during paused_on_exit"
This reverts commit 20066b625a.

TBR=asiva@google.com

Review-Url: https://codereview.chromium.org/3011563002 .
2017-08-29 12:14:58 -07:00
Carlo Bernaschina 20066b625a Avoid to run dart code during paused_on_exit
When a MessageHandler gets to the paused_on_exist state it should just handle service events.

If ports are open though, at the next message the isolate will consider itself still alive and handle any kind of request.

The MessageHandler is now checking for its paused_on_exit state and avoid to handle normal messages in that state.

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

R=asiva@google.com

Review-Url: https://codereview.chromium.org/3010503002 .
2017-08-29 11:14:59 -07:00
Régis Crelier af0552eac5 Fix usage of csinc arm64 instruction in stubs (the 2nd operand is incremented).
Review-Url: https://codereview.chromium.org/3012513002 .
2017-08-29 11:06:48 -07:00
Terry Lucas 05ca90aa8c Removed Dartium test exceptions
R=alanknight@google.com

Committed: https://github.com/dart-lang/sdk/commit/84f079f24c75aec51a53c17f1ebe0027b2adbb0c
Review-Url: https://codereview.chromium.org/2983033002 .
2017-08-29 07:15:06 -07:00
Terry Lucas a18908461a Removed Dartium SDK libs
First stage remove the libraries that are no longer part of 1.25 and beyond.

R=alanknight@google.com

Review-Url: https://codereview.chromium.org/3008563002 .
2017-08-29 06:38:53 -07:00
Beeravolu Siva Chandra Reddy 245be6c74c Rename the class "KernelReader" to "KernelLoader".
There already exists a class named "Reader" in the "kernel" namespace
which reads bytes from a kernel binary. The class KernelLoader
(KernelReader before this change) creates VM heap objects and populates
them.

R=kmillikin@google.com

Review-Url: https://codereview.chromium.org/3010543002 .
2017-08-29 10:59:18 +02:00
Alexander Aprelev 7cbb96c199 Wholesale update tests status in attempt to make (fyi) dartkp buildbots green.
Buildbots are here: https://build.chromium.org/p/client.dart.fyi/console.

BUG=
R=asiva@google.com

Review-Url: https://codereview.chromium.org/3000423002 .
2017-08-28 18:32:21 -07:00
Carlo Bernaschina 89e72c7bb5 Hide internal classes from Memory Profile
The Service Protocol exposes a new private RPC _getDefaultClassesAliases
which returns a Map from internal classes to a String.

This Map is used to group internal classes and to avoid navigation to
patch files.

R=asiva@google.com

Review-Url: https://codereview.chromium.org/3003903002 .
2017-08-28 18:18:51 -07:00
Régis Crelier b3a7dd6e9d [VM generic function reification] Support generic functions in Invocation class.
Make VM object TypeArguments a Dart instance.
Add a test verifying that noSuchMethod works with generic functions.

R=floitsch@google.com, rmacnak@google.com

Review-Url: https://codereview.chromium.org/3007603002 .
2017-08-28 17:00:39 -07:00
Ryan Macnak 48bc6e5d73 Add external sizes to the heap dominator tree.
Fixes #30381

R=cbernaschina@google.com

Review-Url: https://codereview.chromium.org/3008593002 .
2017-08-28 10:54:32 -07:00
Samir Jindel 7bf835b9d5 Fix many bugs with closure conversion in checked mode.
Summary:

Previously, we use the "Vector" type in the kernel tree for the result of the
"VectorCreation" operation as as the parameter type for converted closure
functions. In the VM, we use the "Context" type instead, which the VM treats a
little differently than normal Dart-visible types, and it doesn't not handle
type checks against it correctly, breaking all closure converted code running in
checked mode.

Now, Since we are forced to use dynamic to represent the types of elements of
the context, we may as well just use dynamic for the context type itself.

Previously, we did not correct handle converted closure type checks for closures
that capture type parameters. The way we handled these type checks also had
several latent bugs that prevented type parameters being handled properly.

Now, we handle type parameters for converted closures similarly to normal
closures, and the places we treat them specially are fewer and more integrated
with the rest of the closure type checking code.

There is still a problem where assignments to captured variables are not
checked, because they are transformed to assignments into the context, whose
elements are necessarily untyped. This breaks many co19 tests, which expect type
errors on these assignments. The example below should error in checked mode, but
after closure conversion is runs with no errors.

int b;
bool c;
(() { b = c; })()

Test Plan:

- All test cases in "pkg/kernel/testcases/closures" now run in checked mode.

- Added a test "closures_types.dart" to check that captured type parameters are
  handled correctly in the converted closures' signature types.

R=dmitryas@google.com

Review-Url: https://codereview.chromium.org/3007623002 .
2017-08-28 17:39:32 +02:00
Lasse R.H. Nielsen c8b6c19314 Revert "Add ticks counter to Timer."
Tests broken in DDC

Review-Url: https://codereview.chromium.org/3011503002 .
2017-08-28 13:14:09 +02:00
Lasse R.H. Nielsen 39c8f64ea3 Add ticks counter to Timer.
Avoid VM scheduling multiple timer events if it gets delayed. This doesn't
scale for processes that are suspended for extended amounts of time.

R=floitsch@google.com

Review-Url: https://codereview.chromium.org/3003853002 .
2017-08-28 12:57:45 +02:00
Jens Johansen 656b495df8 Mark service test as runtime error
Snapshots don't include source and generated source is not 1-to-1.
The column offset is off for this test.

BUG=

Review-Url: https://codereview.chromium.org/3011493002 .
2017-08-28 12:26:25 +02:00
Jens Johansen 1ad24e4b46 [kernel] Add offset to SwitchContinueStatement; add debugging test
BUG=
R=johnniwinther@google.com

Review-Url: https://codereview.chromium.org/3004693002 .
2017-08-28 12:01:03 +02:00
Carlo Bernaschina cf4cc1973a Refactor Isolate name format, storage and log
At the moment isolated has a name field which is on the main_port the
only exception is the vm-service isolate.
The name is used just for logging.

The service protocol though uses an extra field called debugger_name,
that at this moment is redundant and is optimized away during
compilation.

BUG=
R=rmacnak@google.com, zra@google.com

This CL:
- Removes the debugger_name in favor of a modifiable name
- Adds to all the log where the name was logged the main_port (that is
  the only real identifier)
- Changes the default format of the isolate name from:
    <script_uri>$<main>
  to:
    <script_uri>:<main>()
Review-Url: https://codereview.chromium.org/3004563003 .
2017-08-25 18:07:03 -07:00
Siva Annamalai d8a8d7a387 Address code review comment from previous commit.
BUG=

Review-Url: https://codereview.chromium.org/3009663002 .
2017-08-25 16:18:00 -07:00
Siva Annamalai b4ddc97fd5 Revert "Fix for Flutter issue 11260 (https://github.com/flutter/flutter/issues/11260)"
This reverts commit 8817846da6.

BUG=

Review-Url: https://codereview.chromium.org/3005663002 .
2017-08-25 16:15:05 -07:00
Siva Annamalai 8817846da6 Fix for Flutter issue 11260 (https://github.com/flutter/flutter/issues/11260)
Do not rely on the udp_receive_buffer field from IsolateData as a buffer for
reading data in the recvfrom call.

BUG=
R=zra@google.com

Review-Url: https://codereview.chromium.org/3009643002 .
2017-08-25 15:26:55 -07:00
Ryan Macnak e9d358921d Revert "Puts TLABs back into the build and fixes assert failure."
This reverts commit 4c471b3f27.

This change regressed Flutter's velocity tracker benchmark by ~15%; reverting until this can be fixed or understood.

Issue #30521

R=danunez@google.com

Review-Url: https://codereview.chromium.org/3005623002 .
2017-08-25 10:48:23 -07:00
Siva Annamalai eac18a324c Fixes for issues
30504 - https://github.com/dart-lang/sdk/issues/30504
gen_snapshot fails to run from kernel

30517 - https://github.com/dart-lang/sdk/issues/30517
vm-kernel-precomp 'expected: !dfe.UseDartFrontend() && !dfe.kernel_file_specified()' tests regression

R=aam@google.com

Review-Url: https://codereview.chromium.org/3004563002 .
2017-08-25 10:05:13 -07:00
Jens Johansen 2ba6cce387 [kernel] Position on switch expression
BUG=
R=ahe@google.com

Review-Url: https://codereview.chromium.org/3003863002 .
2017-08-25 13:54:40 +02:00
Martin Kustermann 76a00500ad [VM] Make us compile with debug-optimization-level=0 again
After [0] landed our debug builders managed to still compile, because
the default debug-optimization-level allows the compiler to inline. This
caused a "CanReload() const { return false; }" to be inlined and
constant folded, so the call to ReloadSources() was eliminated.

Compiling with debug-optimization-level=0 disables inlining and keeps
the call, which gives us a linker error when building the
dart_precompiled_runtime target.

[0] https://codereview.chromium.org/2997243002

R=vegorov@google.com

Review-Url: https://codereview.chromium.org/3003383002 .
2017-08-25 13:46:25 +02:00
Vyacheslav Egorov 08d2841def [VM] Fix deserialization of arrays with type arguments in ApiMessageReader.
A placeholder object must be created and registered via AddBackRef(...) *before*
any inner objects are deserialized otherwise NextAvailableObjectId() might
reuse current object id for an inner object with omitted object id leading
to inconsistent back references state.

Also handle kObjectType in ReadIndexedObject allowing it to deserialize things
like <Object>[...].

This bug was revealed by trying out to run VMService isolate in Kernel mode
with strong mode enabled leading to arrays that had no type arguments have
(inferred) type arguments.

R=kustermann@google.com
BUG=

Review-Url: https://codereview.chromium.org/3003333002 .
2017-08-25 11:51:23 +02:00
Vyacheslav Egorov 7d5231796e [VM, Precompiler] Support obfuscation of the symbolic information in precompiler
Obfuscation is controlled by obfuscate flag in Dart_IsolateFlags.

Obfuscation of identifiers is performed during script tokenization - when TokenStream is generated from the source. All kIDENT and kINTERPOL_VAR tokens are renamed consistently using a persistent obfuscation map stored in ObjectStore::obfuscation_map.

Some identifiers (pseudo-keywords, arithmetic operators, builtin recognized methods and entry-points) are not renamed to keep name based lookups from breaking. All other identifiers are renamed.

Constant instances of Symbol-s (both created via literal syntax #ident and using constant constructor const Symbol("ident")) are renamed consistently with corresponding identifiers.

Script urls and Library urls and names are also obfuscated.

Obfuscation map can be dumped as a JSON array at the end of precompilation using Dart_GetObfuscationMap API.

BUG=https://github.com/dart-lang/sdk/issues/30524
R=rmacnak@google.com

Review-Url: https://codereview.chromium.org/3003583002 .
2017-08-25 09:48:23 +02:00