Changeset 253500 in webkit for trunk/Source/JavaScriptCore/heap


Ignore:
Timestamp:
Dec 13, 2019, 2:37:52 PM (5 years ago)
Author:
[email protected]
Message:

Add a Heap::finalize function that takes WTF::Function<void()>
https://bugs.webkit.org/show_bug.cgi?id=205211

Reviewed by Geoffrey Garen.

Source/JavaScriptCore:

  • heap/Heap.cpp:

(JSC::Heap::addFinalizer):
(JSC::Heap::FinalizerOwner::finalize):

  • heap/Heap.h:

Source/WTF:

  • wtf/Function.h:

(WTF::Function<Out):

Location:
trunk/Source/JavaScriptCore/heap
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/heap/Heap.cpp

    r253244 r253500  
    24362436}
    24372437
    2438 void Heap::addFinalizer(JSCell* cell, Finalizer finalizer)
    2439 {
    2440     WeakSet::allocate(cell, &m_finalizerOwner, reinterpret_cast<void*>(finalizer)); // Balanced by FinalizerOwner::finalize().
    2441 }
    2442 
    2443 void Heap::FinalizerOwner::finalize(Handle<Unknown> handle, void* context)
     2438void Heap::addFinalizer(JSCell* cell, CFinalizer finalizer)
     2439{
     2440    WeakSet::allocate(cell, &m_cFinalizerOwner, bitwise_cast<void*>(finalizer)); // Balanced by CFinalizerOwner::finalize().
     2441}
     2442
     2443void Heap::addFinalizer(JSCell* cell, LambdaFinalizer function)
     2444{
     2445    WeakSet::allocate(cell, &m_lambdaFinalizerOwner, function.leakImpl()); // Balanced by LambdaFinalizerOwner::finalize().
     2446}
     2447
     2448void Heap::CFinalizerOwner::finalize(Handle<Unknown> handle, void* context)
    24442449{
    24452450    HandleSlot slot = handle.slot();
    2446     Finalizer finalizer = reinterpret_cast<Finalizer>(context);
     2451    CFinalizer finalizer = bitwise_cast<CFinalizer>(context);
     2452    finalizer(slot->asCell());
     2453    WeakSet::deallocate(WeakImpl::asWeakImpl(slot));
     2454}
     2455
     2456void Heap::LambdaFinalizerOwner::finalize(Handle<Unknown> handle, void* context)
     2457{
     2458    LambdaFinalizer::Impl* impl = bitwise_cast<LambdaFinalizer::Impl*>(context);
     2459    LambdaFinalizer finalizer(impl);
     2460    HandleSlot slot = handle.slot();
    24472461    finalizer(slot->asCell());
    24482462    WeakSet::deallocate(WeakImpl::asWeakImpl(slot));
  • trunk/Source/JavaScriptCore/heap/Heap.h

    r253244 r253500  
    172172    JS_EXPORT_PRIVATE bool isCurrentThreadBusy();
    173173   
    174     typedef void (*Finalizer)(JSCell*);
    175     JS_EXPORT_PRIVATE void addFinalizer(JSCell*, Finalizer);
     174    typedef void (*CFinalizer)(JSCell*);
     175    JS_EXPORT_PRIVATE void addFinalizer(JSCell*, CFinalizer);
     176    using LambdaFinalizer = WTF::Function<void(JSCell*)>;
     177    JS_EXPORT_PRIVATE void addFinalizer(JSCell*, LambdaFinalizer);
    176178
    177179    void notifyIsSafeToCollect();
     
    432434    static constexpr size_t minExtraMemory = 256;
    433435   
    434     class FinalizerOwner : public WeakHandleOwner {
     436    class CFinalizerOwner : public WeakHandleOwner {
     437        void finalize(Handle<Unknown>, void* context) override;
     438    };
     439
     440    class LambdaFinalizerOwner : public WeakHandleOwner {
    435441        void finalize(Handle<Unknown>, void* context) override;
    436442    };
     
    635641    std::unique_ptr<CodeBlockSet> m_codeBlocks;
    636642    std::unique_ptr<JITStubRoutineSet> m_jitStubRoutines;
    637     FinalizerOwner m_finalizerOwner;
     643    CFinalizerOwner m_cFinalizerOwner;
     644    LambdaFinalizerOwner m_lambdaFinalizerOwner;
    638645   
    639646    Lock m_parallelSlotVisitorLock;
Note: See TracChangeset for help on using the changeset viewer.