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

Side by Side Diff: Source/platform/heap/Heap.h

Issue 205173002: Move webaudio to oilpan (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Fixed Created 6 years, 7 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 24 matching lines...) Expand all
35 #include "platform/heap/AddressSanitizer.h" 35 #include "platform/heap/AddressSanitizer.h"
36 #include "platform/heap/ThreadState.h" 36 #include "platform/heap/ThreadState.h"
37 #include "platform/heap/Visitor.h" 37 #include "platform/heap/Visitor.h"
38 38
39 #include "wtf/Assertions.h" 39 #include "wtf/Assertions.h"
40 #include "wtf/HashCountedSet.h" 40 #include "wtf/HashCountedSet.h"
41 #include "wtf/LinkedHashSet.h" 41 #include "wtf/LinkedHashSet.h"
42 #include "wtf/ListHashSet.h" 42 #include "wtf/ListHashSet.h"
43 #include "wtf/OwnPtr.h" 43 #include "wtf/OwnPtr.h"
44 #include "wtf/PassRefPtr.h" 44 #include "wtf/PassRefPtr.h"
45 #include "wtf/ThreadSafeRefCounted.h"
45 46
46 #include <stdint.h> 47 #include <stdint.h>
47 48
48 namespace WebCore { 49 namespace WebCore {
49 50
50 const size_t blinkPageSizeLog2 = 17; 51 const size_t blinkPageSizeLog2 = 17;
51 const size_t blinkPageSize = 1 << blinkPageSizeLog2; 52 const size_t blinkPageSize = 1 << blinkPageSizeLog2;
52 const size_t blinkPageOffsetMask = blinkPageSize - 1; 53 const size_t blinkPageOffsetMask = blinkPageSize - 1;
53 const size_t blinkPageBaseMask = ~blinkPageOffsetMask; 54 const size_t blinkPageBaseMask = ~blinkPageOffsetMask;
54 // Double precision floats are more efficient when 8 byte aligned, so we 8 byte 55 // Double precision floats are more efficient when 8 byte aligned, so we 8 byte
55 // align all allocations even on 32 bit. 56 // align all allocations even on 32 bit.
56 const size_t allocationGranularity = 8; 57 const size_t allocationGranularity = 8;
57 const size_t allocationMask = allocationGranularity - 1; 58 const size_t allocationMask = allocationGranularity - 1;
58 const size_t objectStartBitMapSize = (blinkPageSize + ((8 * allocationGranularit y) - 1)) / (8 * allocationGranularity); 59 const size_t objectStartBitMapSize = (blinkPageSize + ((8 * allocationGranularit y) - 1)) / (8 * allocationGranularity);
59 const size_t reservedForObjectBitMap = ((objectStartBitMapSize + allocationMask) & ~allocationMask); 60 const size_t reservedForObjectBitMap = ((objectStartBitMapSize + allocationMask) & ~allocationMask);
60 const size_t maxHeapObjectSize = 1 << 27; 61 const size_t maxHeapObjectSize = 1 << 27;
61 62
62 const size_t markBitMask = 1; 63 const size_t markBitMask = 1;
63 const size_t freeListMask = 2; 64 const size_t freeListMask = 2;
64 const size_t debugBitMask = 4; 65 const size_t debugBitMask = 4;
65 const size_t sizeMask = ~7; 66 const size_t sizeMask = ~7;
66 const uint8_t freelistZapValue = 42; 67 const uint8_t freelistZapValue = 42;
67 const uint8_t finalizedZapValue = 24; 68 const uint8_t finalizedZapValue = 24;
68 69
69 class HeapStats; 70 class HeapStats;
70 class PageMemory; 71 class PageMemory;
71 template<ThreadAffinity affinity> class ThreadLocalPersistents; 72 template<ThreadAffinity affinity> class ThreadLocalPersistents;
72 template<typename T, typename RootsAccessor = ThreadLocalPersistents<ThreadingTr ait<T>::Affinity > > class Persistent; 73 template<typename T, typename RootsAccessor = ThreadLocalPersistents<ThreadingTr ait<T>::Affinity > > class Persistent;
74 template<typename T> class CrossThreadPersistent;
73 75
74 PLATFORM_EXPORT size_t osPageSize(); 76 PLATFORM_EXPORT size_t osPageSize();
75 77
76 // Blink heap pages are set up with a guard page before and after the 78 // Blink heap pages are set up with a guard page before and after the
77 // payload. 79 // payload.
78 inline size_t blinkPagePayloadSize() 80 inline size_t blinkPagePayloadSize()
79 { 81 {
80 return blinkPageSize - 2 * osPageSize(); 82 return blinkPageSize - 2 * osPageSize();
81 } 83 }
82 84
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after
552 static const int numberOfEntriesLog2 = 12; 554 static const int numberOfEntriesLog2 = 12;
553 static const int numberOfEntries = 1 << numberOfEntriesLog2; 555 static const int numberOfEntries = 1 << numberOfEntriesLog2;
554 556
555 static size_t hash(Address); 557 static size_t hash(Address);
556 558
557 WTF::OwnPtr<HeapContainsCache::Entry[]> m_entries; 559 WTF::OwnPtr<HeapContainsCache::Entry[]> m_entries;
558 560
559 friend class ThreadState; 561 friend class ThreadState;
560 }; 562 };
561 563
564 // FIXME: This is currently used by the WebAudio code.
565 // We should attempt to restructure the WebAudio code so that the main thread
566 // alone determines life-time and receives messages about life-time from the
567 // audio thread.
Ken Russell (switch to Gerrit) 2014/05/07 22:07:20 Agreed, though the audio thread needs to traverse
haraken 2014/05/08 00:52:09 Yes. Oilpan won't introduce a compacting GC. Copyi
Ken Russell (switch to Gerrit) 2014/05/08 02:01:20 We will need to be careful to not introduce hitche
Mads Ager (chromium) 2014/05/08 05:50:14 Thanks for your comments Ken. You are absolutely r
568 template<typename T>
569 class ThreadSafeRefCountedGarbageCollected : public GarbageCollectedFinalized<T> , public WTF::ThreadSafeRefCountedBase {
570 WTF_MAKE_NONCOPYABLE(ThreadSafeRefCountedGarbageCollected);
571
572 public:
573 ThreadSafeRefCountedGarbageCollected()
574 {
575 m_keepAlive = adoptPtr(new CrossThreadPersistent<T>(static_cast<T*>(this )));
576 }
577
578 // Override ref to deal with a case where a reference count goes up
579 // from 0 to 1. This can happen in the following scenario:
580 // (1) The reference count becomes 0, but on-stack pointers keep references to the object.
581 // (2) The on-stack pointer is assigned to a RefPtr. The reference count bec omes 1.
582 // In this case, we have to resurrect m_keepAlive.
583 void ref()
584 {
585 MutexLocker lock(m_mutex);
586 if (UNLIKELY(!refCount())) {
587 ASSERT(!m_keepAlive);
588 m_keepAlive = adoptPtr(new CrossThreadPersistent<T>(static_cast<T*>( this)));
589 }
590 WTF::ThreadSafeRefCountedBase::ref();
591 }
592
593 // Override deref to deal with our own deallocation based on ref counting.
594 void deref()
595 {
596 MutexLocker lock(m_mutex);
597 if (derefBase()) {
598 ASSERT(m_keepAlive);
599 m_keepAlive.clear();
600 }
601 }
602
603 using GarbageCollectedFinalized<T>::operator new;
604 using GarbageCollectedFinalized<T>::operator delete;
605
606 protected:
607 ~ThreadSafeRefCountedGarbageCollected() { }
608
609 private:
610 OwnPtr<CrossThreadPersistent<T> > m_keepAlive;
611 mutable Mutex m_mutex;
612 };
613
562 // The CallbackStack contains all the visitor callbacks used to trace and mark 614 // The CallbackStack contains all the visitor callbacks used to trace and mark
563 // objects. A specific CallbackStack instance contains at most bufferSize elemen ts. 615 // objects. A specific CallbackStack instance contains at most bufferSize elemen ts.
564 // If more space is needed a new CallbackStack instance is created and chained 616 // If more space is needed a new CallbackStack instance is created and chained
565 // together with the former instance. I.e. a logical CallbackStack can be made o f 617 // together with the former instance. I.e. a logical CallbackStack can be made o f
566 // multiple chained CallbackStack object instances. 618 // multiple chained CallbackStack object instances.
567 // There are two logical callback stacks. One containing all the marking callbac ks and 619 // There are two logical callback stacks. One containing all the marking callbac ks and
568 // one containing the weak pointer callbacks. 620 // one containing the weak pointer callbacks.
569 class CallbackStack { 621 class CallbackStack {
570 public: 622 public:
571 CallbackStack(CallbackStack** first) 623 CallbackStack(CallbackStack** first)
(...skipping 1631 matching lines...) Expand 10 before | Expand all | Expand 10 after
2203 // to export. This forces it to export all the methods from ThreadHeap. 2255 // to export. This forces it to export all the methods from ThreadHeap.
2204 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf o*); 2256 template<> void ThreadHeap<FinalizedHeapObjectHeader>::addPageToHeap(const GCInf o*);
2205 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*); 2257 template<> void ThreadHeap<HeapObjectHeader>::addPageToHeap(const GCInfo*);
2206 extern template class PLATFORM_EXPORT ThreadHeap<FinalizedHeapObjectHeader>; 2258 extern template class PLATFORM_EXPORT ThreadHeap<FinalizedHeapObjectHeader>;
2207 extern template class PLATFORM_EXPORT ThreadHeap<HeapObjectHeader>; 2259 extern template class PLATFORM_EXPORT ThreadHeap<HeapObjectHeader>;
2208 #endif 2260 #endif
2209 2261
2210 } 2262 }
2211 2263
2212 #endif // Heap_h 2264 #endif // Heap_h
OLDNEW
« Source/modules/webaudio/AudioListener.h ('K') | « Source/platform/heap/Handle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698