Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1919)

Unified Diff: runtime/vm/dart_api_state.h

Issue 1459173004: Remove support for object grouping during Garbage Collection (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: code-review Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/gc_marker.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/dart_api_state.h
diff --git a/runtime/vm/dart_api_state.h b/runtime/vm/dart_api_state.h
index 207aab425acc18a57be1f76b807d2252c6db02ad..c208065d722a12204a59c8c07cfef687c7a378b0 100644
--- a/runtime/vm/dart_api_state.h
+++ b/runtime/vm/dart_api_state.h
@@ -203,7 +203,6 @@ class FinalizablePersistentHandle {
public:
static FinalizablePersistentHandle* New(
Isolate* isolate,
- bool is_prologue,
const Object& object,
void* peer,
Dart_WeakPersistentHandleFinalizer callback,
@@ -251,22 +250,13 @@ class FinalizablePersistentHandle {
set_external_size(0);
}
- bool IsPrologueWeakPersistent() {
- return PrologueWeakBit::decode(external_data_);
- }
-
- void SetPrologueWeakPersistent(bool value) {
- external_data_ = PrologueWeakBit::update(value, external_data_);
- }
-
static FinalizablePersistentHandle* Cast(Dart_WeakPersistentHandle handle);
private:
enum {
kExternalNewSpaceBit = 0,
- kPrologueWeakBit = 1,
- kExternalSizeBits = 2,
- kExternalSizeBitsSize = (kBitsPerWord - 2),
+ kExternalSizeBits = 1,
+ kExternalSizeBitsSize = (kBitsPerWord - 1),
};
// This part of external_data_ is the number of externally allocated bytes.
@@ -277,8 +267,6 @@ class FinalizablePersistentHandle {
// This bit of external_data_ is true if the referent was created in new
// space and UpdateRelocated has not yet detected any promotion.
class ExternalNewSpaceBit : public BitField<bool, kExternalNewSpaceBit, 1> {};
- // This bit is used to indicate that it is a prologue weak persistent handle.
- class PrologueWeakBit : public BitField<bool, kPrologueWeakBit, 1> {};
friend class FinalizablePersistentHandles;
@@ -673,11 +661,6 @@ class ApiGrowableArray : public BaseGrowableArray<T, ValueObject> {
};
-// Forward declarations.
-class WeakReferenceSetBuilder;
-class WeakReferenceSet;
-
-
// Implementation of the API State used in dart api for maintaining
// local scopes, persistent handles etc. These are setup on a per isolate
// basis and destroyed when the isolate is shutdown.
@@ -685,10 +668,8 @@ class ApiState {
public:
ApiState() : persistent_handles_(),
weak_persistent_handles_(),
- prologue_weak_persistent_handles_(),
reusable_scope_(NULL),
top_scope_(NULL),
- delayed_weak_reference_sets_(NULL),
null_(NULL),
true_(NULL),
false_(NULL),
@@ -732,17 +713,6 @@ class ApiState {
return weak_persistent_handles_;
}
- FinalizablePersistentHandles& prologue_weak_persistent_handles() {
- return prologue_weak_persistent_handles_;
- }
-
- WeakReferenceSet* delayed_weak_reference_sets() {
- return delayed_weak_reference_sets_;
- }
- void set_delayed_weak_reference_sets(WeakReferenceSet* reference_set) {
- delayed_weak_reference_sets_ = reference_set;
- }
-
void UnwindScopes(uword stack_marker) {
// Unwind all scopes using the same stack_marker, i.e. all scopes allocated
// under the same top_exit_frame_info.
@@ -755,29 +725,17 @@ class ApiState {
}
}
- void VisitObjectPointers(ObjectPointerVisitor* visitor,
- bool visit_prologue_weak_handles) {
+ void VisitObjectPointers(ObjectPointerVisitor* visitor) {
ApiLocalScope* scope = top_scope_;
while (scope != NULL) {
scope->local_handles()->VisitObjectPointers(visitor);
scope = scope->previous();
}
persistent_handles().VisitObjectPointers(visitor);
- if (visit_prologue_weak_handles) {
- prologue_weak_persistent_handles().VisitObjectPointers(visitor);
- }
}
- void VisitWeakHandles(HandleVisitor* visitor,
- bool visit_prologue_weak_handles) {
+ void VisitWeakHandles(HandleVisitor* visitor) {
weak_persistent_handles().VisitHandles(visitor);
- if (visit_prologue_weak_handles) {
- prologue_weak_persistent_handles().VisitHandles(visitor);
- }
- }
-
- void VisitPrologueWeakHandles(HandleVisitor* visitor) {
- prologue_weak_persistent_handles().VisitHandles(visitor);
}
bool IsValidLocalHandle(Dart_Handle object) const {
@@ -799,11 +757,6 @@ class ApiState {
return weak_persistent_handles_.IsValidHandle(object);
}
- bool IsValidPrologueWeakPersistentHandle(
- Dart_WeakPersistentHandle object) const {
- return prologue_weak_persistent_handles_.IsValidHandle(object);
- }
-
bool IsProtectedHandle(PersistentHandle* object) const {
if (object == NULL) return false;
return object == null_ || object == true_ || object == false_;
@@ -845,19 +798,13 @@ class ApiState {
return acquired_error_;
}
- WeakReferenceSetBuilder* NewWeakReferenceSetBuilder();
-
- void DelayWeakReferenceSet(WeakReferenceSet* reference_set);
-
WeakTable* acquired_table() { return &acquired_table_; }
private:
PersistentHandles persistent_handles_;
FinalizablePersistentHandles weak_persistent_handles_;
- FinalizablePersistentHandles prologue_weak_persistent_handles_;
ApiLocalScope* reusable_scope_;
ApiLocalScope* top_scope_;
- WeakReferenceSet* delayed_weak_reference_sets_;
WeakTable acquired_table_;
// Persistent handles to important objects.
@@ -870,123 +817,16 @@ class ApiState {
};
-class WeakReferenceSet {
- public:
- explicit WeakReferenceSet(Zone* zone)
- : next_(NULL),
- keys_(1, zone),
- values_(1, zone) {
- }
- ~WeakReferenceSet() {}
-
- WeakReferenceSet* next() const { return next_; }
-
- intptr_t num_keys() const { return keys_.length(); }
- RawObject** get_key(intptr_t i) {
- ASSERT(i >= 0);
- ASSERT(i < num_keys());
- FinalizablePersistentHandle* ref =
- FinalizablePersistentHandle::Cast(keys_[i]);
- return ref->raw_addr();
- }
-
- intptr_t num_values() const { return values_.length(); }
- RawObject** get_value(intptr_t i) {
- ASSERT(i >= 0);
- ASSERT(i < num_values());
- FinalizablePersistentHandle* ref =
- FinalizablePersistentHandle::Cast(values_[i]);
- return ref->raw_addr();
- }
-
- bool SingletonKeyEqualsValue() const {
- ASSERT((num_keys() == 1) && (num_values() == 1));
- return (keys_[0] == values_[0]);
- }
-
- void Append(Dart_WeakPersistentHandle key, Dart_WeakPersistentHandle value) {
- keys_.Add(key);
- values_.Add(value);
- }
-
- void AppendKey(Dart_WeakPersistentHandle key) {
- keys_.Add(key);
- }
-
- void AppendValue(Dart_WeakPersistentHandle value) {
- values_.Add(value);
- }
-
- static WeakReferenceSet* Pop(WeakReferenceSet** queue) {
- ASSERT(queue != NULL);
- WeakReferenceSet* head = *queue;
- if (head != NULL) {
- *queue = head->next();
- head->next_ = NULL;
- }
- return head;
- }
-
- static void Push(WeakReferenceSet* reference_set, WeakReferenceSet** queue) {
- ASSERT(reference_set != NULL);
- ASSERT(queue != NULL);
- reference_set->next_ = *queue;
- *queue = reference_set;
- }
-
- void* operator new(uword size, Zone* zone) {
- return reinterpret_cast<void*>(zone->AllocUnsafe(size));
- }
-
- // Disallow explicit deallocation of WeakReferenceSet.
- void operator delete(void* pointer) { UNREACHABLE(); }
-
- private:
- WeakReferenceSet* next_;
- ApiGrowableArray<Dart_WeakPersistentHandle> keys_;
- ApiGrowableArray<Dart_WeakPersistentHandle> values_;
-
- DISALLOW_COPY_AND_ASSIGN(WeakReferenceSet);
-};
-
-
-class WeakReferenceSetBuilder {
- public:
- ApiState* api_state() const {
- return api_state_;
- }
-
- WeakReferenceSet* NewWeakReferenceSet() {
- return new (zone_) WeakReferenceSet(zone_);
- }
-
- private:
- explicit WeakReferenceSetBuilder(ApiState* api_state)
- : api_state_(api_state),
- zone_(api_state->top_scope()->zone()) {
- }
-
- ApiState* api_state_;
- Zone* zone_;
-
- friend class ApiState;
- DISALLOW_IMPLICIT_CONSTRUCTORS(WeakReferenceSetBuilder);
-};
-
-
inline FinalizablePersistentHandle* FinalizablePersistentHandle::New(
Isolate* isolate,
- bool is_prologue,
const Object& object,
void* peer,
Dart_WeakPersistentHandleFinalizer callback,
intptr_t external_size) {
ApiState* state = isolate->api_state();
ASSERT(state != NULL);
- FinalizablePersistentHandle* ref = is_prologue ?
- state->prologue_weak_persistent_handles().AllocateHandle() :
+ FinalizablePersistentHandle* ref =
state->weak_persistent_handles().AllocateHandle();
- ref->SetPrologueWeakPersistent(is_prologue);
ref->set_raw(object);
ref->set_peer(peer);
ref->set_callback(callback);
« no previous file with comments | « runtime/vm/dart_api_impl_test.cc ('k') | runtime/vm/gc_marker.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698