Chromium Code Reviews| Index: src/isolate.cc |
| =================================================================== |
| --- src/isolate.cc (revision 11803) |
| +++ src/isolate.cc (working copy) |
| @@ -1547,6 +1547,11 @@ |
| thread_data_table_->RemoveAllThreads(this); |
| } |
| + if (serialize_partial_snapshot_cache_ != NULL) { |
| + delete[] serialize_partial_snapshot_cache_; |
| + serialize_partial_snapshot_cache_ = NULL; |
| + } |
| + |
| if (!IsDefaultIsolate()) { |
| delete this; |
| } |
| @@ -1595,6 +1600,26 @@ |
| } |
| +void Isolate::PushToPartialSnapshotCache(Object* obj) { |
| + int length = serialize_partial_snapshot_cache_length(); |
| + int capacity = serialize_partial_snapshot_cache_capacity(); |
| + |
| + if (length >= capacity) { |
| + int new_capacity = (capacity + 10) * 1.2; |
| + Object** new_array = new Object*[new_capacity]; |
| + for (int i = 0; i < capacity; i++) { |
|
ulan
2012/06/19 09:42:15
i < length ?
Erik Corry
2012/06/19 10:20:46
Done.
|
| + new_array[i] = serialize_partial_snapshot_cache()[i]; |
| + } |
| + if (capacity != 0) delete[] serialize_partial_snapshot_cache(); |
| + set_serialize_partial_snapshot_cache(new_array); |
| + set_serialize_partial_snapshot_cache_capacity(new_capacity); |
| + } |
| + |
| + serialize_partial_snapshot_cache()[length] = obj; |
| + set_serialize_partial_snapshot_cache_length(length + 1); |
| +} |
| + |
| + |
| void Isolate::SetIsolateThreadLocals(Isolate* isolate, |
| PerIsolateThreadData* data) { |
| Thread::SetThreadLocal(isolate_key_, isolate); |
| @@ -1812,6 +1837,11 @@ |
| return false; |
| } |
| + if (create_heap_objects) { |
| + // Terminate the cache array with the sentinel so we can iterate. |
| + PushToPartialSnapshotCache(heap_.undefined_value()); |
| + } |
| + |
| InitializeThreadLocal(); |
| bootstrapper_->Initialize(create_heap_objects); |
| @@ -1838,7 +1868,7 @@ |
| #endif |
| // If we are deserializing, read the state into the now-empty heap. |
| - if (des != NULL) { |
| + if (!create_heap_objects) { |
| des->Deserialize(); |
| } |
| stub_cache_->Initialize(); |
| @@ -1853,7 +1883,7 @@ |
| heap_.SetStackLimits(); |
| // Quiet the heap NaN if needed on target platform. |
| - if (des != NULL) Assembler::QuietNaN(heap_.nan_value()); |
| + if (create_heap_objects) Assembler::QuietNaN(heap_.nan_value()); |
| deoptimizer_data_ = new DeoptimizerData; |
| runtime_profiler_ = new RuntimeProfiler(this); |
| @@ -1861,7 +1891,7 @@ |
| // If we are deserializing, log non-function code objects and compiled |
| // functions found in the snapshot. |
| - if (des != NULL && (FLAG_log_code || FLAG_ll_prof)) { |
| + if (create_heap_objects && (FLAG_log_code || FLAG_ll_prof)) { |
| HandleScope scope; |
| LOG(this, LogCodeObjects()); |
| LOG(this, LogCompiledFunctions()); |