| Index: runtime/vm/scavenger.h
|
| diff --git a/runtime/vm/scavenger.h b/runtime/vm/scavenger.h
|
| index 1fd7c9fe2bd88b93e8f26e2c6b7964e11a0408bc..c1d68337e53e91627cf4a0e583d1d77efc3afc5c 100644
|
| --- a/runtime/vm/scavenger.h
|
| +++ b/runtime/vm/scavenger.h
|
| @@ -121,6 +121,22 @@ class Scavenger {
|
|
|
| RawObject* FindObject(FindObjectVisitor* visitor) const;
|
|
|
| + uword TryAllocateNewTLAB(intptr_t size) {
|
| + ASSERT(Utils::IsAligned(size, kObjectAlignment));
|
| + ASSERT(heap_ != Dart::vm_isolate()->heap());
|
| + ASSERT(!scavenging_);
|
| + uword result = top_;
|
| + intptr_t remaining = end_ - top_;
|
| + if (remaining < size) {
|
| + return 0;
|
| + }
|
| + ASSERT(to_->Contains(result));
|
| + ASSERT((result & kObjectAlignmentMask) == object_alignment_);
|
| + top_ += size;
|
| + ASSERT(to_->Contains(top_) || (top_ == to_->end()));
|
| + return result;
|
| + }
|
| +
|
| uword AllocateGC(intptr_t size) {
|
| ASSERT(Utils::IsAligned(size, kObjectAlignment));
|
| ASSERT(heap_ != Dart::vm_isolate()->heap());
|
| @@ -143,6 +159,8 @@ class Scavenger {
|
| ASSERT(heap_ != Dart::vm_isolate()->heap());
|
| ASSERT(thread->IsMutatorThread());
|
| ASSERT(thread->isolate()->IsMutatorThreadScheduled());
|
| + ASSERT(thread->top() <= top_);
|
| + ASSERT(thread->end() == top_);
|
| #if defined(DEBUG)
|
| if (FLAG_gc_at_alloc) {
|
| ASSERT(!scavenging_);
|
| @@ -215,7 +233,9 @@ class Scavenger {
|
| void AllocateExternal(intptr_t size);
|
| void FreeExternal(intptr_t size);
|
|
|
| - void FlushTLS() const;
|
| + uword FlushTLS() const;
|
| + void UnflushTLS(uword value) const;
|
| + uword FirstObjectStart() const { return to_->start() | object_alignment_; }
|
|
|
| private:
|
| // Ids for time and data records in Heap::GCStats.
|
| @@ -234,7 +254,6 @@ class Scavenger {
|
| kToKBAfterStoreBuffer = 3
|
| };
|
|
|
| - uword FirstObjectStart() const { return to_->start() | object_alignment_; }
|
| SemiSpace* Prologue(Isolate* isolate, bool invoke_api_callbacks);
|
| void IterateStoreBuffers(Isolate* isolate, ScavengerVisitor* visitor);
|
| void IterateObjectIdTable(Isolate* isolate, ScavengerVisitor* visitor);
|
|
|