Commit Graph

601 Commits

Author SHA1 Message Date
John McCutchan b961fc01ad Fix bad commit of stale patch set of original CL "Make NoReloadScope thread safe" (https://codereview.chromium.org/2344193002/)
BUG=

Review URL: https://codereview.chromium.org/2344263002 .
2016-09-16 11:33:43 -07:00
John McCutchan d113638891 Make NoReloadScope thread safe
Fixes #27366

BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org/2344193002 .
2016-09-16 11:18:36 -07:00
Florian Schneider d664003e5b Fix race in GC sweeper and isolate reload rollback.
The sweeper could see a NULL saved_class_table_.

Also, make LoadRelaxed a template function to avoid casting to uword.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/2252533002 .
2016-08-15 15:50:32 -07:00
Ryan Macnak a0d6b94cac Remove dead callback.
R=asiva@google.com

Review URL: https://codereview.chromium.org/2245833002 .
2016-08-15 09:09:26 -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
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 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
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
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 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 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
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
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
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
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
Srdjan Mitrovic fc55cb96a8 Add a stress testing flag --background-compilation-stop-alot; add an extra check if background compilation is being stopped.
BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1904153002 .
2016-04-21 13:32:52 -07:00
Srdjan Mitrovic 4465fc3492 Address Siva's comments from https://codereview.chromium.org/1877973002/
BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/1880233002 .
2016-04-12 15:44:50 -07:00
Srdjan Mitrovic cb63ed46fe Invalidate background compilation only if relevant fields were invalidated.
BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org/1877973002 .
2016-04-11 15:34:59 -07:00
Srdjan Mitrovic 706ea55404 Fix background compilation issues when creating snapshots.
- Stop background compilation early enough
- Restore symbol table after completing snapshot writing.
- Create symbols instead fo strinfs (error caught with --no-use_lib_cache)

BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/1852393004 .
2016-04-04 16:40:46 -07:00
Srdjan Mitrovic 1a9fc8b2fa Move CompilerStats from isolate to thread. Aggregate stats.
The mutator thread holds the aggregate values, the background compiler adds its value to it.

BUG=
R=hausner@google.com

Review URL: https://codereview.chromium.org/1841213003 .
2016-03-30 13:38:32 -07:00
Ryan Macnak b2f3e8efe1 Precompilation: don't include an object header for instructions in the text section.
Reference Instructions only through Code::entry_point_ (or Function::entry_point_). Store the instructions size in its corresponding Code object.

precompiled dart2js x64 22163470 -> 21621102 (-2.45%)

R=fschneider@google.com

Review URL: https://codereview.chromium.org/1808553002 .
2016-03-29 11:04:04 -07:00
Srdjan Mitrovic 5083d314f3 fix build
BUG=

Review URL: https://codereview.chromium.org/1834393002 .
2016-03-28 16:10:55 -07:00
Srdjan Mitrovic f60e86fd83 Track loading happening in parallel with background compilation and abort compilation if necessary.
BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/1834763004 .
2016-03-28 16:02:32 -07:00
John McCutchan 7e9c892435 Don't take a stack trace if we are in the middle of a deoptimization
BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/1824883002 .
2016-03-22 07:57:14 -07:00
Siva Annamalai f7d2b2e31e - Fix for issue 25950 (add registration of a thread exit callback)
- Moved some of the file and entropy callbacks to class Dart from
  class Isolate as they are not isolate specific.

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/1807293002 .
2016-03-17 13:40:20 -07:00
Siva Annamalai 56e888d4cd - Move
stack_limit_,
   stack_overflow_flags_,
   saved_stack_limit_,
   stack_overflow_count_ and
   other interrupts mask fields from Isolate structure to Thread structure

- Change the stack overflow check in the prolog to load the stack limit
  from the THR register, this removes the back to back dependent loads to
  load the stack limit from the Isolate structure

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

Review URL: https://codereview.chromium.org/1812753002 .
2016-03-17 12:57:36 -07:00
John McCutchan c65114b6b4 Timeline API fixes for Flutter
API changes:

- Remove isolate specific Timeline APIs.
- Remove Dart_EmbedderTimelineGetTimeline callback.
- Add Dart_TimelineEvent so that arbitrary trace events can be added.

Internal changes:

- Remove isolate specific streams which were never used or controllable from outside the VM.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1811613002 .
2016-03-16 12:18:46 -07:00
Srdjan Mitrovic 60ce67d91f Fix sticky error propagation from thread to isolate
BUG=
R=asiva@google.com, iposva@google.com

Review URL: https://codereview.chromium.org/1769183003 .
2016-03-09 12:40:43 -08:00
John McCutchan f7aec4b5d2 Set last resume timestamp when isolate is made runnable
Fall out from https://codereview.chromium.org/1756393002/ caused a checked mode test failure: https://build.chromium.org/p/client.dart/builders/vm-linux-release-ia32-be/builds/11330/steps/checked%20vm%20tests/logs/stdio

Review URL: https://codereview.chromium.org/1759303002 .
2016-03-03 13:34:03 -08:00
Srdjan Mitrovic 4128c31916 Add thread safe constant canonicalization.
BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/1754813004 .
2016-03-02 12:12:48 -08:00
Siva Annamalai e83151cc77 - Add assertions in MutexLocker/MonitorLocker to ensure that the code enclosed
in these blocks will not have a safepoint operation
- changed boxed_field_list_monitor_ to boxed_field_list_mutex_ as we only
  need a mutex for guarding access to boxed_field_list_ as changed the
  lock to use SafepointMutexLocker as the list addition code could potentially
  allocate and result in GC (safepoint operation)
- Added a SafepointMonitorLocker as we have a function Isolate::VisitIsolates
  which could potentially have safepoints in the enclosed block.
- Make the lock around MegamorphicCacheTable::Lookup a SafepointMutexLocker
  as the look up code seems to be allocating memory while the lock is held.
- Changed the ThreadPool and MessageHandler code to account for the new
  MonitorLocker usage standard
- Fixed PortMap::PrintPortsForMessageHandler to use SafepointMutexLocker as
  the code it encloses calls into Dart
- Removed profiler_ field in class Profiler as it doesn't seem to be used.

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

Review URL: https://codereview.chromium.org/1748953003 .
2016-03-01 12:33:50 -08:00
Srdjan Mitrovic 88acc8ab01 Make type canonicalization thread safe
BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/1747073002 .
2016-03-01 12:12:16 -08:00
Ivan Posva 8d18298fed - Remove Isolate::Flags structure and store flags directly in isolate.
- Make enable_asserts, enable_type_checks, error_on_bad_override and
  error_on_bad_type release mode flags only.

BUG=
R=fschneider@google.com

Review URL: https://codereview.chromium.org/1737693003 .
2016-02-25 18:06:56 -08:00
John McCutchan fda3a9bc2b Remove more things
(stripped) dart_product before: 5307888
(stripped) dart_product after: 5275088

Reduction in size: 32800 bytes.

Removed entirely:

- debuginfo*
- elfgen*
- gdbjit*
- TraceBuffer
- vtune support

Removed in product:

- Compiler stats
- Code observers

R=asiva@google.com

Review URL: https://codereview.chromium.org/1711163002 .
2016-02-22 08:53:11 -08:00
Siva Annamalai 5322692506 Add a SafepointMutexLocker class so that it is possible to have scopes inside the MutexLocker which could potentially trigger safepoints.
R=srdjan@google.com

Review URL: https://codereview.chromium.org/1717803002 .
2016-02-19 16:03:52 -08:00
Florian Schneider 1f7458ddf8 VM: Precompiled rodata snapshot.
For now only contains PC descriptors and stack maps and one-byte strings.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1584443002 .
2016-02-15 09:15:26 +01:00
Ryan Macnak 65063a0927 Tests that --fields_may_be_reset, --link_natives_lazily, and --no_allow_absolute_addresses work in the JIT.
Minor change to make --no_allow_aboslute_address to work in the (non-IA32) JIT.

R=fschneider@google.com

Review URL: https://codereview.chromium.org/1679363002 .
2016-02-11 09:53:30 -08:00
Srdjan Mitrovic d26980f6fc Pass field to mutator thread so that it can be marked as boxed and all dependent code deoptimized (background compilation only).
BUG=
R=asiva@google.com

Review URL: https://codereview.chromium.org/1685963002 .
2016-02-10 12:33:47 -08:00
Todd Turnidge 2b74ea304d Don't allow oob message interrupts while executing constant expressions in the parser.
When this happens we can get complaints about circular dependencies
that don't really exist.  We were seeing this occasionally on
developer_extension_test.dart.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1666323002 .
2016-02-09 10:04:46 -08:00
John McCutchan e2e7af1229 Remove more feature in product mode
- Remove Timeline.
- Remove more vmservice code.
- Remove AST printing.
- Remove IL printing.
- Remove profiler.
- Remove thread interrupter.
- Remove disassembler.
- Remove Library::CheckFunctionFingerprints.

- Update test status files for product mode.

Size of dart_bootstrap before: 5287631
Size of dart_bootstrap after: 5112783

Reduction in size: 174848 bytes.

Total reduction in size (382734 + 174848): 557582 bytes.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1678203002 .
2016-02-09 08:45:32 -08:00
John McCutchan d295b9c311 Remove many features when building product mode
Move all JSON printing code from object.cc to object_service.cc.

Not compiled in:

- Service protocol
- Debugger
- Debugger API
- JSONStream
- ObjectIdRing
- Profiler service
- Object JSON printing

Size of dart_bootstrap before: 5670365 bytes
Size of dart_bootstrap after: 5287631 bytes

Reduction in size: 382734 bytes.

R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1660063002 .
2016-02-05 09:55:51 -08:00
John McCutchan 6f76e2af99 Add necessary support functions so that embedders can implemented pause on start and exit
- Add Dart_ShouldPauseOnStart, Dart_SetShouldPauseOnStart, Dart_IsPausedOnStart, Dart_SetPausedOnStart, Dart_ShouldPauseOnExit, Dart_SetShouldPauseOnExit, Dart_IsPausedOnExit, Dart_SetPausedOnExit to query and control pause on start / exit from outside of the default message handler.
- Add Dart_HandleMessages to process all regular messages from outside the default message handler.
- Allow per isolate overriding of pause on start / pause on exit flags.
- Set the resume_request bit when resuming from isolate start / exit.
- Clear the resume_request bit in the default message handler.
- Rename MessageHandler fields and accessors.
- Rename Isolate::Resume to Isolate::SetResumeRequest.

R=turnidge@google.com

Review URL: https://codereview.chromium.org/1665773004 .
2016-02-03 15:33:40 -08:00
John McCutchan d77d376124 Replace intptr_t with TokenDescriptor
- Use TokenDescriptor instead of intptr_t for all token positions.
- Use TokenDescriptor in raw_object instead of int32_t.
- TokenDescriptor is a POD with an int32_t (this shrinks the size of AST and IR nodes by 32-bits on 64-bit architectures).

There are some cleanups I plan on doing as a follow up CL:

- Replace TokenDescriptor::value() with TokenDescriptor::TokenPos()

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

Review URL: https://codereview.chromium.org/1644793002 .
2016-02-02 10:15:44 -08:00
Siva Annamalai e72c1fb47d Implement safepointing of threads :
- uses thread execution status transition to track when a thread is in a safepoint or needs to block for a safepoint
 - introduces a monitor per Thread object
 - uses a per thread safepoint handshake between the thread requesting a safepoint and the requested thread.

The ThreadRegistry class now contains only the thread list for an isolate and the functionality of scheduling a thread onto an Isolate and unscheduling it from teh isolate. We could fold this functionality into the Isolate class in a different CL.

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

Review URL: https://codereview.chromium.org/1541073002 .
2016-02-01 10:57:34 -08:00
Todd Turnidge bf130de6c0 Fix a bug where breakpoints where not getting properly deleted.
This bug was causing it to be impossible to single-step to locations
which had deleted breakpoints.

In fixing this problem, another issue was exposed, where, if we single
step while at a breakpoint, we would hit the same pc twice in the
debugger.  I have added a "skip step" mechanism which allows us to
skip the next single-step after a breakpoint.

Added a test.

Closes #25465

R=johnmccutchan@google.com

Review URL: https://codereview.chromium.org/1641793002 .
2016-01-27 11:49:56 -08:00
Ivan Posva 6d066c7e53 Add package config support to dart:isolate
- Add "static Future<Uri> get packageRoot;",
  "static Future<Uri> get packageConfig;" and
  "static Future<Uri> resolvePackageUri(Uri packageUri)" to Isolate class.
- Added "Uri packageRoot, Uri packageConfig, bool automaticPackageResolution: false" parameters to spawnUri.

BUG=
R=rmacnak@google.com

Review URL: https://codereview.chromium.org/1553233002 .
2016-01-12 18:19:04 -08:00