OLD | NEW |
1 // Copyright (c) 2005, 2007, Google Inc. | 1 // Copyright (c) 2005, 2007, Google Inc. |
2 // All rights reserved. | 2 // All rights reserved. |
3 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserv
ed. | 3 // Copyright (C) 2005, 2006, 2007, 2008, 2009, 2011 Apple Inc. All rights reserv
ed. |
4 // | 4 // |
5 // Redistribution and use in source and binary forms, with or without | 5 // Redistribution and use in source and binary forms, with or without |
6 // modification, are permitted provided that the following conditions are | 6 // modification, are permitted provided that the following conditions are |
7 // met: | 7 // met: |
8 // | 8 // |
9 // * Redistributions of source code must retain the above copyright | 9 // * Redistributions of source code must retain the above copyright |
10 // notice, this list of conditions and the following disclaimer. | 10 // notice, this list of conditions and the following disclaimer. |
(...skipping 13 matching lines...) Expand all Loading... |
24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
30 | 30 |
31 #include "config.h" | 31 #include "config.h" |
32 #include "wtf/FastMalloc.h" | 32 #include "wtf/FastMalloc.h" |
33 | 33 |
| 34 #include "wtf/PartitionAlloc.h" |
| 35 #include "wtf/SpinLock.h" |
34 #include <string.h> | 36 #include <string.h> |
35 | 37 |
36 namespace WTF { | 38 namespace WTF { |
37 | 39 |
| 40 static PartitionAllocatorGeneric gPartition; |
| 41 static int gLock = 0; |
| 42 static bool gInitialized = false; |
| 43 |
38 void* fastZeroedMalloc(size_t n) | 44 void* fastZeroedMalloc(size_t n) |
39 { | 45 { |
40 void* result = fastMalloc(n); | 46 void* result = fastMalloc(n); |
41 memset(result, 0, n); | 47 memset(result, 0, n); |
42 return result; | 48 return result; |
43 } | 49 } |
44 | 50 |
45 char* fastStrDup(const char* src) | 51 char* fastStrDup(const char* src) |
46 { | 52 { |
47 size_t len = strlen(src) + 1; | 53 size_t len = strlen(src) + 1; |
48 char* dup = static_cast<char*>(fastMalloc(len)); | 54 char* dup = static_cast<char*>(fastMalloc(len)); |
49 memcpy(dup, src, len); | 55 memcpy(dup, src, len); |
50 return dup; | 56 return dup; |
51 } | 57 } |
52 | 58 |
53 FastMallocStatistics fastMallocStatistics() | 59 FastMallocStatistics fastMallocStatistics() |
54 { | 60 { |
55 FastMallocStatistics statistics = { 0, 0, 0 }; | 61 FastMallocStatistics statistics = { 0, 0, 0 }; |
56 return statistics; | 62 return statistics; |
57 } | 63 } |
58 | 64 |
59 } // namespace WTF | |
60 | |
61 #if USE(SYSTEM_MALLOC) | |
62 | |
63 #include "wtf/Assertions.h" | |
64 | |
65 #include <stdlib.h> | |
66 | |
67 namespace WTF { | |
68 | |
69 void fastMallocShutdown() | |
70 { | |
71 } | |
72 | |
73 void* fastMalloc(size_t n) | |
74 { | |
75 void* result = malloc(n); | |
76 ASSERT(result); // We expect tcmalloc underneath, which would crash instead
of getting here. | |
77 | |
78 return result; | |
79 } | |
80 | |
81 void fastFree(void* p) | |
82 { | |
83 free(p); | |
84 } | |
85 | |
86 void* fastRealloc(void* p, size_t n) | |
87 { | |
88 void* result = realloc(p, n); | |
89 ASSERT(result); // We expect tcmalloc underneath, which would crash instead
of getting here. | |
90 | |
91 return result; | |
92 } | |
93 | |
94 } // namespace WTF | |
95 | |
96 #else // USE(SYSTEM_MALLOC) | |
97 | |
98 #include "wtf/PartitionAlloc.h" | |
99 #include "wtf/SpinLock.h" | |
100 | |
101 namespace WTF { | |
102 | |
103 static PartitionAllocatorGeneric gPartition; | |
104 static int gLock = 0; | |
105 static bool gInitialized = false; | |
106 | |
107 void fastMallocShutdown() | 65 void fastMallocShutdown() |
108 { | 66 { |
109 gPartition.shutdown(); | 67 gPartition.shutdown(); |
110 } | 68 } |
111 | 69 |
112 void* fastMalloc(size_t n) | 70 void* fastMalloc(size_t n) |
113 { | 71 { |
114 if (UNLIKELY(!gInitialized)) { | 72 if (UNLIKELY(!gInitialized)) { |
115 spinLockLock(&gLock); | 73 spinLockLock(&gLock); |
116 if (!gInitialized) { | 74 if (!gInitialized) { |
117 gInitialized = true; | 75 gInitialized = true; |
118 gPartition.init(); | 76 gPartition.init(); |
119 } | 77 } |
120 spinLockUnlock(&gLock); | 78 spinLockUnlock(&gLock); |
121 } | 79 } |
122 return partitionAllocGeneric(gPartition.root(), n); | 80 return partitionAllocGeneric(gPartition.root(), n); |
123 } | 81 } |
124 | 82 |
125 void fastFree(void* p) | 83 void fastFree(void* p) |
126 { | 84 { |
127 partitionFreeGeneric(gPartition.root(), p); | 85 partitionFreeGeneric(gPartition.root(), p); |
128 } | 86 } |
129 | 87 |
130 void* fastRealloc(void* p, size_t n) | 88 void* fastRealloc(void* p, size_t n) |
131 { | 89 { |
132 return partitionReallocGeneric(gPartition.root(), p, n); | 90 return partitionReallocGeneric(gPartition.root(), p, n); |
133 } | 91 } |
134 | 92 |
135 } // namespace WTF | 93 } // namespace WTF |
136 | |
137 #endif // USE(SYSTEM_MALLOC) | |
OLD | NEW |