Title: [117015] trunk/Source
Revision
117015
Author
[email protected]
Date
2012-05-14 16:47:53 -0700 (Mon, 14 May 2012)

Log Message

Enh: Add the Ability to Disable / Enable _javascript_ GC Timer
https://bugs.webkit.org/show_bug.cgi?id=86382

Reviewed by Darin Adler.

Source/_javascript_Core: 

Add flag to GCActivityCallback to enable / disable activity timer.
Add api via Heap to set the flag's value.

* _javascript_Core.vcproj/_javascript_Core/_javascript_Core.def: Windows export
* heap/Heap.cpp:
(JSC::Heap::setGarbageCollectionTimerEnabled):
* heap/Heap.h:
* runtime/GCActivityCallback.h:
(JSC::GCActivityCallback::isEnabled):
(JSC::GCActivityCallback::setEnabled):
(JSC::GCActivityCallback::GCActivityCallback):
* runtime/GCActivityCallbackCF.cpp:
(JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):

Source/WebCore: 

Plumbing to set / clear JS GC activity timer enable flag.

* WebCore.exp.in:
* bindings/js/GCController.cpp:
(WebCore::GCController::setJavaScriptGarbageCollectorTimerEnabled):
* bindings/js/GCController.h:

Source/WebKit/mac: 

Plumbing to set / clear JS GC activity timer enable flag.

* Misc/WebCoreStatistics.h:
* Misc/WebCoreStatistics.mm:
(+[WebCoreStatistics setJavaScriptGarbageCollectorTimerEnabled:]):

Source/WebKit2: 

Plumbing to set / clear JS GC activity timer enable flag.

* UIProcess/API/C/WKContext.cpp:
(WKContextSetJavaScriptGarbageCollectorTimerEnabled):
* UIProcess/API/C/WKContext.h:
* UIProcess/WebContext.cpp:
(WebKit::WebContext::setJavaScriptGarbageCollectorTimerEnabled):
* UIProcess/WebContext.h:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::setJavaScriptGarbageCollectorTimerEnabled):
* WebProcess/WebProcess.h:
* WebProcess/WebProcess.messages.in:

Modified Paths

Diff

Modified: trunk/Source/_javascript_Core/ChangeLog (117014 => 117015)


--- trunk/Source/_javascript_Core/ChangeLog	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/_javascript_Core/ChangeLog	2012-05-14 23:47:53 UTC (rev 117015)
@@ -1,5 +1,26 @@
 2012-05-14  Michael Saboff  <[email protected]>
 
+        Enh: Add the Ability to Disable / Enable _javascript_ GC Timer
+        https://bugs.webkit.org/show_bug.cgi?id=86382
+
+        Reviewed by Darin Adler.
+
+        Add flag to GCActivityCallback to enable / disable activity timer.
+        Add api via Heap to set the flag's value.
+
+        * _javascript_Core.vcproj/_javascript_Core/_javascript_Core.def: Windows export
+        * heap/Heap.cpp:
+        (JSC::Heap::setGarbageCollectionTimerEnabled):
+        * heap/Heap.h:
+        * runtime/GCActivityCallback.h:
+        (JSC::GCActivityCallback::isEnabled):
+        (JSC::GCActivityCallback::setEnabled):
+        (JSC::GCActivityCallback::GCActivityCallback):
+        * runtime/GCActivityCallbackCF.cpp:
+        (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
+
+2012-05-14  Michael Saboff  <[email protected]>
+
         Increase Debug Logging in MarkStack::validate()
         https://bugs.webkit.org/show_bug.cgi?id=86408
 

Modified: trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def (117014 => 117015)


--- trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/_javascript_Core/_javascript_Core.vcproj/_javascript_Core/_javascript_Core.def	2012-05-14 23:47:53 UTC (rev 117015)
@@ -294,6 +294,7 @@
     ?setDescriptor@PropertyDescriptor@JSC@@QAEXVJSValue@2@I@Z
     ?setDumpsGeneratedCode@BytecodeGenerator@JSC@@SAX_N@Z
     ?setEnumerable@PropertyDescriptor@JSC@@QAEX_N@Z
+    ?setGarbageCollectionTimerEnabled@Heap@JSC@@QAEX_N@Z
     ?setGetter@PropertyDescriptor@JSC@@QAEXVJSValue@2@@Z
     ?setLoc@StatementNode@JSC@@QAEXHH@Z
     ?setMainThreadCallbacksPaused@WTF@@YAX_N@Z

Modified: trunk/Source/_javascript_Core/heap/Heap.cpp (117014 => 117015)


--- trunk/Source/_javascript_Core/heap/Heap.cpp	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/_javascript_Core/heap/Heap.cpp	2012-05-14 23:47:53 UTC (rev 117015)
@@ -832,6 +832,11 @@
     return m_activityCallback.get();
 }
 
+void Heap::setGarbageCollectionTimerEnabled(bool enable)
+{
+    activityCallback()->setEnabled(enable);
+}
+
 void Heap::didAllocate(size_t bytes)
 {
     m_activityCallback->didAllocate(m_bytesAllocated + m_bytesAbandoned);

Modified: trunk/Source/_javascript_Core/heap/Heap.h (117014 => 117015)


--- trunk/Source/_javascript_Core/heap/Heap.h	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/_javascript_Core/heap/Heap.h	2012-05-14 23:47:53 UTC (rev 117015)
@@ -100,6 +100,7 @@
 
         JS_EXPORT_PRIVATE GCActivityCallback* activityCallback();
         JS_EXPORT_PRIVATE void setActivityCallback(PassOwnPtr<GCActivityCallback>);
+        JS_EXPORT_PRIVATE void setGarbageCollectionTimerEnabled(bool);
 
         // true if an allocation or collection is in progress
         inline bool isBusy();

Modified: trunk/Source/_javascript_Core/runtime/GCActivityCallback.h (117014 => 117015)


--- trunk/Source/_javascript_Core/runtime/GCActivityCallback.h	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/_javascript_Core/runtime/GCActivityCallback.h	2012-05-14 23:47:53 UTC (rev 117015)
@@ -47,9 +47,16 @@
     virtual void willCollect() { }
     virtual void synchronize() { }
     virtual void cancel() { }
+    bool isEnabled() const { return m_enabled; }
+    void setEnabled(bool enabled) { m_enabled = enabled; }
 
 protected:
-    GCActivityCallback() {}
+    GCActivityCallback()
+        : m_enabled(true)
+    {
+    }
+
+    bool m_enabled;
 };
 
 struct DefaultGCActivityCallbackPlatformData;

Modified: trunk/Source/_javascript_Core/runtime/GCActivityCallbackCF.cpp (117014 => 117015)


--- trunk/Source/_javascript_Core/runtime/GCActivityCallbackCF.cpp	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/_javascript_Core/runtime/GCActivityCallbackCF.cpp	2012-05-14 23:47:53 UTC (rev 117015)
@@ -63,6 +63,9 @@
 void DefaultGCActivityCallbackPlatformData::timerDidFire(CFRunLoopTimerRef, void *info)
 {
     Heap* heap = static_cast<Heap*>(info);
+    if (!heap->activityCallback()->isEnabled())
+        return;
+
     APIEntryShim shim(heap->globalData());
 #if !PLATFORM(IOS)
     double startTime = WTF::monotonicallyIncreasingTime();

Modified: trunk/Source/WebCore/ChangeLog (117014 => 117015)


--- trunk/Source/WebCore/ChangeLog	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebCore/ChangeLog	2012-05-14 23:47:53 UTC (rev 117015)
@@ -1,3 +1,17 @@
+2012-05-14  Michael Saboff  <[email protected]>
+
+        Enh: Add the Ability to Disable / Enable _javascript_ GC Timer
+        https://bugs.webkit.org/show_bug.cgi?id=86382
+
+        Reviewed by Darin Adler.
+
+        Plumbing to set / clear JS GC activity timer enable flag.
+
+        * WebCore.exp.in:
+        * bindings/js/GCController.cpp:
+        (WebCore::GCController::setJavaScriptGarbageCollectorTimerEnabled):
+        * bindings/js/GCController.h:
+
 2012-05-14  Nate Chapin  <[email protected]>
 
         [V8] Crash in npObjectGetProperty() in V8NPObject.cpp

Modified: trunk/Source/WebCore/WebCore.exp.in (117014 => 117015)


--- trunk/Source/WebCore/WebCore.exp.in	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebCore/WebCore.exp.in	2012-05-14 23:47:53 UTC (rev 117015)
@@ -250,6 +250,7 @@
 __ZN7WebCore12EventHandler9mouseDownEP7NSEvent
 __ZN7WebCore12GCController17garbageCollectNowEv
 __ZN7WebCore12GCController18garbageCollectSoonEv
+__ZN7WebCore12GCController41setJavaScriptGarbageCollectorTimerEnabledEb
 __ZN7WebCore12GCController43garbageCollectOnAlternateThreadForDebuggingEb
 __ZN7WebCore12PopupMenuMacC1EPNS_15PopupMenuClientE
 __ZN7WebCore12PrintContext12pagePropertyEPNS_5FrameEPKci

Modified: trunk/Source/WebCore/bindings/js/GCController.cpp (117014 => 117015)


--- trunk/Source/WebCore/bindings/js/GCController.cpp	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebCore/bindings/js/GCController.cpp	2012-05-14 23:47:53 UTC (rev 117015)
@@ -97,6 +97,11 @@
     detachThread(threadID);
 }
 
+void GCController::setJavaScriptGarbageCollectorTimerEnabled(bool enable)
+{
+    JSDOMWindow::commonJSGlobalData()->heap.setGarbageCollectionTimerEnabled(enable);
+}
+
 void GCController::discardAllCompiledCode()
 {
     JSLock lock(SilenceAssertionsOnly);

Modified: trunk/Source/WebCore/bindings/js/GCController.h (117014 => 117015)


--- trunk/Source/WebCore/bindings/js/GCController.h	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebCore/bindings/js/GCController.h	2012-05-14 23:47:53 UTC (rev 117015)
@@ -44,7 +44,7 @@
         void garbageCollectNow(); // It's better to call garbageCollectSoon, unless you have a specific reason not to.
 
         void garbageCollectOnAlternateThreadForDebugging(bool waitUntilDone); // Used for stress testing.
-
+        void setJavaScriptGarbageCollectorTimerEnabled(bool);
         void discardAllCompiledCode();
 
     private:

Modified: trunk/Source/WebKit/mac/ChangeLog (117014 => 117015)


--- trunk/Source/WebKit/mac/ChangeLog	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit/mac/ChangeLog	2012-05-14 23:47:53 UTC (rev 117015)
@@ -1,3 +1,16 @@
+2012-05-14  Michael Saboff  <[email protected]>
+
+        Enh: Add the Ability to Disable / Enable _javascript_ GC Timer
+        https://bugs.webkit.org/show_bug.cgi?id=86382
+
+        Reviewed by Darin Adler.
+
+        Plumbing to set / clear JS GC activity timer enable flag.
+
+        * Misc/WebCoreStatistics.h:
+        * Misc/WebCoreStatistics.mm:
+        (+[WebCoreStatistics setJavaScriptGarbageCollectorTimerEnabled:]):
+
 2012-05-11  Gavin Barraclough  <[email protected]>
 
         Introduce PropertyName class

Modified: trunk/Source/WebKit/mac/Misc/WebCoreStatistics.h (117014 => 117015)


--- trunk/Source/WebKit/mac/Misc/WebCoreStatistics.h	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit/mac/Misc/WebCoreStatistics.h	2012-05-14 23:47:53 UTC (rev 117015)
@@ -47,6 +47,7 @@
 
 + (void)garbageCollectJavaScriptObjects;
 + (void)garbageCollectJavaScriptObjectsOnAlternateThreadForDebugging:(BOOL)waitUntilDone;
++ (void)setJavaScriptGarbageCollectorTimerEnabled:(BOOL)enabled;
 
 + (size_t)iconPageURLMappingCount;
 + (size_t)iconRetainedPageURLCount;

Modified: trunk/Source/WebKit/mac/Misc/WebCoreStatistics.mm (117014 => 117015)


--- trunk/Source/WebKit/mac/Misc/WebCoreStatistics.mm	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit/mac/Misc/WebCoreStatistics.mm	2012-05-14 23:47:53 UTC (rev 117015)
@@ -120,6 +120,11 @@
     gcController().garbageCollectOnAlternateThreadForDebugging(waitUntilDone);
 }
 
++ (void)setJavaScriptGarbageCollectorTimerEnabled:(BOOL)enable
+{
+    gcController().setJavaScriptGarbageCollectorTimerEnabled(enable);
+}
+
 + (size_t)iconPageURLMappingCount
 {
     return iconDatabase().pageURLMappingCount();

Modified: trunk/Source/WebKit2/ChangeLog (117014 => 117015)


--- trunk/Source/WebKit2/ChangeLog	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/ChangeLog	2012-05-14 23:47:53 UTC (rev 117015)
@@ -1,3 +1,23 @@
+2012-05-14  Michael Saboff  <[email protected]>
+
+        Enh: Add the Ability to Disable / Enable _javascript_ GC Timer
+        https://bugs.webkit.org/show_bug.cgi?id=86382
+
+        Reviewed by Darin Adler.
+
+        Plumbing to set / clear JS GC activity timer enable flag.
+
+        * UIProcess/API/C/WKContext.cpp:
+        (WKContextSetJavaScriptGarbageCollectorTimerEnabled):
+        * UIProcess/API/C/WKContext.h:
+        * UIProcess/WebContext.cpp:
+        (WebKit::WebContext::setJavaScriptGarbageCollectorTimerEnabled):
+        * UIProcess/WebContext.h:
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::setJavaScriptGarbageCollectorTimerEnabled):
+        * WebProcess/WebProcess.h:
+        * WebProcess/WebProcess.messages.in:
+
 2012-05-14  Anders Carlsson  <[email protected]>
 
         The "plug-in was blocked" callback needs to include enough info to uniquely identify the plug-in + version

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp (117014 => 117015)


--- trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKContext.cpp	2012-05-14 23:47:53 UTC (rev 117015)
@@ -265,6 +265,10 @@
     toImpl(contextRef)->garbageCollectJavaScriptObjects();
 }
 
+void WKContextSetJavaScriptGarbageCollectorTimerEnabled(WKContextRef contextRef, bool enable)
+{
+    toImpl(contextRef)->setJavaScriptGarbageCollectorTimerEnabled(enable);
+}
 // Deprecated functions.
 void _WKContextSetAdditionalPluginsDirectory(WKContextRef context, WKStringRef pluginsDirectory)
 {

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKContext.h (117014 => 117015)


--- trunk/Source/WebKit2/UIProcess/API/C/WKContext.h	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKContext.h	2012-05-14 23:47:53 UTC (rev 117015)
@@ -156,6 +156,7 @@
 WK_EXPORT void WKContextGetStatistics(WKContextRef context, void* functionContext, WKContextGetStatisticsFunction function);
     
 WK_EXPORT void WKContextGarbageCollectJavaScriptObjects(WKContextRef context);
+WK_EXPORT void WKContextSetJavaScriptGarbageCollectorTimerEnabled(WKContextRef context, bool enable);
 
 #ifdef __cplusplus
 }

Modified: trunk/Source/WebKit2/UIProcess/WebContext.cpp (117014 => 117015)


--- trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/UIProcess/WebContext.cpp	2012-05-14 23:47:53 UTC (rev 117015)
@@ -956,6 +956,11 @@
     sendToAllProcesses(Messages::WebProcess::GarbageCollectJavaScriptObjects());
 }
 
+void WebContext::setJavaScriptGarbageCollectorTimerEnabled(bool flag)
+{
+    sendToAllProcesses(Messages::WebProcess::SetJavaScriptGarbageCollectorTimerEnabled(flag));
+}
+
 void WebContext::didReceiveMessageOnConnectionWorkQueue(CoreIPC::Connection* connection, CoreIPC::MessageID messageID, CoreIPC::ArgumentDecoder* arguments, bool& didHandleMessage)
 {
     if (messageID.is<CoreIPC::MessageClassWebContext>()) {

Modified: trunk/Source/WebKit2/UIProcess/WebContext.h (117014 => 117015)


--- trunk/Source/WebKit2/UIProcess/WebContext.h	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/UIProcess/WebContext.h	2012-05-14 23:47:53 UTC (rev 117015)
@@ -194,6 +194,7 @@
     
     void getWebCoreStatistics(PassRefPtr<DictionaryCallback>);
     void garbageCollectJavaScriptObjects();
+    void setJavaScriptGarbageCollectorTimerEnabled(bool flag);
 
 #if PLATFORM(MAC)
     static bool omitPDFSupport();

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (117014 => 117015)


--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp	2012-05-14 23:47:53 UTC (rev 117015)
@@ -962,6 +962,11 @@
     gcController().garbageCollectNow();
 }
 
+void WebProcess::setJavaScriptGarbageCollectorTimerEnabled(bool flag)
+{
+    gcController().setJavaScriptGarbageCollectorTimerEnabled(flag);
+}
+
 #if ENABLE(PLUGIN_PROCESS)
 void WebProcess::pluginProcessCrashed(CoreIPC::Connection*, const String& pluginPath)
 {

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.h (117014 => 117015)


--- trunk/Source/WebKit2/WebProcess/WebProcess.h	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.h	2012-05-14 23:47:53 UTC (rev 117015)
@@ -216,6 +216,7 @@
     
     void getWebCoreStatistics(uint64_t callbackID);
     void garbageCollectJavaScriptObjects();
+    void setJavaScriptGarbageCollectorTimerEnabled(bool flag);
 
 #if PLATFORM(MAC)
     void secItemResponse(CoreIPC::Connection*, uint64_t requestID, const SecItemResponseData&);

Modified: trunk/Source/WebKit2/WebProcess/WebProcess.messages.in (117014 => 117015)


--- trunk/Source/WebKit2/WebProcess/WebProcess.messages.in	2012-05-14 23:47:22 UTC (rev 117014)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.messages.in	2012-05-14 23:47:53 UTC (rev 117015)
@@ -77,6 +77,7 @@
 
     GetWebCoreStatistics(uint64_t callbackID)
     GarbageCollectJavaScriptObjects()
+    SetJavaScriptGarbageCollectorTimerEnabled(bool enable)
 
 #if PLATFORM(MAC)
     SecItemResponse(uint64_t requestID, WebKit::SecItemResponseData response) DispatchOnConnectionQueue
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to