| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2003 Apple Computer, Inc. | 2 * Copyright (C) 2003 Apple Computer, Inc. |
| 3 * | 3 * |
| 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
| 5 * | 5 * |
| 6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
| 7 * modify it under the terms of the GNU Lesser General Public | 7 * modify it under the terms of the GNU Lesser General Public |
| 8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
| 9 * version 2.1 of the License, or (at your option) any later version. | 9 * version 2.1 of the License, or (at your option) any later version. |
| 10 * | 10 * |
| (...skipping 18 matching lines...) Expand all Loading... |
| 29 * deletingthe provisions above and replace them with the notice and | 29 * deletingthe provisions above and replace them with the notice and |
| 30 * other provisions required by the MPL or the GPL, as the case may be. | 30 * other provisions required by the MPL or the GPL, as the case may be. |
| 31 * If you do not delete the provisions above, a recipient may use your | 31 * If you do not delete the provisions above, a recipient may use your |
| 32 * version of this file under any of the LGPL, the MPL or the GPL. | 32 * version of this file under any of the LGPL, the MPL or the GPL. |
| 33 */ | 33 */ |
| 34 | 34 |
| 35 #ifndef RenderArena_h | 35 #ifndef RenderArena_h |
| 36 #define RenderArena_h | 36 #define RenderArena_h |
| 37 | 37 |
| 38 #include "core/platform/Arena.h" | 38 #include "core/platform/Arena.h" |
| 39 #include <wtf/FastAllocBase.h> | 39 #include "wtf/FastAllocBase.h" |
| 40 #include <wtf/Noncopyable.h> | 40 #include "wtf/Noncopyable.h" |
| 41 #include "wtf/PassRefPtr.h" |
| 42 #include "wtf/RefCounted.h" |
| 41 | 43 |
| 42 namespace WebCore { | 44 namespace WebCore { |
| 43 | 45 |
| 44 static const size_t gMaxRecycledSize = 1024; | 46 static const size_t gMaxRecycledSize = 1024; |
| 45 | 47 |
| 46 class RenderArena { | 48 class RenderArena : public RefCounted<RenderArena> { |
| 47 WTF_MAKE_NONCOPYABLE(RenderArena); WTF_MAKE_FAST_ALLOCATED; | |
| 48 public: | 49 public: |
| 49 explicit RenderArena(unsigned arenaSize = 8192); | 50 static PassRefPtr<RenderArena> create() { return adoptRef(new RenderArena);
} |
| 50 ~RenderArena(); | 51 ~RenderArena(); |
| 51 | 52 |
| 52 // Memory management functions | 53 // Memory management functions |
| 53 void* allocate(size_t); | 54 void* allocate(size_t); |
| 54 void free(size_t, void*); | 55 void free(size_t, void*); |
| 55 | 56 |
| 56 size_t totalRenderArenaSize() const { return m_totalSize; } | 57 size_t totalRenderArenaSize() const { return m_totalSize; } |
| 57 size_t totalRenderArenaAllocatedBytes() const { return m_totalAllocated; } | 58 size_t totalRenderArenaAllocatedBytes() const { return m_totalAllocated; } |
| 58 | 59 |
| 59 private: | 60 private: |
| 61 RenderArena(unsigned arenaSize = 8192); |
| 62 |
| 60 // Underlying arena pool | 63 // Underlying arena pool |
| 61 ArenaPool m_pool; | 64 ArenaPool m_pool; |
| 62 | 65 |
| 63 // The mask used to secure the recycled freelist pointers. | 66 // The mask used to secure the recycled freelist pointers. |
| 64 uintptr_t m_mask; | 67 uintptr_t m_mask; |
| 65 // The recycler array is sparse with the indices being multiples of the | 68 // The recycler array is sparse with the indices being multiples of the |
| 66 // rounding size, sizeof(void*), i.e., 0, 4, 8, 12, 16, 20, ... on 32-bit. | 69 // rounding size, sizeof(void*), i.e., 0, 4, 8, 12, 16, 20, ... on 32-bit. |
| 67 static const size_t kRecyclerShift = (sizeof(void*) == 8) ? 3 : 2; | 70 static const size_t kRecyclerShift = (sizeof(void*) == 8) ? 3 : 2; |
| 68 void* m_recyclers[gMaxRecycledSize >> kRecyclerShift]; | 71 void* m_recyclers[gMaxRecycledSize >> kRecyclerShift]; |
| 69 | 72 |
| 70 size_t m_totalSize; | 73 size_t m_totalSize; |
| 71 size_t m_totalAllocated; | 74 size_t m_totalAllocated; |
| 72 }; | 75 }; |
| 73 | 76 |
| 74 } // namespace WebCore | 77 } // namespace WebCore |
| 75 | 78 |
| 76 #endif // RenderArena_h | 79 #endif // RenderArena_h |
| OLD | NEW |