Changeset 162777 in webkit


Ignore:
Timestamp:
Jan 25, 2014 1:16:42 PM (10 years ago)
Author:
andersca@apple.com
Message:

Remove atomicIncrement/atomicDecrement
https://bugs.webkit.org/show_bug.cgi?id=127625

Reviewed by Andreas Kling.

Replace atomicIncrement/atomicDecrement with std::atomic.

Source/JavaScriptCore:

  • bytecode/Watchpoint.h:
  • ftl/FTLLowerDFGToLLVM.cpp:

(JSC::FTL::LowerDFGToLLVM::lower):

  • profiler/ProfilerDatabase.cpp:

(JSC::Profiler::Database::Database):
(JSC::Profiler::Database::addDatabaseToAtExit):

Source/WebCore:

  • Modules/webaudio/AudioContext.cpp:

(WebCore::AudioContext::incrementActiveSourceCount):
(WebCore::AudioContext::decrementActiveSourceCount):

  • Modules/webaudio/AudioContext.h:
  • Modules/webaudio/AudioNode.cpp:

(WebCore::AudioNode::~AudioNode):
(WebCore::AudioNode::ref):
(WebCore::AudioNode::finishDeref):

  • Modules/webaudio/AudioNode.h:
  • Modules/webdatabase/OriginLock.h:

Source/WebKit2:

  • Platform/IPC/Connection.cpp:

(IPC::Connection::createSyncMessageEncoder):

  • Shared/mac/SecItemShim.cpp:

(WebKit::generateSecItemRequestID):

  • UIProcess/StatisticsRequest.cpp:

(WebKit::StatisticsRequest::addOutstandingRequest):

Source/WTF:

  • wtf/Atomics.h:
  • wtf/RefCountedLeakCounter.cpp:

(WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
(WTF::RefCountedLeakCounter::increment):
(WTF::RefCountedLeakCounter::decrement):

  • wtf/RefCountedLeakCounter.h:
  • wtf/ThreadSafeRefCounted.h:

(WTF::ThreadSafeRefCountedBase::ref):
(WTF::ThreadSafeRefCountedBase::refCount):
(WTF::ThreadSafeRefCountedBase::derefBase):

Location:
trunk/Source
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r162767 r162777  
     12014-01-25  Anders Carlsson  <andersca@apple.com>
     2
     3        Remove atomicIncrement/atomicDecrement
     4        https://bugs.webkit.org/show_bug.cgi?id=127625
     5
     6        Reviewed by Andreas Kling.
     7
     8        Replace atomicIncrement/atomicDecrement with std::atomic.
     9
     10        * bytecode/Watchpoint.h:
     11        * ftl/FTLLowerDFGToLLVM.cpp:
     12        (JSC::FTL::LowerDFGToLLVM::lower):
     13        * profiler/ProfilerDatabase.cpp:
     14        (JSC::Profiler::Database::Database):
     15        (JSC::Profiler::Database::addDatabaseToAtExit):
     16
    1172014-01-24  Joseph Pecoraro  <pecoraro@apple.com>
    218
  • trunk/Source/JavaScriptCore/bytecode/Watchpoint.h

    r161554 r162777  
    2727#define Watchpoint_h
    2828
     29#include <wtf/Atomics.h>
    2930#include <wtf/SentinelLinkedList.h>
    3031#include <wtf/ThreadSafeRefCounted.h>
  • trunk/Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp

    r161399 r162777  
    4343#include "Operations.h"
    4444#include "VirtualRegister.h"
    45 
     45#include <atomic>
    4646#include <wtf/ProcessID.h>
    4747
     
    5050using namespace DFG;
    5151
    52 static int compileCounter;
     52static std::atomic<int> compileCounter;
    5353
    5454// Using this instead of typeCheck() helps to reduce the load on LLVM, by creating
     
    8282        if (verboseCompilationEnabled()) {
    8383            name = toCString(
    84                 "jsBody_", atomicIncrement(&compileCounter), "_", codeBlock()->inferredName(),
     84                "jsBody_", ++compileCounter, "_", codeBlock()->inferredName(),
    8585                "_", codeBlock()->hash());
    8686        } else
  • trunk/Source/JavaScriptCore/profiler/ProfilerDatabase.cpp

    r156968 r162777  
    3434namespace JSC { namespace Profiler {
    3535
    36 #if COMPILER(MINGW) || COMPILER(MSVC7_OR_LOWER) || OS(WINCE)
    37 static int databaseCounter;
    38 #else
    39 static volatile int databaseCounter;
    40 #endif
     36static std::atomic<int> databaseCounter;
     37
    4138static SpinLock registrationLock = SPINLOCK_INITIALIZER;
    42 static int didRegisterAtExit;
     39static std::atomic<int> didRegisterAtExit;
    4340static Database* firstDatabase;
    4441
    4542Database::Database(VM& vm)
    46     : m_databaseID(atomicIncrement(&databaseCounter))
     43    : m_databaseID(++databaseCounter)
    4744    , m_vm(vm)
    4845    , m_shouldSaveAtExit(false)
     
    139136void Database::addDatabaseToAtExit()
    140137{
    141     if (atomicIncrement(&didRegisterAtExit) == 1)
     138    if (++didRegisterAtExit == 1)
    142139        atexit(atExitCallback);
    143140   
  • trunk/Source/WTF/ChangeLog

    r162774 r162777  
     12014-01-25  Anders Carlsson  <andersca@apple.com>
     2
     3        Remove atomicIncrement/atomicDecrement
     4        https://bugs.webkit.org/show_bug.cgi?id=127625
     5
     6        Reviewed by Andreas Kling.
     7
     8        Replace atomicIncrement/atomicDecrement with std::atomic.
     9
     10        * wtf/Atomics.h:
     11        * wtf/RefCountedLeakCounter.cpp:
     12        (WTF::RefCountedLeakCounter::~RefCountedLeakCounter):
     13        (WTF::RefCountedLeakCounter::increment):
     14        (WTF::RefCountedLeakCounter::decrement):
     15        * wtf/RefCountedLeakCounter.h:
     16        * wtf/ThreadSafeRefCounted.h:
     17        (WTF::ThreadSafeRefCountedBase::ref):
     18        (WTF::ThreadSafeRefCountedBase::refCount):
     19        (WTF::ThreadSafeRefCountedBase::derefBase):
     20
    1212014-01-25  Anders Carlsson  <andersca@apple.com>
    222
  • trunk/Source/WTF/wtf/Atomics.h

    r162137 r162777  
    7474
    7575#if OS(WINDOWS)
    76 
    77 #if OS(WINCE)
    78 inline int atomicIncrement(int* addend) { return InterlockedIncrement(reinterpret_cast<long*>(addend)); }
    79 inline int atomicDecrement(int* addend) { return InterlockedDecrement(reinterpret_cast<long*>(addend)); }
    80 #elif COMPILER(MINGW)
    81 inline int atomicIncrement(int* addend) { return InterlockedIncrement(reinterpret_cast<long*>(addend)); }
    82 inline int atomicDecrement(int* addend) { return InterlockedDecrement(reinterpret_cast<long*>(addend)); }
    83 
    84 inline int64_t atomicIncrement(int64_t* addend) { return InterlockedIncrement64(reinterpret_cast<long long*>(addend)); }
    85 inline int64_t atomicDecrement(int64_t* addend) { return InterlockedDecrement64(reinterpret_cast<long long*>(addend)); }
    86 #else
    87 inline int atomicIncrement(int volatile* addend) { return InterlockedIncrement(reinterpret_cast<long volatile*>(addend)); }
    88 inline int atomicDecrement(int volatile* addend) { return InterlockedDecrement(reinterpret_cast<long volatile*>(addend)); }
    89 
    90 inline int64_t atomicIncrement(int64_t volatile* addend) { return InterlockedIncrement64(reinterpret_cast<long long volatile*>(addend)); }
    91 inline int64_t atomicDecrement(int64_t volatile* addend) { return InterlockedDecrement64(reinterpret_cast<long long volatile*>(addend)); }
    92 #endif
    93 
    94 #elif COMPILER(GCC)
    95 
    96 inline int atomicIncrement(int volatile* addend) { return __sync_add_and_fetch(addend, 1); }
    97 inline int atomicDecrement(int volatile* addend) { return __sync_sub_and_fetch(addend, 1); }
    98 
    99 inline int64_t atomicIncrement(int64_t volatile* addend) { return __sync_add_and_fetch(addend, 1); }
    100 inline int64_t atomicDecrement(int64_t volatile* addend) { return __sync_sub_and_fetch(addend, 1); }
    101 
    102 #endif
    103 
    104 #if OS(WINDOWS)
    10576inline bool weakCompareAndSwap(volatile unsigned* location, unsigned expected, unsigned newValue)
    10677{
     
    344315} // namespace WTF
    345316
    346 using WTF::atomicDecrement;
    347 using WTF::atomicIncrement;
    348 
    349317#endif // Atomics_h
  • trunk/Source/WTF/wtf/RefCountedLeakCounter.cpp

    r157653 r162777  
    6969    if (m_count) {
    7070        if (!leakMessageSuppressionReasons || leakMessageSuppressionReasons->isEmpty())
    71             LOG(RefCountedLeaks, "LEAK: %u %s", m_count, m_description);
     71            LOG(RefCountedLeaks, "LEAK: %u %s", m_count.load(), m_description);
    7272        else if (!loggedSuppressionReason) {
    7373            // This logs only one reason. Later we could change it so we log all the reasons.
     
    8080void RefCountedLeakCounter::increment()
    8181{
    82     atomicIncrement(&m_count);
     82    ++m_count;
    8383}
    8484
    8585void RefCountedLeakCounter::decrement()
    8686{
    87     atomicDecrement(&m_count);
     87    --m_count;
    8888}
    8989
  • trunk/Source/WTF/wtf/RefCountedLeakCounter.h

    r150134 r162777  
    2121#ifndef RefCountedLeakCounter_h
    2222#define RefCountedLeakCounter_h
    23  
     23
     24#include <atomic>
    2425#include <wtf/Assertions.h>
    25 #include <wtf/Threading.h>
    2626
    2727namespace WTF {
    2828   
    29     struct RefCountedLeakCounter {
    30         WTF_EXPORT_PRIVATE static void suppressMessages(const char*);
    31         WTF_EXPORT_PRIVATE static void cancelMessageSuppression(const char*);
    32        
    33         WTF_EXPORT_PRIVATE explicit RefCountedLeakCounter(const char* description);
    34         WTF_EXPORT_PRIVATE ~RefCountedLeakCounter();
     29struct RefCountedLeakCounter {
     30    WTF_EXPORT_PRIVATE static void suppressMessages(const char*);
     31    WTF_EXPORT_PRIVATE static void cancelMessageSuppression(const char*);
     32   
     33    WTF_EXPORT_PRIVATE explicit RefCountedLeakCounter(const char* description);
     34    WTF_EXPORT_PRIVATE ~RefCountedLeakCounter();
    3535
    36         WTF_EXPORT_PRIVATE void increment();
    37         WTF_EXPORT_PRIVATE void decrement();
     36    WTF_EXPORT_PRIVATE void increment();
     37    WTF_EXPORT_PRIVATE void decrement();
    3838
    3939#ifndef NDEBUG
    40     private:
    41 #if COMPILER(MINGW) || OS(WINCE)
    42         int m_count;
    43 #else
    44         volatile int m_count;
     40private:
     41    std::atomic<int> m_count;
     42    const char* m_description;
    4543#endif
    46         const char* m_description;
    47 #endif
    48     };
     44};
    4945
    5046}  // namespace WTF
  • trunk/Source/WTF/wtf/ThreadSafeRefCounted.h

    r157897 r162777  
    6060#define ThreadSafeRefCounted_h
    6161
    62 #include <wtf/Platform.h>
    63 
    64 #include <wtf/Atomics.h>
     62#include <atomic>
    6563#include <wtf/DynamicAnnotations.h>
    66 #include <wtf/ThreadingPrimitives.h>
     64#include <wtf/Noncopyable.h>
    6765
    6866namespace WTF {
     
    7977    void ref()
    8078    {
    81         atomicIncrement(&m_refCount);
     79        ++m_refCount;
    8280    }
    8381
     
    8987    int refCount() const
    9088    {
    91         return static_cast<int const volatile&>(m_refCount);
     89        return m_refCount;
    9290    }
    9391
     
    9795    {
    9896        WTF_ANNOTATE_HAPPENS_BEFORE(&m_refCount);
    99         if (atomicDecrement(&m_refCount) <= 0) {
     97        if (--m_refCount <= 0) {
    10098            WTF_ANNOTATE_HAPPENS_AFTER(&m_refCount);
    10199            return true;
     
    106104
    107105private:
    108     int m_refCount;
     106    std::atomic<int> m_refCount;
    109107};
    110108
  • trunk/Source/WebCore/ChangeLog

    r162776 r162777  
     12014-01-25  Anders Carlsson  <andersca@apple.com>
     2
     3        Remove atomicIncrement/atomicDecrement
     4        https://bugs.webkit.org/show_bug.cgi?id=127625
     5
     6        Reviewed by Andreas Kling.
     7
     8        Replace atomicIncrement/atomicDecrement with std::atomic.
     9
     10        * Modules/webaudio/AudioContext.cpp:
     11        (WebCore::AudioContext::incrementActiveSourceCount):
     12        (WebCore::AudioContext::decrementActiveSourceCount):
     13        * Modules/webaudio/AudioContext.h:
     14        * Modules/webaudio/AudioNode.cpp:
     15        (WebCore::AudioNode::~AudioNode):
     16        (WebCore::AudioNode::ref):
     17        (WebCore::AudioNode::finishDeref):
     18        * Modules/webaudio/AudioNode.h:
     19        * Modules/webdatabase/OriginLock.h:
     20
    1212014-01-25  Alex Christensen  <achristensen@webkit.org>
    222
  • trunk/Source/WebCore/Modules/webaudio/AudioContext.cpp

    r162368 r162777  
    10021002void AudioContext::incrementActiveSourceCount()
    10031003{
    1004     atomicIncrement(&m_activeSourceCount);
     1004    ++m_activeSourceCount;
    10051005}
    10061006
    10071007void AudioContext::decrementActiveSourceCount()
    10081008{
    1009     atomicDecrement(&m_activeSourceCount);
     1009    --m_activeSourceCount;
    10101010}
    10111011
  • trunk/Source/WebCore/Modules/webaudio/AudioContext.h

    r162368 r162777  
    3333#include "EventTarget.h"
    3434#include "MediaCanStartListener.h"
     35#include <atomic>
    3536#include <wtf/HashSet.h>
    3637#include <wtf/MainThread.h>
     
    362363
    363364    // Number of AudioBufferSourceNodes that are active (playing).
    364     int m_activeSourceCount;
     365    std::atomic<int> m_activeSourceCount;
    365366
    366367    BehaviorRestrictions m_restrictions;
  • trunk/Source/WebCore/Modules/webaudio/AudioNode.cpp

    r162368 r162777  
    7070#if DEBUG_AUDIONODE_REFERENCES
    7171    --s_nodeCount[nodeType()];
    72     fprintf(stderr, "%p: %d: AudioNode::~AudioNode() %d %d\n", this, nodeType(), m_normalRefCount, m_connectionRefCount);
     72    fprintf(stderr, "%p: %d: AudioNode::~AudioNode() %d %d\n", this, nodeType(), m_normalRefCount.load(), m_connectionRefCount);
    7373#endif
    7474}
     
    412412    switch (refType) {
    413413    case RefTypeNormal:
    414         atomicIncrement(&m_normalRefCount);
     414        ++m_normalRefCount;
    415415        break;
    416416    case RefTypeConnection:
    417         atomicIncrement(&m_connectionRefCount);
     417        ++m_connectionRefCount;
    418418        break;
    419419    default:
     
    474474    case RefTypeNormal:
    475475        ASSERT(m_normalRefCount > 0);
    476         atomicDecrement(&m_normalRefCount);
     476        --m_normalRefCount;
    477477        break;
    478478    case RefTypeConnection:
    479479        ASSERT(m_connectionRefCount > 0);
    480         atomicDecrement(&m_connectionRefCount);
     480        --m_connectionRefCount;
    481481        break;
    482482    default:
  • trunk/Source/WebCore/Modules/webaudio/AudioNode.h

    r162368 r162777  
    208208
    209209    // Ref-counting
    210     volatile int m_normalRefCount;
    211     volatile int m_connectionRefCount;
     210    std::atomic<int> m_normalRefCount;
     211    std::atomic<int> m_connectionRefCount;
    212212   
    213213    bool m_isMarkedForDeletion;
  • trunk/Source/WebCore/Modules/webdatabase/OriginLock.h

    r144760 r162777  
    3131#include "FileSystem.h"
    3232#include <wtf/ThreadSafeRefCounted.h>
     33#include <wtf/ThreadingPrimitives.h>
    3334#include <wtf/text/WTFString.h>
    3435
  • trunk/Source/WebKit2/ChangeLog

    r162774 r162777  
     12014-01-25  Anders Carlsson  <andersca@apple.com>
     2
     3        Remove atomicIncrement/atomicDecrement
     4        https://bugs.webkit.org/show_bug.cgi?id=127625
     5
     6        Reviewed by Andreas Kling.
     7
     8        Replace atomicIncrement/atomicDecrement with std::atomic.
     9
     10        * Platform/IPC/Connection.cpp:
     11        (IPC::Connection::createSyncMessageEncoder):
     12        * Shared/mac/SecItemShim.cpp:
     13        (WebKit::generateSecItemRequestID):
     14        * UIProcess/StatisticsRequest.cpp:
     15        (WebKit::StatisticsRequest::addOutstandingRequest):
     16
    1172014-01-25  Anders Carlsson  <andersca@apple.com>
    218
  • trunk/Source/WebKit2/Platform/IPC/Connection.cpp

    r161173 r162777  
    345345
    346346    // Encode the sync request ID.
    347     COMPILE_ASSERT(sizeof(m_syncRequestID) == sizeof(int64_t), CanUseAtomicIncrement);
    348347    syncRequestID = ++m_syncRequestID;
    349348    *encoder << syncRequestID;
  • trunk/Source/WebKit2/Shared/mac/SecItemShim.cpp

    r161849 r162777  
    3737#include "SecItemShimProxyMessages.h"
    3838#include <Security/Security.h>
     39#include <atomic>
    3940#include <dlfcn.h>
    4041#include <mutex>
     
    7475static uint64_t generateSecItemRequestID()
    7576{
    76     static int64_t uniqueSecItemRequestID;
    77     return atomicIncrement(&uniqueSecItemRequestID);
     77    static std::atomic<int64_t> uniqueSecItemRequestID;
     78    return ++uniqueSecItemRequestID;
    7879}
    7980
  • trunk/Source/WebKit2/UIProcess/StatisticsRequest.cpp

    r160395 r162777  
    2929#include "APIArray.h"
    3030#include "MutableDictionary.h"
    31 #include <wtf/Atomics.h>
    3231
    3332namespace WebKit {
     
    4645uint64_t StatisticsRequest::addOutstandingRequest()
    4746{
    48     static int64_t uniqueRequestID;
     47    static std::atomic<int64_t> uniqueRequestID;
    4948
    50     uint64_t requestID = atomicIncrement(&uniqueRequestID);
     49    uint64_t requestID = ++uniqueRequestID;
    5150    m_outstandingRequests.add(requestID);
    5251    return requestID;
Note: See TracChangeset for help on using the changeset viewer.