Commit Graph

477 Commits

Author SHA1 Message Date
Ryan Macnak 6b5f29fb70 Reload: Don't free the saved class table while another thread may be reading it.
Fixes #27016.

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

Review URL: https://codereview.chromium.org/2240283002 .
2016-08-12 16:12:25 -07:00
John McCutchan 800b1352ce Add an API for setting the sticky error
BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/2223913002 .
2016-08-08 12:14:33 -07:00
Siva Annamalai 99baa3de32 Fix for issue 27019 (Safepoint assertion failure in Flutter)
BUG=27019
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2215523002 .
2016-08-04 13:56:04 -07:00
Ryan Macnak ecbf3f7b31 Disable canonical verifier for precompiled.
Issue #27003

TBR=asiva@google.com

Review URL: https://codereview.chromium.org/2201163004 .
2016-08-03 13:43:06 -07:00
John McCutchan a6114c23cd Simplify reload error reporting
- [x] Rationalize the load failure code path.
- [x] Remove support for reload to be aborted via a callback.
- [x] If a reload fails due to an unwind error, ignore it as the isolate is dead anyway.
- [x] Move more allocations into the zone.

Review URL: https://codereview.chromium.org/2208553002 .
2016-08-02 16:11:30 -07:00
John McCutchan 059470cf85 Make all reload zone allocations use the same zone
- [x] Use a single outer zone for all zone allocations done during a reload. This fixes an issue where we were allocating  objects in different zones that were destroyed before we expected them to be.
- [x] Rename some methods.
- [x] Made most methods on IsolateReloadContext private.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2201093002 .
2016-08-02 09:36:46 -07:00
Siva Annamalai 714cd8ee6b Trun on canonical objects verification after reload (still have one workaround for immutable arrays, which is related to the enum issue).
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2201473002 .
2016-08-01 17:07:43 -07:00
John McCutchan 501c9896c1 Refactor how we report reload results
- [x] Give the IsolateReloadContext a JSONStream.
- [x] Remove the sticky reload error from the isolate.
- [x] Print all reasons for cancelling when we fail.

R=turnidge@google.com

Review URL: https://codereview.chromium.org/2196723002 .
2016-08-01 12:30:39 -07:00
Todd Turnidge 1166f83bf6 Only reload libraries when they may have been modified.
We now check all of the scripts which make up a library.  If any
script is modified, then we consider that library to be modified.  We
also consider any library which imports a modified library to be
modified.  To propagate this info efficiently, we build and discard
the imported-by graph when beginning a reload.

The embedder must provide a FileModifiedCallback in order to support
the detection of modified scripts.

In order to detect changes to package: libraries, we have modified the
embedder interface to provide the resolved url when possible, so that
we don't need to re-resolve package uris when checking for reload.
This change is incompatible and all embedders will need to be updated.

We now support a "force" flag when reloading sources.  This causes all
libraries to be reloaded regardless of whether the underlying scripts
have been updated.

Closes #26919

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2186423002 .
2016-07-29 11:23:18 -07:00
Siva Annamalai b78aeee6f2 Fix race condition with HasMutatorThread that was being used without a lock.
R=fschneider@google.com

Review URL: https://codereview.chromium.org/2191723002 .
2016-07-28 18:32:52 -07:00
Siva Annamalai bd1895017b Add a verification step which iterates over the heap and verifies that all canonical objects are consistent (i.e canonicalizing the object returns the object).
Review URL: https://codereview.chromium.org/2160953002 .
2016-07-25 14:35:13 -07:00
John McCutchan d0ebc78d68 Peturb the reload points on the reload bot
BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2183533002 .
2016-07-25 13:34:04 -07:00
Ryan Macnak 2c7983a1d1 vm-service: Include pauseEvent even when running without debugger support.
Pausing the isolate at event boundries, such as --pause-isolates-on-start, doesn't require debugger support.

Fix crash in getStack RPC when running the JIT with --support-debugger=false.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2180613002 .
2016-07-25 09:24:30 -07:00
Ryan Macnak fd63b906c0 Include an empty breakpoints list on the Isolate response when the debugger is disabled.
The protocol documentation claims this field is non-nullable and at least two clients assume it as well.

BUG=http://dartbug.com/26938
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2172683003 .
2016-07-21 14:33:24 -07:00
Florian Schneider 25070b85b1 Fix for use-after-free of reload context
Delete the reload context after the last use. My first attempt did not work
with our unit test framework for reload cc tests.  When running unit tests
the reload context is needed for longer, and deleted separately.

BUG=#26895
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2164703003 .
2016-07-19 18:28:56 -07:00
Florian Schneider daea7e69ca Revert "Fix use-after-free in isolate reload."
This reverts commit 16e577741d.

TBR=johnmccutchan@google.com,

BUG=

Review URL: https://codereview.chromium.org/2162113002 .
2016-07-19 10:44:58 -07:00
Florian Schneider 16e577741d Fix use-after-free in isolate reload.
The reload context may still be used if an error is reported.

BUG=#26895
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2159923003 .
2016-07-19 10:25:02 -07:00
John McCutchan 0e550aed71 Do not reload isolates if we are in the process of shutting down the VM
BUG=
R=zra@google.com

Review URL: https://codereview.chromium.org/2151253003 .
2016-07-15 11:17:59 -07:00
Siva Annamalai e0164a0ceb More guarding of code under #ifndef PRODUCT ... #endif
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2147363002 .
2016-07-14 17:44:24 -07:00
Ryan Macnak 2d9087648d More ifndef PRODUCT.
R=asiva@google.com

Review URL: https://codereview.chromium.org/2153593002 .
2016-07-14 15:30:32 -07:00
Siva Annamalai aaa0867567 More changes to use #ifndef PRODUCT ... #endif explicitly instead of relying on compiler magic.
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2146713004 .
2016-07-14 11:13:13 -07:00
John McCutchan 2cb555c7dd Have --print-metrics use stderr to work around issue with analyzer_cli
BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2148613002 .
2016-07-13 08:52:53 -07:00
John McCutchan 24a0988df6 Hot reload fixes for isolate tests
- [x] Bump maximum number of vm arguments (fixes a bunch of reload crashes....)
- [x] Only check that an isolate has reload if it was ever runnable.
- [x] Skip some isolate tests that use deferred libraries or are checking for closure identity.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2141763002 .
2016-07-11 13:58:26 -07:00
John McCutchan ef71bc1834 Improve hot reload test mode
- [x] Start reloading even earlier.
- [x] Keep the value of FLAG_reload_every per-isolate (so spawned isolates reload eagerly too).
- [x] Adjust the reload every back off curve to be linear in the beginning.
- [x] Cap the reload every threshold at 1,000,000
- [x] Test status file updates.
- [x] Stop disabling the background compiler / OSR when running tests.
- [x] Skip multi tests with compilation errors when reloading.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2133823002 .
2016-07-11 12:29:13 -07:00
Siva Annamalai 56fba25f0f Allow for recursive invocation of SafepointOperationScopes.
R=fschneider@google.com

Review URL: https://codereview.chromium.org/2126413002 .
2016-07-07 15:27:49 -07:00
John McCutchan 621ce4e2fd Add --hot-reload-test-mode flag to embedder and wire it up to test.py
- [x] Add --hot-reload-test-mode to standalone embedder.
- [x] Have test.py pass `--hot-reload-test-mode` instead of specific flags.
- [x] Add --reload_every_back_off flag to control exponential backof off reloads.
- [x] Add --check_reloaded flag to ensure that an isolate has reloaded at least once before exiting.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2118923002 .
2016-07-01 14:26:25 -07:00
Florian Schneider 858ee49cea Separate mutex for megamorphic cache tables lookup in the background compiler.
Lookup and updates to the megamorphic cache tables should be protected by a
separate mutex - using isolate->mutex() can cause a dead lock if the background
compiler holds this lock while it's being stopped by the mutator thread.

BUG=#26808
R=asiva@google.com

Review URL: https://codereview.chromium.org/2118813003 .
2016-07-01 12:43:20 -07:00
Zachary Anderson a503570e3a Fuchsia: Initial check-in.
Instructions to build and run are in README.fuchsia.

R=asiva@google.com

Review URL: https://codereview.chromium.org/2117593002 .
2016-07-01 12:42:05 -07:00
Ryan Macnak 103e316f6a Reapply "Background finalization."
- Fix double-finalization by marking handles that are in a finalization queue.
 - Remember external size in words instead of bytes.
 - Add SlowFinalizer test.

R=asiva@google.com

Review URL: https://codereview.chromium.org/2084193003 .
2016-06-22 16:26:49 -07:00
Ryan Macnak ae94be3f4d Revert "Background finalization."
This reverts commit d265a3db53.

Review URL: https://codereview.chromium.org/2088923002 .
2016-06-21 13:15:12 -07:00
Ryan Macnak d265a3db53 Reapply "Background finalization."
This reverts commit 7d9e75e0b6.

R=asiva@google.com

Review URL: https://codereview.chromium.org/2080353002 .
2016-06-21 09:27:23 -07:00
John McCutchan 51ace86544 Bug fixes for hot reload
- [x] Report the reload error synchronously from the _reloadSources RPC.
- [x] Add sticky reload error to an isolate so we can report the error.
- [x] Remove redundant 'OnStackReload'.
- [x] Fix a bug where a class could have a field added but we wouldn't reject it.
- [x] Add unit test for above bug fix.
- [x] Enable reload via the service protocol with a live stack.

R=fschneider@google.com

Review URL: https://codereview.chromium.org/2070873002 .
2016-06-16 11:02:35 -07:00
Siva Annamalai c65ef6a948 Fix for issue 26689 - Scrub the function name before storing it in IsolateSpawnState when spawning isolates using the spawn function API. This ensures that we do not place a requirement that the private keys of libraries in a spawned isolate must match the parent isolate.
BUG=26689
R=turnidge@google.com

Review URL: https://codereview.chromium.org/2064003002 .
2016-06-14 14:45:51 -07:00
John McCutchan 1a4c2005cc DevFS initial implementation.
This cl implements an experimental filesystem maintained in the vm, called dart-devfs.  This will allow service protocol users to read and write source files while the vm is running.  This is needed for the reload support for flutter.

R=turnidge@google.com

Review URL: https://codereview.chromium.org/2059883003 .
2016-06-10 12:33:50 -07:00
John McCutchan 4d5ad08d11 Enable on stack reload in standalone embedder
- [x] Implement Isolate::OnStackReload
- [x] Now that we don't invoke Dart code during loading, stop blocking class finalization during loading

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2049833002 .
2016-06-08 11:00:31 -07:00
Ryan Macnak 7d9e75e0b6 Revert "Background finalization."
This reverts commit 082829a00b.

Review URL: https://codereview.chromium.org/2041373004 .
2016-06-07 17:21:06 -07:00
Ryan Macnak 082829a00b Background finalization.
Flutter gallery app on Nexus 4:
 max weak handle processing (main thread): 17.7ms -> 1.1ms
 max scavenge (main thread): 21.0ms -> 17.1ms

BUG=flutter/flutter#3804
R=asiva@google.com

Review URL: https://codereview.chromium.org/2012973002 .
2016-06-07 14:38:37 -07:00
Florian Schneider 6afbb17cec VM: Fix assertion failure from background compiler.
The background compiler expects only cloned Field objects.

BUG=#26540
R=vegorov@google.com

Review URL: https://codereview.chromium.org/2016653002 .
2016-05-26 12:18:36 +02:00
Ryan Macnak 7bdf01560a Speculatively revert "Make the object store visible in Observatory."
This reverts commit 2eb8408969.

TBR=turnidge@google.com

Review URL: https://codereview.chromium.org/2002253005 .
2016-05-25 17:33:52 -07:00
Ryan Macnak 4aaf810d25 Add --dump-megamorphic-stats. Lower megamorphic cache load factor to 50%.
R=iposva@google.com

Review URL: https://codereview.chromium.org/2007233002 .
2016-05-25 14:03:27 -07:00
Ryan Macnak 2eb8408969 Make the object store visible in Observatory.
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/2005983002 .
2016-05-25 11:12:32 -07:00
Vyacheslav Egorov 65f2e015ca VM: Fix race between background compiler and guarded cid update.
Rework how we check guarded state consistency in background compiler.

Background compiler was storing original fields inside guarded fields list. This caused a race during inlining when inliner would copy guarded fields one by one from the callee function into the caller, because ParsedFunction::AddToGuardedFields looks at the guarded_cid to filter out those fields that should not be guarded.

As a result if some guarded field transitioned to unguarded (kDynamicCid) after callee graph construction but before list of guarded fields were copied then AddToGuardedFields would simply skip that field because it now has guarded_cid() == kDynamicCid.

We fix this race by always placing copies into the list of guarded fields and unwrapping them only in FinalizeCode.

Placing the copies also allows us to simplify a lot of code that was trying to verify guarded state consistency before committing the generated optimized code - now that we store copies in the list we can just compare their state to the originals and abort if the state is different.

Additionally fix deduplication check that was comparing original fields with copies - resulting in adding the same field into the list multiple times.

Add an assertion that verifies that we are not trying to access guarded_cid of original field from background compiler.

R=fschneider@google.com
BUG=

Review URL: https://codereview.chromium.org/2006793002 .
2016-05-24 14:52:02 +02:00
John McCutchan 48c8ffa7f3 Initial isolate reload support
This is a cut of the work that Todd and I collaborated on in the reload branch.

In this CL, we've dropped the loader port hacks, in other words, on stack reloading in the standalone embedder does not work yet.

- [x] Support for hot reloading of isolate source code
- [x] Unit test harness and many tests
- [x] Service protocol and Observatory support
- [x] Product build does not include support for hot reloading.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1965823002 .
2016-05-17 12:19:06 -07:00
Todd Turnidge 6b28b4f7ef Remove DebuggerEvent. Refactor remaining code.
BUG=
R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/1978603002 .
2016-05-13 09:49:31 -07:00
Ivan Posva b2ac279269 - Use a map to lookup libraries by URL.
- Ensure the uniqueness of private keys without having to
  search the existing key space.
- Pass a thread parameter where useful to library methods.

BUG=

Review URL: https://codereview.chromium.org/1947393003 .
2016-05-05 10:42:28 -07:00
Regis Crelier 6fcb857f00 Remove temporary code used to debug issue #26101.
R=hausner@google.com

Review URL: https://codereview.chromium.org/1948173002 .
2016-05-04 12:55:46 -07:00
Ryan Macnak f7a3e215a5 Undo "Don't include an object header for instructions in the text section."
This undoes most of b2f3e8efe1.

This optimization prevents precompiled code from being disabled and re-enabled, because disabling causes the code to lose its only reference to its own instructions. This was okay for precompilated code that ran without a JIT because it is never disabled, but precompiled code that runs in a JIT will become disabled when corresponding optimized code is compiled and re-abled after a deopt.

R=fschneider@google.com

Review URL: https://codereview.chromium.org/1925153003 .
2016-05-03 11:22:28 -07:00
Siva Annamalai d6d8fb827f Fix product build.
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1941503002 .
2016-04-29 15:57:23 -07:00
Srdjan Mitrovic 8ffe03a9c5 Add one more stop
BUG=
R=regis@google.com

Review URL: https://codereview.chromium.org/1926133002 .
2016-04-28 12:31:56 -07:00
Srdjan Mitrovic 23d296c144 Assert that background compiler is not adding closure functions; stop background compiler when deoptimizing the world.
BUG=
R=regis@google.com

Review URL: https://codereview.chromium.org/1929743002 .
2016-04-27 16:23:45 -07:00