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

Unified Diff: runtime/vm/zone.h

Issue 22307003: Rearrange some methods so that they get inlined. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/vm_sources.gypi ('k') | runtime/vm/zone.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/zone.h
===================================================================
--- runtime/vm/zone.h (revision 25803)
+++ runtime/vm/zone.h (working copy)
@@ -12,6 +12,8 @@
namespace dart {
+DECLARE_DEBUG_FLAG(bool, trace_zones);
+
// Zones support very fast allocation of small chunks of memory. The
// chunks cannot be deallocated individually, but instead zones
// support deallocating all chunks in one fast operation.
@@ -57,9 +59,30 @@
void VisitObjectPointers(ObjectPointerVisitor* visitor);
private:
- Zone();
- ~Zone(); // Delete all memory associated with the zone.
+ Zone()
+ : initial_buffer_(buffer_, kInitialChunkSize),
+ position_(initial_buffer_.start()),
+ limit_(initial_buffer_.end()),
+ head_(NULL),
+ large_segments_(NULL),
+ handles_(),
+ previous_(NULL) {
+#ifdef DEBUG
+ // Zap the entire initial buffer.
+ memset(initial_buffer_.pointer(), kZapUninitializedByte,
+ initial_buffer_.size());
+#endif
+ }
+ ~Zone() { // Delete all memory associated with the zone.
+#if defined(DEBUG)
+ if (FLAG_trace_zones) {
+ DumpZoneSizes();
+ }
+#endif
+ DeleteAll();
+ }
+
// All pointers returned from AllocateUnsafe() and New() have this alignment.
static const intptr_t kAlignment = kWordSize;
@@ -134,10 +157,32 @@
class StackZone : public StackResource {
public:
// Create an empty zone and set is at the current zone for the Isolate.
- explicit StackZone(BaseIsolate* isolate);
+ explicit StackZone(BaseIsolate* isolate)
+ : StackResource(isolate),
+ zone_() {
+#ifdef DEBUG
+ if (FLAG_trace_zones) {
+ OS::PrintErr("*** Starting a new Stack zone 0x%"Px"(0x%"Px")\n",
+ reinterpret_cast<intptr_t>(this),
+ reinterpret_cast<intptr_t>(&zone_));
+ }
+#endif
+ zone_.Link(isolate->current_zone());
+ isolate->set_current_zone(&zone_);
+ }
// Delete all memory associated with the zone.
- ~StackZone();
+ ~StackZone() {
+ ASSERT(isolate()->current_zone() == &zone_);
+ isolate()->set_current_zone(zone_.previous_);
+#ifdef DEBUG
+ if (FLAG_trace_zones) {
+ OS::PrintErr("*** Deleting Stack zone 0x%"Px"(0x%"Px")\n",
+ reinterpret_cast<intptr_t>(this),
+ reinterpret_cast<intptr_t>(&zone_));
+ }
+#endif
+ }
// Compute the total size of this zone. This includes wasted space that is
// due to internal fragmentation in the segments.
« 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