Fix Titzer bench on iOS.
authorkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Aug 2017 02:11:02 +0000 (02:11 +0000)
committerkeith_miller@apple.com <keith_miller@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 24 Aug 2017 02:11:02 +0000 (02:11 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175917

Reviewed by Ryosuke Niwa.

Currently, Titzer bench doesn't run on iOS since the benchmark
allocates lots of physical pages that it never actually writes
to. We limited the total number wasm physical pages to the ram
size of the phone, which caused us to fail a memory
allocation. This patch changes it so we will allocate up to 3x ram
size, which seems to fix the problem.

* wasm/WasmMemory.cpp:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@221126 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/wasm/WasmMemory.cpp

index 48fc403..3af0d63 100644 (file)
@@ -1,3 +1,19 @@
+2017-08-23  Keith Miller  <keith_miller@apple.com>
+
+        Fix Titzer bench on iOS.
+        https://bugs.webkit.org/show_bug.cgi?id=175917
+
+        Reviewed by Ryosuke Niwa.
+
+        Currently, Titzer bench doesn't run on iOS since the benchmark
+        allocates lots of physical pages that it never actually writes
+        to. We limited the total number wasm physical pages to the ram
+        size of the phone, which caused us to fail a memory
+        allocation. This patch changes it so we will allocate up to 3x ram
+        size, which seems to fix the problem.
+
+        * wasm/WasmMemory.cpp:
+
 2017-08-23  Yusuke Suzuki  <utatane.tea@gmail.com>
 
         Unreviewed, fix for test262
index c6be975..c5f48e9 100644 (file)
@@ -140,19 +140,24 @@ public:
         }
         return false;
     }
-    
+
+    // We allow people to "commit" more wasm memory than there is on the system since most of the time
+    // people don't actually write to most of that memory. There is some chance that this gets us
+    // JetSammed but that's possible anyway.
+    inline size_t memoryLimit() const { return ramSize() * 3; }
+
     // FIXME: Ideally, bmalloc would have this kind of mechanism. Then, we would just forward to that
     // mechanism here.
     MemoryResult::Kind tryAllocatePhysicalBytes(size_t bytes)
     {
         MemoryResult::Kind result = [&] {
             auto holder = holdLock(m_lock);
-            if (m_physicalBytes + bytes > ramSize())
+            if (m_physicalBytes + bytes > memoryLimit())
                 return MemoryResult::SyncGCAndRetry;
             
             m_physicalBytes += bytes;
             
-            if (m_physicalBytes >= ramSize() / 2)
+            if (m_physicalBytes >= memoryLimit() / 2)
                 return MemoryResult::SuccessAndAsyncGC;
             
             return MemoryResult::Success;
@@ -177,7 +182,7 @@ public:
     
     void dump(PrintStream& out) const
     {
-        out.print("memories =  ", m_memories.size(), "/", m_maxCount, ", bytes = ", m_physicalBytes, "/", ramSize());
+        out.print("virtual memories =  ", m_memories.size(), "/", m_maxCount, ", bytes = ", m_physicalBytes, "/", memoryLimit());
     }
     
 private: