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

Unified Diff: src/zone.h

Issue 10534139: One Zone per CompilationInfo. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 6 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
Index: src/zone.h
diff --git a/src/zone.h b/src/zone.h
index 1bc4984aa2520b0b8d84831290741252e189ee69..761c38f495e8c46676c4d635a1a2295e02c39c0d 100644
--- a/src/zone.h
+++ b/src/zone.h
@@ -64,6 +64,7 @@ class Isolate;
class Zone {
public:
+ explicit Zone(Isolate* isolate);
// Allocate 'size' bytes of memory in the Zone; expands the Zone by
// allocating new segments of memory on demand using malloc().
inline void* New(int size);
@@ -71,9 +72,10 @@ class Zone {
template <typename T>
inline T* NewArray(int length);
- // Deletes all objects and free all memory allocated in the Zone. Keeps one
- // small (size <= kMaximumKeptSegmentSize) segment around if it finds one.
- void DeleteAll();
+ // This method dispatches to either DeleteAll or to DeleteAllButOne
+ // depending on whether this is the singleton Zone in the isolate or
+ // not.
+ void Destroy();
danno 2012/06/14 14:22:19 Why not just make sure that the destructor of the
sanjoy 2012/06/15 09:24:31 Yes, that is much cleaner. Done.
// Deletes the last small segment kept around by DeleteAll().
void DeleteKeptSegment();
@@ -92,6 +94,13 @@ class Zone {
friend class Isolate;
friend class ZoneScope;
+ // Frees all memory allocated to this Zone.
+ void DeleteAll();
+
+ // Deletes all objects and free all memory allocated in the Zone. Keeps one
+ // small (size <= kMaximumKeptSegmentSize) segment around if it finds one.
+ void DeleteAllButOne();
+
// All pointers returned from New() have this alignment. In addition, if the
// object being allocated has a size that is divisible by 8 then its alignment
// will be 8.
@@ -114,9 +123,6 @@ class Zone {
// the zone.
int segment_bytes_allocated_;
- // Each isolate gets its own zone.
- Zone();
-
// Expand the Zone to hold at least 'size' more bytes and allocate
// the bytes. Returns the address of the newly allocated chunk of
// memory in the Zone. Should only be called if there isn't enough
@@ -157,7 +163,7 @@ class ZoneObject {
// operator to be public.
// ZoneObjects should never be deleted individually; use
- // Zone::DeleteAll() to delete all zone objects in one go.
+ // Zone::Destroy() to delete all zone objects in one go.
void operator delete(void*, size_t) { UNREACHABLE(); }
void operator delete(void* pointer, Zone* zone) { UNREACHABLE(); }
};
@@ -179,7 +185,7 @@ struct ZoneAllocationPolicy {
// ZoneLists are growable lists with constant-time access to the
// elements. The list itself and all its elements are allocated in the
// Zone. ZoneLists cannot be deleted individually; you can delete all
-// objects in the Zone by calling Zone::DeleteAll().
+// objects in the Zone by calling Zone::Destroy().
template<typename T>
class ZoneList: public List<T, ZoneAllocationPolicy> {
public:
@@ -235,7 +241,7 @@ class ZoneList: public List<T, ZoneAllocationPolicy> {
// outer-most scope.
class ZoneScope BASE_EMBEDDED {
public:
- INLINE(ZoneScope(Isolate* isolate, ZoneScopeMode mode));
+ INLINE(ZoneScope(Zone* zone, ZoneScopeMode mode));
virtual ~ZoneScope();
@@ -250,7 +256,7 @@ class ZoneScope BASE_EMBEDDED {
inline static int nesting();
private:
- Isolate* isolate_;
+ Zone* zone_;
ZoneScopeMode mode_;
};

Powered by Google App Engine
This is Rietveld 408576698