commit | a9b098013d18fbf285c45edb3d29b0fa646633ac | [log] [tgz] |
---|---|---|
author | Benedikt Meurer <bmeurer@chromium.org> | Tue Oct 24 04:51:19 2017 |
committer | Commit Bot <commit-bot@chromium.org> | Tue Oct 24 08:42:32 2017 |
tree | 4b025fb8dc03f2d68fefe53aa1538a2985597502 | |
parent | 6171698fc81e267ad0c7a847d95049c44afe590f [diff] |
[ic] Improve KeyedStoreIC performance for dictionaries. Once the KeyedStoreIC was in MEGAMORPHIC state storing to dictionary mode objects, we'd constantly hit the slow-path implemented via the %SetProperty runtime function, if the dictionary was created with a null prototype, i.e. via Object.create(null). This goes against the advice of using Object.create(null) for dictionaries (compared to using empty object literal), which is unfortunate. This CL addresses two issues, starting with - adding support for null prototypes to LookupPropertyOnPrototypeChain, which was always hitting the slow path for null prototypes, and - using the dedicated %AddDictionaryProperty runtime call when we have to grow the backing store. These changes combined improve the micro-benchmark from storeToDictionary: 559 ms. storeToFast: 95 ms. to storeToDictionary: 201 ms. storeToFast: 94 ms. which reduces overhead by about 65%. This overall improves the chai test on the web-tooling-benchmark by about 4%, which still leaves some room for improvement. Bug: v8:6936, v8:6985 Change-Id: I97b78961f51edb3a3e198bdb31457fd78bed947f Reviewed-on: https://chromium-review.googlesource.com/735139 Reviewed-by: Igor Sheludko <ishell@chromium.org> Commit-Queue: Benedikt Meurer <bmeurer@chromium.org> Cr-Commit-Position: refs/heads/master@{#48858}
V8 is Google's open source JavaScript engine.
V8 implements ECMAScript as specified in ECMA-262.
V8 is written in C++ and is used in Google Chrome, the open source browser from Google.
V8 can run standalone, or can be embedded into any C++ application.
V8 Project page: https://github.com/v8/v8/wiki
Checkout depot tools, and run
fetch v8
This will checkout V8 into the directory v8
and fetch all of its dependencies. To stay up to date, run
git pull origin gclient sync
For fetching all branches, add the following into your remote configuration in .git/config
:
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/* fetch = +refs/tags/*:refs/tags/*
Please follow the instructions mentioned on the V8 wiki.