Unreviewed, rolling out r222791 and r222873.
[WebKit-https.git] / Source / JavaScriptCore / wasm / WasmMemory.h
index cd586a8..60a9bb7 100644 (file)
 
 #if ENABLE(WEBASSEMBLY)
 
-#include "WasmMemoryMode.h"
 #include "WasmPageCount.h"
 
-#include <wtf/Expected.h>
-#include <wtf/Function.h>
 #include <wtf/RefCounted.h>
 #include <wtf/RefPtr.h>
 
@@ -41,8 +38,18 @@ class PrintStream;
 
 namespace JSC {
 
+class VM;
+
 namespace Wasm {
 
+// FIXME: We should support other modes. see: https://bugs.webkit.org/show_bug.cgi?id=162693
+enum class MemoryMode : uint8_t {
+    BoundsChecking,
+    Signaling
+};
+static constexpr size_t NumberOfMemoryModes = 2;
+JS_EXPORT_PRIVATE const char* makeString(MemoryMode);
+
 class Memory : public RefCounted<Memory> {
     WTF_MAKE_NONCOPYABLE(Memory);
     WTF_MAKE_FAST_ALLOCATED;
@@ -51,12 +58,7 @@ public:
 
     explicit operator bool() const { return !!m_memory; }
     
-    enum NotifyPressure { NotifyPressureTag };
-    enum SyncTryToReclaim { SyncTryToReclaimTag };
-    enum GrowSuccess { GrowSuccessTag };
-
-    static RefPtr<Memory> create();
-    static RefPtr<Memory> create(PageCount initial, PageCount maximum, WTF::Function<void(NotifyPressure)>&& notifyMemoryPressure, WTF::Function<void(SyncTryToReclaim)>&& syncTryToReclaimMemory, WTF::Function<void(GrowSuccess, PageCount, PageCount)>&& growSuccessCallback);
+    static RefPtr<Memory> create(VM&, PageCount initial, PageCount maximum);
 
     ~Memory();
 
@@ -73,34 +75,22 @@ public:
 
     MemoryMode mode() const { return m_mode; }
 
-    enum class GrowFailReason {
-        InvalidDelta,
-        InvalidGrowSize,
-        WouldExceedMaximum,
-        OutOfMemory,
-    };
-    Expected<PageCount, GrowFailReason> grow(PageCount);
+    // grow() should only be called from the JSWebAssemblyMemory object since that object needs to update internal
+    // pointers with the current base and size.
+    bool grow(VM&, PageCount);
 
     void check() {  ASSERT(!deletionHasBegun()); }
-
-    static ptrdiff_t offsetOfMemory() { return OBJECT_OFFSETOF(Memory, m_memory); }
-    static ptrdiff_t offsetOfSize() { return OBJECT_OFFSETOF(Memory, m_size); }
-
 private:
-    Memory();
-    Memory(void* memory, PageCount initial, PageCount maximum, size_t mappedCapacity, MemoryMode, WTF::Function<void(NotifyPressure)>&& notifyMemoryPressure, WTF::Function<void(SyncTryToReclaim)>&& syncTryToReclaimMemory, WTF::Function<void(GrowSuccess, PageCount, PageCount)>&& growSuccessCallback);
-    Memory(PageCount initial, PageCount maximum, WTF::Function<void(NotifyPressure)>&& notifyMemoryPressure, WTF::Function<void(SyncTryToReclaim)>&& syncTryToReclaimMemory, WTF::Function<void(GrowSuccess, PageCount, PageCount)>&& growSuccessCallback);
+    Memory(void* memory, PageCount initial, PageCount maximum, size_t mappedCapacity, MemoryMode);
+    Memory(PageCount initial, PageCount maximum);
 
-    // FIXME: we cache these on the instances to avoid a load on instance->instance calls. This will require updating all the instances when grow is called. https://bugs.webkit.org/show_bug.cgi?id=177305
+    // FIXME: we should move these to the instance to avoid a load on instance->instance calls.
     void* m_memory { nullptr };
     size_t m_size { 0 };
     PageCount m_initial;
     PageCount m_maximum;
     size_t m_mappedCapacity { 0 };
     MemoryMode m_mode { MemoryMode::BoundsChecking };
-    WTF::Function<void(NotifyPressure)> m_notifyMemoryPressure;
-    WTF::Function<void(SyncTryToReclaim)> m_syncTryToReclaimMemory;
-    WTF::Function<void(GrowSuccess, PageCount, PageCount)> m_growSuccessCallback;
 };
 
 } } // namespace JSC::Wasm