Chromium Code Reviews| Index: runtime/vm/scavenger.h |
| diff --git a/runtime/vm/scavenger.h b/runtime/vm/scavenger.h |
| index 1fd7c9fe2bd88b93e8f26e2c6b7964e11a0408bc..99ecd21e52dc1c767f991302c5c86dfde179aaa2 100644 |
| --- a/runtime/vm/scavenger.h |
| +++ b/runtime/vm/scavenger.h |
| @@ -121,6 +121,25 @@ class Scavenger { |
| RawObject* FindObject(FindObjectVisitor* visitor) const; |
| + uword TryAllocateNewTLAB(Thread* thread, 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())); |
| + ASSERT(result < top_); |
| + thread->set_top(result); |
| + thread->set_end(top_); |
| + return result; |
| + } |
| + |
| uword AllocateGC(intptr_t size) { |
| ASSERT(Utils::IsAligned(size, kObjectAlignment)); |
| ASSERT(heap_ != Dart::vm_isolate()->heap()); |
| @@ -143,6 +162,8 @@ class Scavenger { |
| ASSERT(heap_ != Dart::vm_isolate()->heap()); |
| ASSERT(thread->IsMutatorThread()); |
| ASSERT(thread->isolate()->IsMutatorThreadScheduled()); |
| + ASSERT(thread->top() <= top_); |
| + ASSERT(thread->end() == 0 || thread->end() == top_); |
|
rmacnak
2017/07/26 21:30:30
ASSERT((thread->end() == 0) || (thread->end() == t
danunez
2017/07/26 22:07:12
Done.
|
| #if defined(DEBUG) |
| if (FLAG_gc_at_alloc) { |
| ASSERT(!scavenging_); |
| @@ -215,7 +236,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 +257,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); |