| 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 < length; i++) {
|
| + 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());
|
|
|