mirror of
https://github.com/dart-lang/sdk
synced 2024-09-05 00:13:50 +00:00
![Martin Kustermann](/assets/img/avatar_default.png)
This CL: * Moves [Heap]/[SharedClassTable] from [Isolate] to [IsolateGroup], which will make all isolates in the group use the same heap. The GC will use the shared class table for object size information. * Adds support for entering/leaving an isolate group as a helper thread (e.g. via [Thread::EnterIsolateGroupAsHelper]). The current active isolate group can be accessed via TLS `IsolateGroup::Current()` or `Thread::isolate_group_`. When entering as a helper thread there will be no current isolate. * Changes the GC to use the above mechanism and ensures GC works without a currently active isolate. The GC will use information purely available via [IsolateGroup]. The GC will iterate all isolates within an isolate group e.g. for scanning roots. * Makes spawning of new isolates start in their own isolate group. Once the isolate is fully functional it's heap will be merged into the original isolate group * Moves ApiState, containing persistent and weak persistent handles, from [Isolate] to [IsolateGroup], plus adds appropriate locking. Issue https://github.com/dart-lang/sdk/issues/36097 Change-Id: Ia8e1d8aa78750e8400864200f4825395a182c004 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/126646 Commit-Queue: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
31 lines
755 B
C++
31 lines
755 B
C++
// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
|
|
// for details. All rights reserved. Use of this source code is governed by a
|
|
// BSD-style license that can be found in the LICENSE file.
|
|
|
|
#include "vm/thread_stack_resource.h"
|
|
|
|
#include "platform/assert.h"
|
|
#include "vm/isolate.h"
|
|
#include "vm/thread.h"
|
|
#include "vm/zone.h"
|
|
|
|
namespace dart {
|
|
|
|
ThreadStackResource::~ThreadStackResource() {
|
|
#if defined(DEBUG)
|
|
if (thread() != nullptr) {
|
|
BaseIsolate::AssertCurrent(reinterpret_cast<BaseIsolate*>(isolate()));
|
|
}
|
|
#endif
|
|
}
|
|
|
|
Isolate* ThreadStackResource::isolate() const {
|
|
return thread()->isolate();
|
|
}
|
|
|
|
IsolateGroup* ThreadStackResource::isolate_group() const {
|
|
return thread()->isolate_group();
|
|
}
|
|
|
|
} // namespace dart
|