• bmeurer's avatar
    [js-perf-test] Add microbenchmarks for materialized rest parameters. · 07e163bd
    bmeurer authored
    Functions that take mandatory parameters plus a number of optional
    parameters, that need to be materialized as an Array are quite common.
    The simplest possible case of this is essentially:
    
      function foo(mandatory, ...args) { return args; }
    
    Babel translates this to something like:
    
      function foo(mandatory) {
        "use strict";
        for (var _len = arguments.length,
                 args = Array(_len > 1 ? _len - 1 : 0),
                 _key = 1; _key < _len; _key++) {
          args[_key - 1] = arguments[_key];
        }
        return args;
      }
    
    The key to great performance here is to make sure that we don't
    materialize the (unmapped) arguments object in this case, plus that we
    have some kind of fast-path for the Array constructor and the
    initialization loop.
    
    This microbenchmark ensures that we have decent performance even in the
    case where the assignment to args is polymorphic, i.e. the arguments
    have seen different elements kinds, starting with FAST_HOLEY_ELEMENTS
    and then FAST_HOLEY_SMI_ELEMENTS.
    
    R=yangguo@chromium.org
    BUG=v8:6262
    
    Review-Url: https://codereview.chromium.org/2823343004
    Cr-Commit-Position: refs/heads/master@{#44709}
    07e163bd
Name
Last commit
Last update
benchmarks Loading commit data...
build_overrides Loading commit data...
docs Loading commit data...
gni Loading commit data...
gypfiles Loading commit data...
include Loading commit data...
infra Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party Loading commit data...
tools Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.ycm_extra_conf.py Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
CODE_OF_CONDUCT.md Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
LICENSE.valgrind Loading commit data...
Makefile Loading commit data...
Makefile.android Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...
snapshot_toolchain.gni Loading commit data...