| Index: src/heap.cc
|
| ===================================================================
|
| --- src/heap.cc (revision 10404)
|
| +++ src/heap.cc (working copy)
|
| @@ -176,7 +176,7 @@
|
|
|
|
|
| intptr_t Heap::Capacity() {
|
| - if (!HasBeenSetup()) return 0;
|
| + if (!HasBeenSetUp()) return 0;
|
|
|
| return new_space_.Capacity() +
|
| old_pointer_space_->Capacity() +
|
| @@ -188,7 +188,7 @@
|
|
|
|
|
| intptr_t Heap::CommittedMemory() {
|
| - if (!HasBeenSetup()) return 0;
|
| + if (!HasBeenSetUp()) return 0;
|
|
|
| return new_space_.CommittedMemory() +
|
| old_pointer_space_->CommittedMemory() +
|
| @@ -200,14 +200,14 @@
|
| }
|
|
|
| intptr_t Heap::CommittedMemoryExecutable() {
|
| - if (!HasBeenSetup()) return 0;
|
| + if (!HasBeenSetUp()) return 0;
|
|
|
| return isolate()->memory_allocator()->SizeExecutable();
|
| }
|
|
|
|
|
| intptr_t Heap::Available() {
|
| - if (!HasBeenSetup()) return 0;
|
| + if (!HasBeenSetUp()) return 0;
|
|
|
| return new_space_.Available() +
|
| old_pointer_space_->Available() +
|
| @@ -218,7 +218,7 @@
|
| }
|
|
|
|
|
| -bool Heap::HasBeenSetup() {
|
| +bool Heap::HasBeenSetUp() {
|
| return old_pointer_space_ != NULL &&
|
| old_data_space_ != NULL &&
|
| code_space_ != NULL &&
|
| @@ -1354,6 +1354,28 @@
|
| }
|
|
|
|
|
| +void Heap::VisitExternalResources(v8::ExternalResourceVisitor* visitor) {
|
| + AssertNoAllocation no_allocation;
|
| +
|
| + class VisitorAdapter : public ObjectVisitor {
|
| + public:
|
| + explicit VisitorAdapter(v8::ExternalResourceVisitor* visitor)
|
| + : visitor_(visitor) {}
|
| + virtual void VisitPointers(Object** start, Object** end) {
|
| + for (Object** p = start; p < end; p++) {
|
| + if ((*p)->IsExternalString()) {
|
| + visitor_->VisitExternalString(Utils::ToLocal(
|
| + Handle<String>(String::cast(*p))));
|
| + }
|
| + }
|
| + }
|
| + private:
|
| + v8::ExternalResourceVisitor* visitor_;
|
| + } visitor_adapter(visitor);
|
| + external_string_table_.Iterate(&visitor_adapter);
|
| +}
|
| +
|
| +
|
| class NewSpaceScavenger : public StaticNewSpaceVisitor<NewSpaceScavenger> {
|
| public:
|
| static inline void VisitPointer(Heap* heap, Object** p) {
|
| @@ -1869,6 +1891,19 @@
|
| }
|
|
|
|
|
| +MaybeObject* Heap::AllocateAccessorPair() {
|
| + Object* result;
|
| + { MaybeObject* maybe_result = AllocateStruct(ACCESSOR_PAIR_TYPE);
|
| + if (!maybe_result->ToObject(&result)) return maybe_result;
|
| + }
|
| + AccessorPair* accessors = AccessorPair::cast(result);
|
| + // Later we will have to distinguish between undefined and the hole...
|
| + // accessors->set_getter(the_hole_value(), SKIP_WRITE_BARRIER);
|
| + // accessors->set_setter(the_hole_value(), SKIP_WRITE_BARRIER);
|
| + return accessors;
|
| +}
|
| +
|
| +
|
| const Heap::StringTypeTable Heap::string_type_table[] = {
|
| #define STRING_TYPE_ELEMENT(type, size, name, camel_name) \
|
| {type, size, k##camel_name##MapRootIndex},
|
| @@ -2428,18 +2463,18 @@
|
|
|
| // Allocate the code_stubs dictionary. The initial size is set to avoid
|
| // expanding the dictionary during bootstrapping.
|
| - { MaybeObject* maybe_obj = NumberDictionary::Allocate(128);
|
| + { MaybeObject* maybe_obj = UnseededNumberDictionary::Allocate(128);
|
| if (!maybe_obj->ToObject(&obj)) return false;
|
| }
|
| - set_code_stubs(NumberDictionary::cast(obj));
|
| + set_code_stubs(UnseededNumberDictionary::cast(obj));
|
|
|
|
|
| // Allocate the non_monomorphic_cache used in stub-cache.cc. The initial size
|
| // is set to avoid expanding the dictionary during bootstrapping.
|
| - { MaybeObject* maybe_obj = NumberDictionary::Allocate(64);
|
| + { MaybeObject* maybe_obj = UnseededNumberDictionary::Allocate(64);
|
| if (!maybe_obj->ToObject(&obj)) return false;
|
| }
|
| - set_non_monomorphic_cache(NumberDictionary::cast(obj));
|
| + set_non_monomorphic_cache(UnseededNumberDictionary::cast(obj));
|
|
|
| { MaybeObject* maybe_obj = AllocatePolymorphicCodeCache();
|
| if (!maybe_obj->ToObject(&obj)) return false;
|
| @@ -3794,7 +3829,7 @@
|
| }
|
| Map* new_map = Map::cast(obj);
|
|
|
| - // Setup the global object as a normalized object.
|
| + // Set up the global object as a normalized object.
|
| global->set_map(new_map);
|
| global->map()->clear_instance_descriptors();
|
| global->set_properties(dictionary);
|
| @@ -4727,7 +4762,7 @@
|
| #ifdef DEBUG
|
|
|
| void Heap::Print() {
|
| - if (!HasBeenSetup()) return;
|
| + if (!HasBeenSetUp()) return;
|
| isolate()->PrintStack();
|
| AllSpaces spaces;
|
| for (Space* space = spaces.next(); space != NULL; space = spaces.next())
|
| @@ -4792,7 +4827,7 @@
|
|
|
| bool Heap::Contains(Address addr) {
|
| if (OS::IsOutsideAllocatedSpace(addr)) return false;
|
| - return HasBeenSetup() &&
|
| + return HasBeenSetUp() &&
|
| (new_space_.ToSpaceContains(addr) ||
|
| old_pointer_space_->Contains(addr) ||
|
| old_data_space_->Contains(addr) ||
|
| @@ -4810,7 +4845,7 @@
|
|
|
| bool Heap::InSpace(Address addr, AllocationSpace space) {
|
| if (OS::IsOutsideAllocatedSpace(addr)) return false;
|
| - if (!HasBeenSetup()) return false;
|
| + if (!HasBeenSetUp()) return false;
|
|
|
| switch (space) {
|
| case NEW_SPACE:
|
| @@ -4835,7 +4870,7 @@
|
|
|
| #ifdef DEBUG
|
| void Heap::Verify() {
|
| - ASSERT(HasBeenSetup());
|
| + ASSERT(HasBeenSetUp());
|
|
|
| store_buffer()->Verify();
|
|
|
| @@ -5262,7 +5297,7 @@
|
| bool Heap::ConfigureHeap(int max_semispace_size,
|
| intptr_t max_old_gen_size,
|
| intptr_t max_executable_size) {
|
| - if (HasBeenSetup()) return false;
|
| + if (HasBeenSetUp()) return false;
|
|
|
| if (max_semispace_size > 0) {
|
| if (max_semispace_size < Page::kPageSize) {
|
| @@ -5551,7 +5586,7 @@
|
|
|
| #endif
|
|
|
| -bool Heap::Setup(bool create_heap_objects) {
|
| +bool Heap::SetUp(bool create_heap_objects) {
|
| #ifdef DEBUG
|
| allocation_timeout_ = FLAG_gc_interval;
|
| debug_utils_ = new HeapDebugUtils(this);
|
| @@ -5581,12 +5616,12 @@
|
|
|
| MarkMapPointersAsEncoded(false);
|
|
|
| - // Setup memory allocator.
|
| - if (!isolate_->memory_allocator()->Setup(MaxReserved(), MaxExecutableSize()))
|
| + // Set up memory allocator.
|
| + if (!isolate_->memory_allocator()->SetUp(MaxReserved(), MaxExecutableSize()))
|
| return false;
|
|
|
| - // Setup new space.
|
| - if (!new_space_.Setup(reserved_semispace_size_, max_semispace_size_)) {
|
| + // Set up new space.
|
| + if (!new_space_.SetUp(reserved_semispace_size_, max_semispace_size_)) {
|
| return false;
|
| }
|
|
|
| @@ -5597,7 +5632,7 @@
|
| OLD_POINTER_SPACE,
|
| NOT_EXECUTABLE);
|
| if (old_pointer_space_ == NULL) return false;
|
| - if (!old_pointer_space_->Setup()) return false;
|
| + if (!old_pointer_space_->SetUp()) return false;
|
|
|
| // Initialize old data space.
|
| old_data_space_ =
|
| @@ -5606,14 +5641,14 @@
|
| OLD_DATA_SPACE,
|
| NOT_EXECUTABLE);
|
| if (old_data_space_ == NULL) return false;
|
| - if (!old_data_space_->Setup()) return false;
|
| + if (!old_data_space_->SetUp()) return false;
|
|
|
| // Initialize the code space, set its maximum capacity to the old
|
| // generation size. It needs executable memory.
|
| // On 64-bit platform(s), we put all code objects in a 2 GB range of
|
| // virtual address space, so that they can call each other with near calls.
|
| if (code_range_size_ > 0) {
|
| - if (!isolate_->code_range()->Setup(code_range_size_)) {
|
| + if (!isolate_->code_range()->SetUp(code_range_size_)) {
|
| return false;
|
| }
|
| }
|
| @@ -5621,7 +5656,7 @@
|
| code_space_ =
|
| new OldSpace(this, max_old_generation_size_, CODE_SPACE, EXECUTABLE);
|
| if (code_space_ == NULL) return false;
|
| - if (!code_space_->Setup()) return false;
|
| + if (!code_space_->SetUp()) return false;
|
|
|
| // Initialize map space.
|
| map_space_ = new MapSpace(this,
|
| @@ -5629,28 +5664,28 @@
|
| FLAG_max_map_space_pages,
|
| MAP_SPACE);
|
| if (map_space_ == NULL) return false;
|
| - if (!map_space_->Setup()) return false;
|
| + if (!map_space_->SetUp()) return false;
|
|
|
| // Initialize global property cell space.
|
| cell_space_ = new CellSpace(this, max_old_generation_size_, CELL_SPACE);
|
| if (cell_space_ == NULL) return false;
|
| - if (!cell_space_->Setup()) return false;
|
| + if (!cell_space_->SetUp()) return false;
|
|
|
| // The large object code space may contain code or data. We set the memory
|
| // to be non-executable here for safety, but this means we need to enable it
|
| // explicitly when allocating large code objects.
|
| lo_space_ = new LargeObjectSpace(this, max_old_generation_size_, LO_SPACE);
|
| if (lo_space_ == NULL) return false;
|
| - if (!lo_space_->Setup()) return false;
|
| + if (!lo_space_->SetUp()) return false;
|
|
|
| - // Setup the seed that is used to randomize the string hash function.
|
| - ASSERT(string_hash_seed() == 0);
|
| - if (FLAG_randomize_string_hashes) {
|
| - if (FLAG_string_hash_seed == 0) {
|
| - set_string_hash_seed(
|
| + // Set up the seed that is used to randomize the string hash function.
|
| + ASSERT(hash_seed() == 0);
|
| + if (FLAG_randomize_hashes) {
|
| + if (FLAG_hash_seed == 0) {
|
| + set_hash_seed(
|
| Smi::FromInt(V8::RandomPrivate(isolate()) & 0x3fffffff));
|
| } else {
|
| - set_string_hash_seed(Smi::FromInt(FLAG_string_hash_seed));
|
| + set_hash_seed(Smi::FromInt(FLAG_hash_seed));
|
| }
|
| }
|
|
|
| @@ -5668,7 +5703,7 @@
|
| LOG(isolate_, IntPtrTEvent("heap-capacity", Capacity()));
|
| LOG(isolate_, IntPtrTEvent("heap-available", Available()));
|
|
|
| - store_buffer()->Setup();
|
| + store_buffer()->SetUp();
|
|
|
| return true;
|
| }
|
|
|