Chromium Code Reviews| Index: src/vm/immutable_heap.h |
| diff --git a/src/vm/immutable_heap.h b/src/vm/immutable_heap.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d4340940372d89e7e2a1186a3fb04359b777c0a9 |
| --- /dev/null |
| +++ b/src/vm/immutable_heap.h |
| @@ -0,0 +1,68 @@ |
| +// Copyright (c) 2015, the Fletch 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.md file. |
| + |
| +#ifndef SRC_VM_IMMUTABLE_HEAP_H_ |
| +#define SRC_VM_IMMUTABLE_HEAP_H_ |
| + |
| +#include "src/shared/globals.h" |
| +#include "src/vm/heap.h" |
| + |
| +namespace fletch { |
| + |
| +class ImmutableHeap { |
| + public: |
| + ImmutableHeap(); |
| + ~ImmutableHeap(); |
| + |
| + // Will return a [Heap] which will have an allocation budget which is |
| + // ``. |
|
Mads Ager (google)
2015/08/05 10:19:02
Finish comment please.
kustermann
2015/08/05 11:11:46
Done.
|
| + Heap* AcquirePart(); |
| + // Will return `true` if the caller should trigger an immutable GC. |
|
Mads Ager (google)
2015/08/05 10:19:02
Newline before comment?
kustermann
2015/08/05 11:11:46
Done.
|
| + // |
| + // It is assumed that this function gets only called on allocation failures. |
|
Mads Ager (google)
2015/08/05 10:19:02
gets only called -> is called only
kustermann
2015/08/05 11:11:46
Done.
|
| + bool ReleasePart(Heap* part); |
| + void MergeParts(); |
|
Mads Ager (google)
2015/08/05 10:19:03
Document this one as well?
kustermann
2015/08/05 11:11:46
Done.
|
| + |
| + // This method can only be called if |
| + // * all acquired parts were released again |
| + // * all cached parts were merged via [MergeParts] |
| + void IterateProgramPointers(PointerVisitor* visitor); |
| + |
| + // This method can only be called if |
| + // * all acquired parts were released again |
| + // * all cached parts were merged via [MergeParts] |
| + Heap* heap() { |
| + ASSERT(outstanding_parts_ == 0 && cached_parts_ == NULL); |
| + return &heap_; |
| + } |
| + |
| + private: |
| + // TODO(kustermann): Instead of having a linked list which requires heap |
| + // allocations we should make a simple version of `std::vector` and use it |
| + // here. |
| + // [The number of parts is almost always fixed (i.e. the number of threads)] |
| + struct CachedHeapPart { |
|
Mads Ager (google)
2015/08/05 10:19:02
Let's just use a class instead of a struct. It is
kustermann
2015/08/05 11:11:46
"Let's just use a class instead of a struct. It is
|
| + CachedHeapPart() : heap_part_(NULL), next_(NULL) {} |
| + Heap* heap_part_; |
| + struct CachedHeapPart* next_; |
| + }; |
| + |
| + private: |
|
Mads Ager (google)
2015/08/05 10:19:03
Remove extra 'private:'
kustermann
2015/08/05 11:11:46
Done.
|
| + bool HasCachedParts() { return cached_parts_ != NULL; } |
| + void AddCachedPart(Heap* heap); |
| + Heap* RemoveCachedPart(); |
| + |
| + int number_of_hw_threads_; |
| + |
| + Mutex* heap_mutex_; |
| + Heap heap_; |
| + int outstanding_parts_; |
| + CachedHeapPart* cached_parts_; |
|
Mads Ager (google)
2015/08/05 10:19:02
I guess these are the parts that are no longer out
kustermann
2015/08/05 11:11:46
Done.
Picked "number_of_unmerged_parts_" and remo
|
| + int ticks_; |
| +}; |
| + |
| +} // namespace fletch |
| + |
| + |
| +#endif // SRC_VM_IMMUTABLE_HEAP_H_ |