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

Side by Side Diff: runtime/vm/zone.h

Issue 1663863002: Add product mode: (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Reworked the flags setting: Moving to single file for all flag defintions. Created 4 years, 10 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
« no previous file with comments | « runtime/vm/vm_sources.gypi ('k') | runtime/vm/zone.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef VM_ZONE_H_ 5 #ifndef VM_ZONE_H_
6 #define VM_ZONE_H_ 6 #define VM_ZONE_H_
7 7
8 #include "platform/utils.h" 8 #include "platform/utils.h"
9 #include "vm/allocation.h" 9 #include "vm/allocation.h"
10 #include "vm/handles.h" 10 #include "vm/handles.h"
11 #include "vm/thread.h" 11 #include "vm/thread.h"
12 #include "vm/memory_region.h" 12 #include "vm/memory_region.h"
13 13
14 namespace dart { 14 namespace dart {
15 15
16 DECLARE_DEBUG_FLAG(bool, trace_zones);
17
18 // Zones support very fast allocation of small chunks of memory. The 16 // Zones support very fast allocation of small chunks of memory. The
19 // chunks cannot be deallocated individually, but instead zones 17 // chunks cannot be deallocated individually, but instead zones
20 // support deallocating all chunks in one fast operation. 18 // support deallocating all chunks in one fast operation.
21 19
22 class Zone { 20 class Zone {
23 public: 21 public:
24 // Allocate an array sized to hold 'len' elements of type 22 // Allocate an array sized to hold 'len' elements of type
25 // 'ElementType'. Checks for integer overflow when performing the 23 // 'ElementType'. Checks for integer overflow when performing the
26 // size computation. 24 // size computation.
27 template <class ElementType> 25 template <class ElementType>
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 previous_(NULL) { 77 previous_(NULL) {
80 ASSERT(Utils::IsAligned(position_, kAlignment)); 78 ASSERT(Utils::IsAligned(position_, kAlignment));
81 #ifdef DEBUG 79 #ifdef DEBUG
82 // Zap the entire initial buffer. 80 // Zap the entire initial buffer.
83 memset(initial_buffer_.pointer(), kZapUninitializedByte, 81 memset(initial_buffer_.pointer(), kZapUninitializedByte,
84 initial_buffer_.size()); 82 initial_buffer_.size());
85 #endif 83 #endif
86 } 84 }
87 85
88 ~Zone() { // Delete all memory associated with the zone. 86 ~Zone() { // Delete all memory associated with the zone.
89 #if defined(DEBUG)
90 if (FLAG_trace_zones) { 87 if (FLAG_trace_zones) {
91 DumpZoneSizes(); 88 DumpZoneSizes();
92 } 89 }
93 #endif
94 DeleteAll(); 90 DeleteAll();
95 } 91 }
96 92
97 // All pointers returned from AllocateUnsafe() and New() have this alignment. 93 // All pointers returned from AllocateUnsafe() and New() have this alignment.
98 static const intptr_t kAlignment = kDoubleSize; 94 static const intptr_t kAlignment = kDoubleSize;
99 95
100 // Default initial chunk size. 96 // Default initial chunk size.
101 static const intptr_t kInitialChunkSize = 1 * KB; 97 static const intptr_t kInitialChunkSize = 1 * KB;
102 98
103 // Default segment size. 99 // Default segment size.
(...skipping 23 matching lines...) Expand all
127 // BaseGrowableArray to use different allocators. 123 // BaseGrowableArray to use different allocators.
128 template <class ElementType> 124 template <class ElementType>
129 void Free(ElementType* old_array, intptr_t len) { 125 void Free(ElementType* old_array, intptr_t len) {
130 #ifdef DEBUG 126 #ifdef DEBUG
131 if (len > 0) { 127 if (len > 0) {
132 memset(old_array, kZapUninitializedByte, len * sizeof(ElementType)); 128 memset(old_array, kZapUninitializedByte, len * sizeof(ElementType));
133 } 129 }
134 #endif 130 #endif
135 } 131 }
136 132
137 #if defined(DEBUG)
138 // Dump the current allocated sizes in the zone object. 133 // Dump the current allocated sizes in the zone object.
139 void DumpZoneSizes(); 134 void DumpZoneSizes();
140 #endif
141 135
142 // Overflow check (FATAL) for array length. 136 // Overflow check (FATAL) for array length.
143 template <class ElementType> 137 template <class ElementType>
144 static inline void CheckLength(intptr_t len); 138 static inline void CheckLength(intptr_t len);
145 139
146 // This buffer is used for allocation before any segments. 140 // This buffer is used for allocation before any segments.
147 // This would act as the initial stack allocated chunk so that we don't 141 // This would act as the initial stack allocated chunk so that we don't
148 // end up calling malloc/free on zone scopes that allocate less than 142 // end up calling malloc/free on zone scopes that allocate less than
149 // kChunkSize 143 // kChunkSize
150 COMPILE_ASSERT(kAlignment <= 8); 144 COMPILE_ASSERT(kAlignment <= 8);
(...skipping 28 matching lines...) Expand all
179 template<typename T, typename B, typename Allocator> 173 template<typename T, typename B, typename Allocator>
180 friend class BaseGrowableArray; 174 friend class BaseGrowableArray;
181 DISALLOW_COPY_AND_ASSIGN(Zone); 175 DISALLOW_COPY_AND_ASSIGN(Zone);
182 }; 176 };
183 177
184 178
185 class StackZone : public StackResource { 179 class StackZone : public StackResource {
186 public: 180 public:
187 // Create an empty zone and set is at the current zone for the Thread. 181 // Create an empty zone and set is at the current zone for the Thread.
188 explicit StackZone(Thread* thread) : StackResource(thread), zone_() { 182 explicit StackZone(Thread* thread) : StackResource(thread), zone_() {
189 #ifdef DEBUG
190 if (FLAG_trace_zones) { 183 if (FLAG_trace_zones) {
191 OS::PrintErr("*** Starting a new Stack zone 0x%" Px "(0x%" Px ")\n", 184 OS::PrintErr("*** Starting a new Stack zone 0x%" Px "(0x%" Px ")\n",
192 reinterpret_cast<intptr_t>(this), 185 reinterpret_cast<intptr_t>(this),
193 reinterpret_cast<intptr_t>(&zone_)); 186 reinterpret_cast<intptr_t>(&zone_));
194 } 187 }
195 #endif
196 zone_.Link(thread->zone()); 188 zone_.Link(thread->zone());
197 thread->set_zone(&zone_); 189 thread->set_zone(&zone_);
198 } 190 }
199 191
200 // Delete all memory associated with the zone. 192 // Delete all memory associated with the zone.
201 ~StackZone() { 193 ~StackZone() {
202 ASSERT(thread()->zone() == &zone_); 194 ASSERT(thread()->zone() == &zone_);
203 thread()->set_zone(zone_.previous_); 195 thread()->set_zone(zone_.previous_);
204 #ifdef DEBUG
205 if (FLAG_trace_zones) { 196 if (FLAG_trace_zones) {
206 OS::PrintErr("*** Deleting Stack zone 0x%" Px "(0x%" Px ")\n", 197 OS::PrintErr("*** Deleting Stack zone 0x%" Px "(0x%" Px ")\n",
207 reinterpret_cast<intptr_t>(this), 198 reinterpret_cast<intptr_t>(this),
208 reinterpret_cast<intptr_t>(&zone_)); 199 reinterpret_cast<intptr_t>(&zone_));
209 } 200 }
210 #endif
211 } 201 }
212 202
213 // Compute the total size of this zone. This includes wasted space that is 203 // Compute the total size of this zone. This includes wasted space that is
214 // due to internal fragmentation in the segments. 204 // due to internal fragmentation in the segments.
215 intptr_t SizeInBytes() const { return zone_.SizeInBytes(); } 205 intptr_t SizeInBytes() const { return zone_.SizeInBytes(); }
216 206
217 Zone* GetZone() { return &zone_; } 207 Zone* GetZone() { return &zone_; }
218 208
219 private: 209 private:
220 Zone zone_; 210 Zone zone_;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 memmove(reinterpret_cast<void*>(new_data), 281 memmove(reinterpret_cast<void*>(new_data),
292 reinterpret_cast<void*>(old_data), 282 reinterpret_cast<void*>(old_data),
293 old_len * kElementSize); 283 old_len * kElementSize);
294 } 284 }
295 return new_data; 285 return new_data;
296 } 286 }
297 287
298 } // namespace dart 288 } // namespace dart
299 289
300 #endif // VM_ZONE_H_ 290 #endif // VM_ZONE_H_
OLDNEW
« no previous file with comments | « runtime/vm/vm_sources.gypi ('k') | runtime/vm/zone.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698