Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(281)

Unified Diff: Source/WTF/wtf/RefCounted.h

Issue 14238015: Move Source/WTF/wtf to Source/wtf (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/WTF/wtf/RefCounted.h
diff --git a/Source/WTF/wtf/RefCounted.h b/Source/WTF/wtf/RefCounted.h
deleted file mode 100644
index 0504b9ed2818d7ad9fd164fd9c5a256ab6036c9e..0000000000000000000000000000000000000000
--- a/Source/WTF/wtf/RefCounted.h
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
- * Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Library General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Library General Public License for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this library; see the file COPYING.LIB. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- */
-
-#ifndef RefCounted_h
-#define RefCounted_h
-
-#include <wtf/Assertions.h>
-#include <wtf/FastAllocBase.h>
-#include <wtf/Noncopyable.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/ThreadRestrictionVerifier.h>
-#include <wtf/UnusedParam.h>
-
-namespace WTF {
-
-#ifdef NDEBUG
-#define CHECK_REF_COUNTED_LIFECYCLE 0
-#else
-#define CHECK_REF_COUNTED_LIFECYCLE 1
-#endif
-
-// This base class holds the non-template methods and attributes.
-// The RefCounted class inherits from it reducing the template bloat
-// generated by the compiler (technique called template hoisting).
-class RefCountedBase {
-public:
- void ref()
- {
-#if CHECK_REF_COUNTED_LIFECYCLE
- // Start thread verification as soon as the ref count gets to 2. This
- // heuristic reflects the fact that items are often created on one thread
- // and then given to another thread to be used.
- // FIXME: Make this restriction tigher. Especially as we move to more
- // common methods for sharing items across threads like CrossThreadCopier.h
- // We should be able to add a "detachFromThread" method to make this explicit.
- if (m_refCount == 1)
- m_verifier.setShared(true);
- // If this assert fires, it either indicates a thread safety issue or
- // that the verification needs to change. See ThreadRestrictionVerifier for
- // the different modes.
- ASSERT(m_verifier.isSafeToUse());
- ASSERT(!m_deletionHasBegun);
- ASSERT(!m_adoptionIsRequired);
-#endif
- ++m_refCount;
- }
-
- bool hasOneRef() const
- {
-#if CHECK_REF_COUNTED_LIFECYCLE
- ASSERT(m_verifier.isSafeToUse());
- ASSERT(!m_deletionHasBegun);
-#endif
- return m_refCount == 1;
- }
-
- int refCount() const
- {
-#if CHECK_REF_COUNTED_LIFECYCLE
- ASSERT(m_verifier.isSafeToUse());
-#endif
- return m_refCount;
- }
-
- void setMutexForVerifier(Mutex&);
-
-#if HAVE(DISPATCH_H)
- void setDispatchQueueForVerifier(dispatch_queue_t);
-#endif
-
- // Turns off verification. Use of this method is discouraged (instead extend
- // ThreadRestrictionVerifier to verify your case).
- // NB. It is necessary to call this in the constructor of many objects in
- // JavaScriptCore, because JavaScriptCore objects may be used from multiple
- // threads even if the reference counting is done in a racy manner. This is
- // because a JSC instance may be used from multiple threads so long as all
- // accesses into that instance are protected by a per-instance lock. It would
- // be absolutely wrong to prohibit this pattern, and it would be a disastrous
- // regression to require that the objects within that instance use a thread-
- // safe version of reference counting.
- void turnOffVerifier()
- {
-#if CHECK_REF_COUNTED_LIFECYCLE
- m_verifier.turnOffVerification();
-#endif
- }
-
- void relaxAdoptionRequirement()
- {
-#if CHECK_REF_COUNTED_LIFECYCLE
- ASSERT(!m_deletionHasBegun);
- ASSERT(m_adoptionIsRequired);
- m_adoptionIsRequired = false;
-#endif
- }
-
- // Helper for generating JIT code. Please do not use for non-JIT purposes.
- const int* addressOfCount() const
- {
- return &m_refCount;
- }
-
-protected:
- RefCountedBase()
- : m_refCount(1)
-#if CHECK_REF_COUNTED_LIFECYCLE
- , m_deletionHasBegun(false)
- , m_adoptionIsRequired(true)
-#endif
- {
- }
-
- ~RefCountedBase()
- {
-#if CHECK_REF_COUNTED_LIFECYCLE
- ASSERT(m_deletionHasBegun);
- ASSERT(!m_adoptionIsRequired);
-#endif
- }
-
- // Returns whether the pointer should be freed or not.
- bool derefBase()
- {
-#if CHECK_REF_COUNTED_LIFECYCLE
- ASSERT(m_verifier.isSafeToUse());
- ASSERT(!m_deletionHasBegun);
- ASSERT(!m_adoptionIsRequired);
-#endif
-
- ASSERT(m_refCount > 0);
- if (m_refCount == 1) {
-#if CHECK_REF_COUNTED_LIFECYCLE
- m_deletionHasBegun = true;
-#endif
- return true;
- }
-
- --m_refCount;
-#if CHECK_REF_COUNTED_LIFECYCLE
- // Stop thread verification when the ref goes to 1 because it
- // is safe to be passed to another thread at this point.
- if (m_refCount == 1)
- m_verifier.setShared(false);
-#endif
- return false;
- }
-
-#if CHECK_REF_COUNTED_LIFECYCLE
- bool deletionHasBegun() const
- {
- return m_deletionHasBegun;
- }
-#endif
-
-private:
-
-#if CHECK_REF_COUNTED_LIFECYCLE
- friend void adopted(RefCountedBase*);
-#endif
-
- int m_refCount;
-#if CHECK_REF_COUNTED_LIFECYCLE
- bool m_deletionHasBegun;
- bool m_adoptionIsRequired;
- ThreadRestrictionVerifier m_verifier;
-#endif
-};
-
-#if CHECK_REF_COUNTED_LIFECYCLE
-inline void adopted(RefCountedBase* object)
-{
- if (!object)
- return;
- ASSERT(!object->m_deletionHasBegun);
- object->m_adoptionIsRequired = false;
-}
-#endif
-
-template<typename T> class RefCounted : public RefCountedBase {
- WTF_MAKE_NONCOPYABLE(RefCounted); WTF_MAKE_FAST_ALLOCATED;
-public:
- void deref()
- {
- if (derefBase())
- delete static_cast<T*>(this);
- }
-
-protected:
- RefCounted() { }
- ~RefCounted()
- {
- }
-};
-
-template<typename T> class RefCountedCustomAllocated : public RefCountedBase {
- WTF_MAKE_NONCOPYABLE(RefCountedCustomAllocated);
-
-public:
- void deref()
- {
- if (derefBase())
- delete static_cast<T*>(this);
- }
-
-protected:
- ~RefCountedCustomAllocated()
- {
- }
-};
-
-#if CHECK_REF_COUNTED_LIFECYCLE
-inline void RefCountedBase::setMutexForVerifier(Mutex& mutex)
-{
- m_verifier.setMutexMode(mutex);
-}
-#else
-inline void RefCountedBase::setMutexForVerifier(Mutex&) { }
-#endif
-
-#if HAVE(DISPATCH_H)
-#if CHECK_REF_COUNTED_LIFECYCLE
-inline void RefCountedBase::setDispatchQueueForVerifier(dispatch_queue_t queue)
-{
- m_verifier.setDispatchQueueMode(queue);
-}
-#else
-inline void RefCountedBase::setDispatchQueueForVerifier(dispatch_queue_t) { }
-#endif
-#endif // HAVE(DISPATCH_H)
-
-} // namespace WTF
-
-using WTF::RefCounted;
-using WTF::RefCountedCustomAllocated;
-
-#endif // RefCounted_h
« no previous file with comments | « Source/WTF/wtf/RawPointer.h ('k') | Source/WTF/wtf/RefCountedArray.h » ('j') | Source/config.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698