• yurys@chromium.org's avatar
    Extend CPU profiler with mapping ticks to source lines · 6482fb3e
    yurys@chromium.org authored
    The idea behind of this solution is to use the existing "relocation info" instead of consumption the CodeLinePosition events emitted by the V8 compilers.
    During generation code and relocation info are generated simultaneously.
    When code generation is done you each code object has associated "relocation info".
    Relocation information lets V8 to mark interesting places in the generated code: the pointers that might need to be relocated (after garbage collection),
    correspondences between the machine program counter and source locations for stack walking.
    
    This patch:
    1. Add more source positions info in reloc info to make it suitable for source level mapping.
    The amount of data should not be increased dramatically because (1) V8 already marks interesting places in the generated code and
    (2) V8 does not write redundant information (it writes a pair (pc_offset, pos) only if pos is changed and skips other).
    I measured it on Octane benchmark - for unoptimized code the number of source positions may achieve 2x ('lin_solve' from NavierStokes benchmark).
    
    2. When a sample happens, CPU profiler finds a code object by pc, then use its reloc info to match the sample to a source line.
    If a source line is found that hit counter is increased by one for this line.
    
    3. Add a new public V8 API to get the hit source lines by CDT CPU profiler.
    Note that it's expected a minor patch in Blink to pack the source level info in JSON to be shown.
    
    4.Add a test that checks how the samples are distributed through source lines.
    It tests two cases: (1) relocation info created during code generation and (2) relocation info associated with precompiled function's version.
    
    Patch from Denis Pravdin <denis.pravdin@intel.com>
    BUG=None
    LOG=Y
    R=svenpanne@chromium.org
    
    Review URL: https://codereview.chromium.org/616963005
    
    Patch from Denis Pravdin <denis.pravdin@intel.com>.
    
    git-svn-id: https://v8.googlecode.com/svn/branches/bleeding_edge@24389 ce2b1a6d-e550-0410-aec6-3dcde31c8c00
    6482fb3e
Name
Last commit
Last update
benchmarks Loading commit data...
build Loading commit data...
include Loading commit data...
samples Loading commit data...
src Loading commit data...
test Loading commit data...
testing Loading commit data...
third_party/fdlibm Loading commit data...
tools Loading commit data...
.DEPS.git Loading commit data...
.clang-format Loading commit data...
.gitignore Loading commit data...
AUTHORS Loading commit data...
BUILD.gn Loading commit data...
ChangeLog Loading commit data...
DEPS Loading commit data...
LICENSE 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...
Makefile.nacl Loading commit data...
OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...