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

Side by Side Diff: third_party/WebKit/Source/platform/heap/PageMemory.h

Issue 2619493003: Replace ASSERTs in platform/heap/ with DCHECKs
Patch Set: temp Created 3 years, 11 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef PageMemory_h 5 #ifndef PageMemory_h
6 #define PageMemory_h 6 #define PageMemory_h
7 7
8 #include "platform/heap/HeapPage.h" 8 #include "platform/heap/HeapPage.h"
9 #include "wtf/Allocator.h" 9 #include "wtf/Allocator.h"
10 #include "wtf/Assertions.h" 10 #include "wtf/Assertions.h"
11 #include "wtf/Compiler.h" 11 #include "wtf/Compiler.h"
12 #include "wtf/allocator/Partitions.h" 12 #include "wtf/allocator/Partitions.h"
13 13
14 #if OS(POSIX) 14 #if OS(POSIX)
15 #include <sys/mman.h> 15 #include <sys/mman.h>
16 #include <unistd.h> 16 #include <unistd.h>
17 #endif 17 #endif
18 18
19 namespace blink { 19 namespace blink {
20 20
21 class RegionTree; 21 class RegionTree;
22 class RegionTreeNode; 22 class RegionTreeNode;
23 23
24 class MemoryRegion { 24 class MemoryRegion {
25 USING_FAST_MALLOC(MemoryRegion); 25 USING_FAST_MALLOC(MemoryRegion);
26 26
27 public: 27 public:
28 MemoryRegion(Address base, size_t size) : m_base(base), m_size(size) { 28 MemoryRegion(Address base, size_t size) : m_base(base), m_size(size) {
29 ASSERT(size > 0); 29 DCHECK_GT(size, 0UL);
30 } 30 }
31 31
32 bool contains(Address addr) const { 32 bool contains(Address addr) const {
33 return m_base <= addr && addr < (m_base + m_size); 33 return m_base <= addr && addr < (m_base + m_size);
34 } 34 }
35 35
36 bool contains(const MemoryRegion& other) const { 36 bool contains(const MemoryRegion& other) const {
37 return contains(other.m_base) && contains(other.m_base + other.m_size - 1); 37 return contains(other.m_base) && contains(other.m_base + other.m_size - 1);
38 } 38 }
39 39
(...skipping 15 matching lines...) Expand all
55 // whole. The PageMemoryRegion allows us to do that by keeping track 55 // whole. The PageMemoryRegion allows us to do that by keeping track
56 // of the number of pages using it in order to be able to release all 56 // of the number of pages using it in order to be able to release all
57 // of the virtual address space when there are no more pages using it. 57 // of the virtual address space when there are no more pages using it.
58 class PageMemoryRegion : public MemoryRegion { 58 class PageMemoryRegion : public MemoryRegion {
59 public: 59 public:
60 ~PageMemoryRegion(); 60 ~PageMemoryRegion();
61 61
62 void pageDeleted(Address); 62 void pageDeleted(Address);
63 63
64 void markPageUsed(Address page) { 64 void markPageUsed(Address page) {
65 ASSERT(!m_inUse[index(page)]); 65 DCHECK(!m_inUse[index(page)]);
66 m_inUse[index(page)] = true; 66 m_inUse[index(page)] = true;
67 } 67 }
68 68
69 void markPageUnused(Address page) { m_inUse[index(page)] = false; } 69 void markPageUnused(Address page) { m_inUse[index(page)] = false; }
70 70
71 static PageMemoryRegion* allocateLargePage(size_t size, 71 static PageMemoryRegion* allocateLargePage(size_t size,
72 RegionTree* regionTree) { 72 RegionTree* regionTree) {
73 return allocate(size, 1, regionTree); 73 return allocate(size, 1, regionTree);
74 } 74 }
75 75
76 static PageMemoryRegion* allocateNormalPages(RegionTree* regionTree) { 76 static PageMemoryRegion* allocateNormalPages(RegionTree* regionTree) {
77 return allocate(blinkPageSize * blinkPagesPerRegion, blinkPagesPerRegion, 77 return allocate(blinkPageSize * blinkPagesPerRegion, blinkPagesPerRegion,
78 regionTree); 78 regionTree);
79 } 79 }
80 80
81 BasePage* pageFromAddress(Address address) { 81 BasePage* pageFromAddress(Address address) {
82 ASSERT(contains(address)); 82 DCHECK(contains(address));
83 if (!m_inUse[index(address)]) 83 if (!m_inUse[index(address)])
84 return nullptr; 84 return nullptr;
85 if (m_isLargePage) 85 if (m_isLargePage)
86 return pageFromObject(base()); 86 return pageFromObject(base());
87 return pageFromObject(address); 87 return pageFromObject(address);
88 } 88 }
89 89
90 private: 90 private:
91 PageMemoryRegion(Address base, size_t, unsigned numPages, RegionTree*); 91 PageMemoryRegion(Address base, size_t, unsigned numPages, RegionTree*);
92 92
93 unsigned index(Address address) const { 93 unsigned index(Address address) const {
94 ASSERT(contains(address)); 94 DCHECK(contains(address));
95 if (m_isLargePage) 95 if (m_isLargePage)
96 return 0; 96 return 0;
97 size_t offset = blinkPageAddress(address) - base(); 97 size_t offset = blinkPageAddress(address) - base();
98 ASSERT(offset % blinkPageSize == 0); 98 DCHECK_EQ(offset % blinkPageSize, 0UL);
99 return offset / blinkPageSize; 99 return offset / blinkPageSize;
100 } 100 }
101 101
102 static PageMemoryRegion* allocate(size_t, unsigned numPages, RegionTree*); 102 static PageMemoryRegion* allocate(size_t, unsigned numPages, RegionTree*);
103 103
104 const bool m_isLargePage; 104 const bool m_isLargePage;
105 // A thread owns a page, but not a region. Represent the in-use 105 // A thread owns a page, but not a region. Represent the in-use
106 // bitmap such that thread non-interference comes for free. 106 // bitmap such that thread non-interference comes for free.
107 bool m_inUse[blinkPagesPerRegion]; 107 bool m_inUse[blinkPagesPerRegion];
108 int m_numPages; 108 int m_numPages;
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after
205 private: 205 private:
206 PageMemory(PageMemoryRegion* reserved, const MemoryRegion& writable); 206 PageMemory(PageMemoryRegion* reserved, const MemoryRegion& writable);
207 207
208 PageMemoryRegion* m_reserved; 208 PageMemoryRegion* m_reserved;
209 MemoryRegion m_writable; 209 MemoryRegion m_writable;
210 }; 210 };
211 211
212 } // namespace blink 212 } // namespace blink
213 213
214 #endif 214 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698