Commit Graph

8 Commits

Author SHA1 Message Date
koda@google.com 1e3b00d72e Automatic thread cleanup on non-Windows platforms.
Issue 23474 is tracking Windows support (use Chromium's method).

BUG=23474
R=iposva@google.com

Review URL: https://codereview.chromium.org//1134003005

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45817 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-15 17:30:33 +00:00
koda@google.com c026736cff Fix race in debug assertion.
Change order of initialization for the two-way pointers between Isolate and Thread.

This only affects the debug assertion in Isolate::mutator_thread().

R=iposva@google.com

Review URL: https://codereview.chromium.org//1138643006

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45814 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-15 16:28:26 +00:00
koda@google.com 0e04456696 Remove fake isolate from concurrent sweeper and extend lifetime of VM threads.
* Use real isolate in concurrent sweeper rather than shallow copy.

The only part of the isolate, other than the page being swept, used by the sweeper is the class table (via RawObject::Size), which is now safe to read concurrently (copy-on-write).

* Do not eagerly destroy a VM thread whenever it exits an isolate.

This extends the lifetime of a VM thread across entering/exiting multiple isolates. This is necessary in case an embedder callback executes during
compilation and switches/spawns isolates.

For embedder threads, since there is no API to signal "I'm done using the VM in this thread", this means we leak the (small) Thread structure.

For our own ThreadPool threads, we explicitly clean up.

BUG=23153
R=iposva@google.com

Review URL: https://codereview.chromium.org//1136143003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45810 260f80e4-7a28-3924-810f-c04153c831b5
2015-05-15 12:48:49 +00:00
johnmccutchan@google.com e4f20705f5 Fix idle ticks during isolate startup
- Change default isolate vm tag from idle to Embedder
- When a thread is exiting an isolate, only set the Idle tag if the isolate has been made runnable. Set LoadWait tag otherwise.

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

Review URL: https://codereview.chromium.org//1107213003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45436 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-28 00:32:44 +00:00
koda@google.com c042387868 Move CHA field back to Isolate, pending a permanent fix.
Since the Thread structure is currently cleared on Enter/ExitIsolate,
there is a risk that CHA is cleared if an embedder callback executes during
compilation and switches/spawns isolates. This CL eliminates that risk.

However, Isolate is still not a good long-term place for CHA,
since it doesn't fit with a concurrent compilation model. Issue 23153 tracks
the work towards a permanent solution that couples its life cycle with
compilation.

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

Review URL: https://codereview.chromium.org//1061243003

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45121 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-13 20:59:51 +00:00
koda@google.com f4419287aa Prepares for multiple threads by further decoupling Thread from Isolate.
- Replace Isolate::SetCurrent with more explicit Thread::Enter/ExitIsolate.
- Lazily initialize Thread instances when entering an isolate, to avoid new API calls for embedders.

R=asiva@google.com

Review URL: https://codereview.chromium.org//1041523002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44835 260f80e4-7a28-3924-810f-c04153c831b5
2015-04-01 17:48:11 +00:00
koda@google.com 642ff6ebb4 volatile -> const, where possible
These 'volatile' modifiers were added to silence warnings about setjmp/longjmp clobbering, but 'const' works too and allows more optimization.

TBR=iposva@google.com

Review URL: https://codereview.chromium.org//1037333002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44749 260f80e4-7a28-3924-810f-c04153c831b5
2015-03-27 18:11:51 +00:00
koda@google.com 89daba5454 Split Thread/Isolate instances, but still maintain 1:1 relationship.
The life cycle of Thread is still coupled with the life cycle of Isolate, but the added indirection allows the migration work to proceed, at negligible performance impact.

This is a small step towards making Thread different from Isolate and allow a many-to-one relationship. In particular, in prepares for being able to have the sweeper have some minimal separate state from the main thread (eliminating the current fake-isolate hack).

Concretely, it moves the thread-local storage key into the Thread class, but for now, keeps a "main_thread" in Isolate for quick access in native/runtime_entry.
Also moves cha_ field to Thread (the first of many fields that will move).

To summarize, this CL enables the next steps:
- moving other fields from Isolate to Thread without circular include-dependencies
- replacing sweeper's fake Isolate with a helper Thread (referencing the original Isolate)

Also add 'volatile' to local variables that clang thinks could be clobbered.

R=asiva@google.com

Review URL: https://codereview.chromium.org//1037453002

git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@44703 260f80e4-7a28-3924-810f-c04153c831b5
2015-03-25 22:41:33 +00:00