Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: src/debug/liveedit.cc

Issue 2687113002: [heap] no longer perform GC to make heap iterable. (Closed)
Patch Set: Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | src/heap/heap.h » ('j') | src/heap/heap.cc » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "src/debug/liveedit.h" 5 #include "src/debug/liveedit.h"
6 6
7 #include "src/ast/scopes.h" 7 #include "src/ast/scopes.h"
8 #include "src/code-stubs.h" 8 #include "src/code-stubs.h"
9 #include "src/compilation-cache.h" 9 #include "src/compilation-cache.h"
10 #include "src/compiler.h" 10 #include "src/compiler.h"
(...skipping 710 matching lines...) Expand 10 before | Expand all | Expand 10 after
721 721
722 // Finds all references to original and replaces them with substitution. 722 // Finds all references to original and replaces them with substitution.
723 static void ReplaceCodeObject(Handle<Code> original, 723 static void ReplaceCodeObject(Handle<Code> original,
724 Handle<Code> substitution) { 724 Handle<Code> substitution) {
725 // Perform a full GC in order to ensure that we are not in the middle of an 725 // Perform a full GC in order to ensure that we are not in the middle of an
726 // incremental marking phase when we are replacing the code object. 726 // incremental marking phase when we are replacing the code object.
727 // Since we are not in an incremental marking phase we can write pointers 727 // Since we are not in an incremental marking phase we can write pointers
728 // to code objects (that are never in new space) without worrying about 728 // to code objects (that are never in new space) without worrying about
729 // write barriers. 729 // write barriers.
730 Heap* heap = original->GetHeap(); 730 Heap* heap = original->GetHeap();
731 HeapIterator iterator(heap); 731 HeapIterator iterator(heap, HeapIterator::kFilterUnreachable);
732 // Now iterate over all pointers of all objects, including code_target 732 // Now iterate over all pointers of all objects, including code_target
733 // implicit pointers. 733 // implicit pointers.
734 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) { 734 for (HeapObject* obj = iterator.next(); obj != NULL; obj = iterator.next()) {
735 if (obj->IsJSFunction()) { 735 if (obj->IsJSFunction()) {
736 JSFunction* fun = JSFunction::cast(obj); 736 JSFunction* fun = JSFunction::cast(obj);
737 if (fun->code() == *original) fun->ReplaceCode(*substitution); 737 if (fun->code() == *original) fun->ReplaceCode(*substitution);
738 } else if (obj->IsSharedFunctionInfo()) { 738 } else if (obj->IsSharedFunctionInfo()) {
739 SharedFunctionInfo* info = SharedFunctionInfo::cast(obj); 739 SharedFunctionInfo* info = SharedFunctionInfo::cast(obj);
740 if (info->code() == *original) info->set_code(*substitution); 740 if (info->code() == *original) info->set_code(*substitution);
741 } 741 }
(...skipping 653 matching lines...) Expand 10 before | Expand all | Expand 10 after
1395 Handle<FixedArray> result, 1395 Handle<FixedArray> result,
1396 int len) { 1396 int len) {
1397 Isolate* isolate = shared_info_array->GetIsolate(); 1397 Isolate* isolate = shared_info_array->GetIsolate();
1398 bool found_suspended_activations = false; 1398 bool found_suspended_activations = false;
1399 1399
1400 DCHECK_LE(len, result->length()); 1400 DCHECK_LE(len, result->length());
1401 1401
1402 FunctionPatchabilityStatus active = FUNCTION_BLOCKED_ACTIVE_GENERATOR; 1402 FunctionPatchabilityStatus active = FUNCTION_BLOCKED_ACTIVE_GENERATOR;
1403 1403
1404 Heap* heap = isolate->heap(); 1404 Heap* heap = isolate->heap();
1405 HeapIterator iterator(heap); 1405 HeapIterator iterator(heap, HeapIterator::kFilterUnreachable);
1406 HeapObject* obj = NULL; 1406 HeapObject* obj = NULL;
1407 while ((obj = iterator.next()) != NULL) { 1407 while ((obj = iterator.next()) != NULL) {
1408 if (!obj->IsJSGeneratorObject()) continue; 1408 if (!obj->IsJSGeneratorObject()) continue;
1409 1409
1410 JSGeneratorObject* gen = JSGeneratorObject::cast(obj); 1410 JSGeneratorObject* gen = JSGeneratorObject::cast(obj);
1411 if (gen->is_closed()) continue; 1411 if (gen->is_closed()) continue;
1412 1412
1413 HandleScope scope(isolate); 1413 HandleScope scope(isolate);
1414 1414
1415 for (int i = 0; i < len; i++) { 1415 for (int i = 0; i < len; i++) {
(...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after
1646 scope_info_length++; 1646 scope_info_length++;
1647 1647
1648 current_scope = current_scope->outer_scope(); 1648 current_scope = current_scope->outer_scope();
1649 } 1649 }
1650 1650
1651 return scope_info_list; 1651 return scope_info_list;
1652 } 1652 }
1653 1653
1654 } // namespace internal 1654 } // namespace internal
1655 } // namespace v8 1655 } // namespace v8
OLDNEW
« no previous file with comments | « no previous file | src/heap/heap.h » ('j') | src/heap/heap.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698