84c2dfce43
This CL removes the weak-list of JS functions from the context and all the code that iterares over it. This list was being used mainly during deoptimization (for code unlinking) and during garbage collection. Removing it will improve performance of programs that create many closures and trigger many scavenge GC cycles. No extra work is required during garbage collection. However, given that we no longer unlink code from JS functions during deoptimization, we leave it as it is, and on its next activation we check whether the mark_for_deoptimization bit of that code is set, and if it is, than we unlink it and jump to lazy compiled code. This check happens in the prologue of every code object. We needed to change/remove the cctests that used to check something on this list. Working in x64, ia32, arm64, arm, mips64 and mips. Bug: v8:6637 Change-Id: I7f192652c8034b16a9ea71303fa8e78cda3c48f3 Reviewed-on: https://chromium-review.googlesource.com/600427 Commit-Queue: Juliana Patricia Vicente Franco <jupvfranco@google.com> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org> Reviewed-by: Michael Starzinger <mstarzinger@chromium.org> Reviewed-by: Leszek Swirski <leszeks@chromium.org> Reviewed-by: Jaroslav Sevcik <jarin@chromium.org> Cr-Commit-Position: refs/heads/master@{#47790}
31 lines
874 B
JavaScript
31 lines
874 B
JavaScript
// Copyright 2017 the V8 project authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file
|
|
|
|
// Flags: --allow-natives-syntax --enable-inspector
|
|
|
|
Debug = debug.Debug
|
|
|
|
eval("var something1 = 25; "
|
|
+ " function ChooseAnimal() { return 'Cat'; } "
|
|
+ " ChooseAnimal.Helper = function() { return 'Help!'; }");
|
|
|
|
function foo() { return ChooseAnimal() }
|
|
|
|
assertEquals("Cat", foo());
|
|
%OptimizeFunctionOnNextCall(foo);
|
|
|
|
foo();
|
|
|
|
var script = Debug.findScript(ChooseAnimal);
|
|
|
|
var orig_animal = "Cat";
|
|
var patch_pos = script.source.indexOf(orig_animal);
|
|
var new_animal_patch = "Cap' + 'y' + 'bara";
|
|
|
|
var change_log = new Array();
|
|
|
|
Debug.LiveEdit.TestApi.ApplySingleChunkPatch(script, patch_pos, orig_animal.length, new_animal_patch, change_log);
|
|
|
|
assertEquals("Capybara", foo());
|