OLD | NEW |
1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 2003 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2014 | 2014 |
2015 | 2015 |
2016 Object* Heap::Allocate(Map* map, AllocationSpace space) { | 2016 Object* Heap::Allocate(Map* map, AllocationSpace space) { |
2017 ASSERT(gc_state_ == NOT_IN_GC); | 2017 ASSERT(gc_state_ == NOT_IN_GC); |
2018 ASSERT(map->instance_type() != MAP_TYPE); | 2018 ASSERT(map->instance_type() != MAP_TYPE); |
2019 Object* result = AllocateRaw(map->instance_size(), | 2019 Object* result = AllocateRaw(map->instance_size(), |
2020 space, | 2020 space, |
2021 TargetSpaceId(map->instance_type())); | 2021 TargetSpaceId(map->instance_type())); |
2022 if (result->IsFailure()) return result; | 2022 if (result->IsFailure()) return result; |
2023 HeapObject::cast(result)->set_map(map); | 2023 HeapObject::cast(result)->set_map(map); |
| 2024 ProducerHeapProfile::RecordJSObjectAllocation(result); |
2024 return result; | 2025 return result; |
2025 } | 2026 } |
2026 | 2027 |
2027 | 2028 |
2028 Object* Heap::InitializeFunction(JSFunction* function, | 2029 Object* Heap::InitializeFunction(JSFunction* function, |
2029 SharedFunctionInfo* shared, | 2030 SharedFunctionInfo* shared, |
2030 Object* prototype) { | 2031 Object* prototype) { |
2031 ASSERT(!prototype->IsMap()); | 2032 ASSERT(!prototype->IsMap()); |
2032 function->initialize_properties(); | 2033 function->initialize_properties(); |
2033 function->initialize_elements(); | 2034 function->initialize_elements(); |
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2335 if (elem->IsFailure()) return elem; | 2336 if (elem->IsFailure()) return elem; |
2336 JSObject::cast(clone)->set_elements(FixedArray::cast(elem)); | 2337 JSObject::cast(clone)->set_elements(FixedArray::cast(elem)); |
2337 } | 2338 } |
2338 // Update properties if necessary. | 2339 // Update properties if necessary. |
2339 if (properties->length() > 0) { | 2340 if (properties->length() > 0) { |
2340 Object* prop = CopyFixedArray(properties); | 2341 Object* prop = CopyFixedArray(properties); |
2341 if (prop->IsFailure()) return prop; | 2342 if (prop->IsFailure()) return prop; |
2342 JSObject::cast(clone)->set_properties(FixedArray::cast(prop)); | 2343 JSObject::cast(clone)->set_properties(FixedArray::cast(prop)); |
2343 } | 2344 } |
2344 // Return the new clone. | 2345 // Return the new clone. |
| 2346 ProducerHeapProfile::RecordJSObjectAllocation(clone); |
2345 return clone; | 2347 return clone; |
2346 } | 2348 } |
2347 | 2349 |
2348 | 2350 |
2349 Object* Heap::ReinitializeJSGlobalProxy(JSFunction* constructor, | 2351 Object* Heap::ReinitializeJSGlobalProxy(JSFunction* constructor, |
2350 JSGlobalProxy* object) { | 2352 JSGlobalProxy* object) { |
2351 // Allocate initial map if absent. | 2353 // Allocate initial map if absent. |
2352 if (!constructor->has_initial_map()) { | 2354 if (!constructor->has_initial_map()) { |
2353 Object* initial_map = AllocateInitialMap(constructor); | 2355 Object* initial_map = AllocateInitialMap(constructor); |
2354 if (initial_map->IsFailure()) return initial_map; | 2356 if (initial_map->IsFailure()) return initial_map; |
(...skipping 946 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3301 if (!CreateInitialMaps()) return false; | 3303 if (!CreateInitialMaps()) return false; |
3302 if (!CreateApiObjects()) return false; | 3304 if (!CreateApiObjects()) return false; |
3303 | 3305 |
3304 // Create initial objects | 3306 // Create initial objects |
3305 if (!CreateInitialObjects()) return false; | 3307 if (!CreateInitialObjects()) return false; |
3306 } | 3308 } |
3307 | 3309 |
3308 LOG(IntEvent("heap-capacity", Capacity())); | 3310 LOG(IntEvent("heap-capacity", Capacity())); |
3309 LOG(IntEvent("heap-available", Available())); | 3311 LOG(IntEvent("heap-available", Available())); |
3310 | 3312 |
| 3313 // This should be called only after initial objects have been created. |
| 3314 ProducerHeapProfile::Setup(); |
| 3315 |
3311 return true; | 3316 return true; |
3312 } | 3317 } |
3313 | 3318 |
3314 | 3319 |
3315 void Heap::SetStackLimit(intptr_t limit) { | 3320 void Heap::SetStackLimit(intptr_t limit) { |
3316 // On 64 bit machines, pointers are generally out of range of Smis. We write | 3321 // On 64 bit machines, pointers are generally out of range of Smis. We write |
3317 // something that looks like an out of range Smi to the GC. | 3322 // something that looks like an out of range Smi to the GC. |
3318 | 3323 |
3319 // Set up the special root array entry containing the stack guard. | 3324 // Set up the special root array entry containing the stack guard. |
3320 // This is actually an address, but the tag makes the GC ignore it. | 3325 // This is actually an address, but the tag makes the GC ignore it. |
(...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3887 for (int i = 0; i < kNumberOfCaches; i++) { | 3892 for (int i = 0; i < kNumberOfCaches; i++) { |
3888 if (caches_[i] != NULL) { | 3893 if (caches_[i] != NULL) { |
3889 delete caches_[i]; | 3894 delete caches_[i]; |
3890 caches_[i] = NULL; | 3895 caches_[i] = NULL; |
3891 } | 3896 } |
3892 } | 3897 } |
3893 } | 3898 } |
3894 | 3899 |
3895 | 3900 |
3896 } } // namespace v8::internal | 3901 } } // namespace v8::internal |
OLD | NEW |