Chromium Code Reviews

Unified Diff: src/heap.h

Issue 8700: As discussed on the phone, I'd like your thoughts on the... (Closed) Base URL: http://v8.googlecode.com/svn/branches/bleeding_edge/
Patch Set: '' Created 12 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
« no previous file with comments | « src/codegen-ia32.cc ('k') | src/heap.cc » ('j') | src/heap.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/heap.h
===================================================================
--- src/heap.h (revision 645)
+++ src/heap.h (working copy)
@@ -260,6 +260,11 @@
static MapSpace* map_space() { return map_space_; }
static LargeObjectSpace* lo_space() { return lo_space_; }
+ static bool always_allocate() { return always_allocate_scope_depth_ != 0; }
Erik Corry 2008/10/30 09:08:43 As discussed offline the next change should have a
+ static Address always_allocate_scope_depth_address() {
+ return reinterpret_cast<Address>(&always_allocate_scope_depth_);
+ }
+
static Address* NewSpaceAllocationTopAddress() {
return new_space_.allocation_top_address();
}
@@ -523,7 +528,8 @@
// failed.
// Please note this function does not perform a garbage collection.
static inline Object* AllocateRaw(int size_in_bytes,
- AllocationSpace space);
+ AllocationSpace space,
+ AllocationSpace retry_space);
// Makes a new native code object
// Returns Failure::RetryAfterGC(requested_bytes, space) if the allocation
@@ -631,6 +637,7 @@
// Finds out which space an object should get promoted to based on its type.
static inline OldSpace* TargetSpace(HeapObject* object);
+ static inline AllocationSpace TargetSpaceId(InstanceType type);
// Sets the stub_cache_ (only used when expanding the dictionary).
static void set_code_stubs(Dictionary* value) { code_stubs_ = value; }
@@ -767,6 +774,8 @@
static int new_space_growth_limit_;
static int scavenge_count_;
+ static int always_allocate_scope_depth_;
+
static const int kMaxMapSpaceSize = 8*MB;
static NewSpace new_space_;
@@ -925,9 +934,28 @@
friend class Factory;
friend class DisallowAllocationFailure;
+ friend class AlwaysAllocateScope;
};
+class AlwaysAllocateScope {
+ public:
+ AlwaysAllocateScope() {
+ // We shouldn't hit any nested scopes, because that requires
+ // non-handle code to call handle code. The code still works but
+ // performance will degrade, so we want to catch this situation
+ // in debug mode.
+ ASSERT(Heap::always_allocate_scope_depth_ == 0);
+ Heap::always_allocate_scope_depth_++;
+ }
+
+ ~AlwaysAllocateScope() {
+ Heap::always_allocate_scope_depth_--;
+ ASSERT(Heap::always_allocate_scope_depth_ == 0);
+ }
+};
+
+
#ifdef DEBUG
// Visitor class to verify interior pointers that do not have remembered set
// bits. All heap object pointers have to point into the heap to a location
« no previous file with comments | « src/codegen-ia32.cc ('k') | src/heap.cc » ('j') | src/heap.cc » ('J')

Powered by Google App Engine