Title: [122624] trunk/Source/_javascript_Core
- Revision
- 122624
- Author
- [email protected]
- Date
- 2012-07-13 13:12:36 -0700 (Fri, 13 Jul 2012)
Log Message
[BlackBerry] Implement GCActivityCallback with platform timer
https://bugs.webkit.org/show_bug.cgi?id=90175
Patch by Yong Li <[email protected]> on 2012-07-13
Reviewed by Rob Buis.
Implement GCActivityCallback and HeapTimer for BlackBerry port.
* heap/HeapTimer.cpp:
(JSC):
(JSC::HeapTimer::HeapTimer):
(JSC::HeapTimer::~HeapTimer):
(JSC::HeapTimer::timerDidFire):
(JSC::HeapTimer::synchronize):
(JSC::HeapTimer::invalidate):
(JSC::HeapTimer::didStartVMShutdown):
* heap/HeapTimer.h:
(HeapTimer):
* runtime/GCActivityCallbackBlackBerry.cpp:
(JSC):
(JSC::DefaultGCActivityCallback::doWork):
(JSC::DefaultGCActivityCallback::didAllocate):
(JSC::DefaultGCActivityCallback::willCollect):
(JSC::DefaultGCActivityCallback::cancel):
Modified Paths
Diff
Modified: trunk/Source/_javascript_Core/ChangeLog (122623 => 122624)
--- trunk/Source/_javascript_Core/ChangeLog 2012-07-13 19:58:47 UTC (rev 122623)
+++ trunk/Source/_javascript_Core/ChangeLog 2012-07-13 20:12:36 UTC (rev 122624)
@@ -1,3 +1,29 @@
+2012-07-13 Yong Li <[email protected]>
+
+ [BlackBerry] Implement GCActivityCallback with platform timer
+ https://bugs.webkit.org/show_bug.cgi?id=90175
+
+ Reviewed by Rob Buis.
+
+ Implement GCActivityCallback and HeapTimer for BlackBerry port.
+
+ * heap/HeapTimer.cpp:
+ (JSC):
+ (JSC::HeapTimer::HeapTimer):
+ (JSC::HeapTimer::~HeapTimer):
+ (JSC::HeapTimer::timerDidFire):
+ (JSC::HeapTimer::synchronize):
+ (JSC::HeapTimer::invalidate):
+ (JSC::HeapTimer::didStartVMShutdown):
+ * heap/HeapTimer.h:
+ (HeapTimer):
+ * runtime/GCActivityCallbackBlackBerry.cpp:
+ (JSC):
+ (JSC::DefaultGCActivityCallback::doWork):
+ (JSC::DefaultGCActivityCallback::didAllocate):
+ (JSC::DefaultGCActivityCallback::willCollect):
+ (JSC::DefaultGCActivityCallback::cancel):
+
2012-07-13 Patrick Gansterer <[email protected]>
[WIN] Fix compilation of DFGRepatch.cpp
Modified: trunk/Source/_javascript_Core/heap/HeapTimer.cpp (122623 => 122624)
--- trunk/Source/_javascript_Core/heap/HeapTimer.cpp 2012-07-13 19:58:47 UTC (rev 122623)
+++ trunk/Source/_javascript_Core/heap/HeapTimer.cpp 2012-07-13 20:12:36 UTC (rev 122624)
@@ -98,8 +98,38 @@
agent->m_shutdownMutex.unlock();
}
+#elif PLATFORM(BLACKBERRY)
+
+HeapTimer::HeapTimer(JSGlobalData* globalData)
+ : m_globalData(globalData)
+ , m_timer(this, &HeapTimer::timerDidFire)
+{
+}
+
+HeapTimer::~HeapTimer()
+{
+}
+
+void HeapTimer::timerDidFire()
+{
+ doWork();
+}
+
+void HeapTimer::synchronize()
+{
+}
+
+void HeapTimer::invalidate()
+{
+}
+
+void HeapTimer::didStartVMShutdown()
+{
+ delete this;
+}
+
#else
-
+
HeapTimer::HeapTimer(JSGlobalData* globalData)
: m_globalData(globalData)
{
Modified: trunk/Source/_javascript_Core/heap/HeapTimer.h (122623 => 122624)
--- trunk/Source/_javascript_Core/heap/HeapTimer.h 2012-07-13 19:58:47 UTC (rev 122623)
+++ trunk/Source/_javascript_Core/heap/HeapTimer.h 2012-07-13 20:12:36 UTC (rev 122624)
@@ -31,6 +31,8 @@
#if USE(CF)
#include <CoreFoundation/CoreFoundation.h>
+#elif PLATFORM(BLACKBERRY)
+#include <BlackBerryPlatformTimer.h>
#endif
namespace JSC {
@@ -63,6 +65,10 @@
CFRunLoopTimerContext m_context;
Mutex m_shutdownMutex;
+#elif PLATFORM(BLACKBERRY)
+ void timerDidFire();
+
+ BlackBerry::Platform::Timer<HeapTimer> m_timer;
#endif
private:
Modified: trunk/Source/_javascript_Core/runtime/GCActivityCallbackBlackBerry.cpp (122623 => 122624)
--- trunk/Source/_javascript_Core/runtime/GCActivityCallbackBlackBerry.cpp 2012-07-13 19:58:47 UTC (rev 122623)
+++ trunk/Source/_javascript_Core/runtime/GCActivityCallbackBlackBerry.cpp 2012-07-13 20:12:36 UTC (rev 122624)
@@ -20,39 +20,40 @@
#include "GCActivityCallback.h"
#include "Heap.h"
+#include "JSGlobalData.h"
#include <BlackBerryPlatformMemory.h>
namespace JSC {
+static const size_t bytesWorthGC = 4 * 1024 * 1024;
+
DefaultGCActivityCallback::DefaultGCActivityCallback(Heap* heap)
: GCActivityCallback(heap->globalData())
{
}
-DefaultGCActivityCallback::doWork()
+void DefaultGCActivityCallback::doWork()
{
+ m_globalData->heap.collect(Heap::DoNotSweep);
}
void DefaultGCActivityCallback::didAllocate(size_t bytesAllocated)
{
- if (!BlackBerry::Platform::isMemoryLow())
+ if (bytesAllocated < bytesWorthGC || m_timer.started())
return;
- if (bytesAllocated < 1 * 1024 * 1024)
- return;
-
- if (m_globalData->heap.isBusy() || !m_globalData->heap.isSafeToCollect())
- return;
-
- m_globalData->heap.collect(Heap::DoNotSweep);
+ // Try using ~5% CPU time.
+ m_timer.start(m_globalData->heap.lastGCLength() * 20);
}
void DefaultGCActivityCallback::willCollect()
{
+ cancel();
}
void DefaultGCActivityCallback::cancel()
{
+ m_timer.stop();
}
}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes