Ignore:
Timestamp:
Apr 21, 2010, 1:59:14 PM (15 years ago)
Author:
[email protected]
Message:

Fix for https://bugs.webkit.org/show_bug.cgi?id=37937
Wean JavaScriptCore off calls to isMainThread()

Reviewed by Geoffrey Garen.

JavaScriptCore:

  • Replace use of isMainThread() for interpreter reentry checks with a stored value on the JSGlobalData.
  • Replace use of isMainThread() for useMainThread only check in the collector with a stored exclusive thread.
  • API/JSContextRef.cpp:

(JSContextGroupCreate):
Always default to a small stack type for uses of the JSC API. It is
unlikely that the interpreter reentry required on the web will be as
important for other uses of JavaScriptCore.

Update exports.

  • interpreter/Interpreter.cpp:

(JSC::Interpreter::execute):
(JSC::Interpreter::prepareForRepeatCall):
Use new stored JSGlobalData::maxReentryDepth instead of isMainThread().

  • interpreter/Interpreter.h:

Rename MaxMainThreadReentryDepth to MaxLargeThreadReentryDepth and
MaxSecondaryThreadReentryDepth to MaxSmallThreadReentryDepth.

  • jsc.cpp:

(main): Use the a large stack for jsc since it is always using the
main thread.

  • runtime/ArrayPrototype.cpp:

(JSC::arrayProtoFuncToString):
(JSC::arrayProtoFuncToLocaleString):
(JSC::arrayProtoFuncJoin):
Use new stored JSGlobalData::maxReentryDepth instead of isMainThread().

  • runtime/Collector.cpp:

(JSC::Heap::registerThread):
Use the concept of making JSC run on an exclusiveThread instead of
forcing a mainThreadOnly assertion.

  • runtime/JSGlobalData.cpp:

(JSC::JSGlobalData::JSGlobalData):
(JSC::JSGlobalData::createNonDefault):
(JSC::JSGlobalData::create):
(JSC::JSGlobalData::createLeaked):
(JSC::JSGlobalData::sharedInstance):

  • runtime/JSGlobalData.h:

Add ThreadStackType argument to JSGlobalData constructors and set
maxReentryDepth based on it.

WebCore:

No change in behavior.

  • bindings/js/JSDOMWindowBase.cpp:

(WebCore::JSDOMWindowBase::commonJSGlobalData):
Explicitly set a large stack type for the common JSGlobalData and
set the currently running thread as the exclusive thread for its
execution.

  • bindings/js/WorkerScriptController.cpp:

(WebCore::WorkerScriptController::WorkerScriptController):
Explicitly set a small stack type for the workers JSGlobalData.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/API/JSContextRef.cpp

    r58001 r58012  
    4747{
    4848    initializeThreading();
    49     return toRef(JSGlobalData::createNonDefault().releaseRef());
     49    return toRef(JSGlobalData::createNonDefault(ThreadStackTypeSmall).releaseRef());
    5050}
    5151
     
    8585
    8686    JSLock lock(LockForReal);
    87     RefPtr<JSGlobalData> globalData = group ? PassRefPtr<JSGlobalData>(toJS(group)) : JSGlobalData::createNonDefault();
     87    RefPtr<JSGlobalData> globalData = group ? PassRefPtr<JSGlobalData>(toJS(group)) : JSGlobalData::createNonDefault(ThreadStackTypeSmall);
    8888
    8989    APIEntryShim entryShim(globalData.get(), false);
Note: See TracChangeset for help on using the changeset viewer.