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

Unified Diff: runtime/vm/zone.cc

Issue 2362573002: Move Zone's destructor out of a header file. (Closed)
Patch Set: . Created 4 years, 3 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/zone.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/zone.cc
diff --git a/runtime/vm/zone.cc b/runtime/vm/zone.cc
index 743727a54f91a3abffc9b8b9efb41a1798ae8620..ac79f356b6c94d9eb50f8b688465736eceaf8252 100644
--- a/runtime/vm/zone.cc
+++ b/runtime/vm/zone.cc
@@ -72,6 +72,31 @@ Zone::Segment* Zone::Segment::New(intptr_t size, Zone::Segment* next) {
}
+Zone::Zone()
+ : initial_buffer_(buffer_, kInitialChunkSize),
+ position_(initial_buffer_.start()),
+ limit_(initial_buffer_.end()),
+ head_(NULL),
+ large_segments_(NULL),
+ handles_(),
+ previous_(NULL) {
+ ASSERT(Utils::IsAligned(position_, kAlignment));
+#ifdef DEBUG
+ // Zap the entire initial buffer.
+ memset(initial_buffer_.pointer(), kZapUninitializedByte,
+ initial_buffer_.size());
+#endif
+}
+
+
+Zone::~Zone() {
+ if (FLAG_trace_zones) {
+ DumpZoneSizes();
+ }
+ DeleteAll();
+}
+
+
void Zone::DeleteAll() {
// Traverse the chained list of segments, zapping (in debug mode)
// and freeing every zone segment.
@@ -234,4 +259,25 @@ char* Zone::VPrint(const char* format, va_list args) {
}
+StackZone::StackZone(Thread* thread) : StackResource(thread), zone_() {
+ 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_));
+ }
+ zone_.Link(thread->zone());
+ thread->set_zone(&zone_);
+}
+
+
+StackZone::~StackZone() {
+ ASSERT(thread()->zone() == &zone_);
+ thread()->set_zone(zone_.previous_);
+ if (FLAG_trace_zones) {
+ OS::PrintErr("*** Deleting Stack zone 0x%" Px "(0x%" Px ")\n",
+ reinterpret_cast<intptr_t>(this),
+ reinterpret_cast<intptr_t>(&zone_));
+ }
+}
+
} // namespace dart
« no previous file with comments | « runtime/vm/zone.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698