Index: src/heap/array-buffer-tracker.h |
diff --git a/src/heap/array-buffer-tracker.h b/src/heap/array-buffer-tracker.h |
index 6ace794194262d652b9153b7ec9358ddf436e659..3a57ab70cd0bb8201fc388efce4498f6ab213fbb 100644 |
--- a/src/heap/array-buffer-tracker.h |
+++ b/src/heap/array-buffer-tracker.h |
@@ -8,7 +8,6 @@ |
#include <unordered_map> |
#include "src/allocation.h" |
-#include "src/base/atomic-utils.h" |
#include "src/base/platform/mutex.h" |
#include "src/globals.h" |
@@ -19,61 +18,40 @@ |
class JSArrayBuffer; |
class Page; |
-class ArrayBufferTracker { |
+class ArrayBufferTracker : public AllStatic { |
public: |
enum ProcessingMode { |
kUpdateForwardedRemoveOthers, |
kUpdateForwardedKeepOthers, |
}; |
- // Returns whether a buffer is currently tracked. |
- static bool IsTracked(JSArrayBuffer* buffer); |
- |
- explicit ArrayBufferTracker(Heap* heap) |
- : heap_(heap), |
- concurrently_freed_(0), |
- retained_from_new_space_(0), |
- retained_from_old_space_(0) {} |
- |
// The following methods are used to track raw C++ pointers to externally |
// allocated memory used as backing store in live array buffers. |
// Register/unregister a new JSArrayBuffer |buffer| for tracking. Guards all |
// access to the tracker by taking the page lock for the corresponding page. |
- inline void RegisterNew(JSArrayBuffer* buffer); |
- inline void Unregister(JSArrayBuffer* buffer); |
+ inline static void RegisterNew(Heap* heap, JSArrayBuffer* buffer); |
+ inline static void Unregister(Heap* heap, JSArrayBuffer* buffer); |
// Frees all backing store pointers for dead JSArrayBuffers in new space. |
// Does not take any locks and can only be called during Scavenge. |
- void FreeDeadInNewSpace(); |
+ static void FreeDeadInNewSpace(Heap* heap); |
// Frees all backing store pointers for dead JSArrayBuffer on a given page. |
// Requires marking information to be present. Requires the page lock to be |
// taken by the caller. |
- void FreeDead(Page* page); |
+ static void FreeDead(Page* page); |
// Frees all remaining, live or dead, array buffers on a page. Only useful |
// during tear down. |
- void FreeAll(Page* page); |
+ static void FreeAll(Page* page); |
// Processes all array buffers on a given page. |mode| specifies the action |
// to perform on the buffers. Returns whether the tracker is empty or not. |
- bool ProcessBuffers(Page* page, ProcessingMode mode); |
+ static bool ProcessBuffers(Page* page, ProcessingMode mode); |
- void AccountForConcurrentlyFreedMemory(); |
- |
- size_t retained_from_new_space() { return retained_from_new_space_.Value(); } |
- size_t retained_from_old_space() { return retained_from_old_space_.Value(); } |
- |
- private: |
- Heap* heap_; |
- |
- base::AtomicNumber<size_t> concurrently_freed_; |
- |
- // Number of bytes retained from new space. |
- base::AtomicNumber<size_t> retained_from_new_space_; |
- // Number of bytes retained from old space. |
- base::AtomicNumber<size_t> retained_from_old_space_; |
+ // Returns whether a buffer is currently tracked. |
+ static bool IsTracked(JSArrayBuffer* buffer); |
}; |
// LocalArrayBufferTracker tracks internalized array buffers. |
@@ -87,32 +65,23 @@ |
enum CallbackResult { kKeepEntry, kUpdateEntry, kRemoveEntry }; |
enum FreeMode { kFreeDead, kFreeAll }; |
- struct ProcessResult { |
- ProcessResult(size_t freed, size_t promoted) |
- : freed(freed), promoted(promoted) {} |
- |
- size_t freed; |
- size_t promoted; |
- }; |
- |
explicit LocalArrayBufferTracker(Heap* heap) : heap_(heap) {} |
~LocalArrayBufferTracker(); |
inline void Add(Key key, const Value& value); |
inline Value Remove(Key key); |
- // Frees up array buffers determined by |free_mode|. Returns statistics in |
- // ProcessResult. |
+ // Frees up array buffers determined by |free_mode|. |
template <FreeMode free_mode> |
- ProcessResult Free(); |
+ void Free(); |
// Processes buffers one by one. The CallbackResult of the callback decides |
- // what action to take on the buffer. Returns statistics in ProcessResult. |
+ // what action to take on the buffer. |
// |
// Callback should be of type: |
// CallbackResult fn(JSArrayBuffer* buffer, JSArrayBuffer** new_buffer); |
template <typename Callback> |
- ProcessResult Process(Callback callback); |
+ void Process(Callback callback); |
bool IsEmpty() { return array_buffers_.empty(); } |