• Sara Tang's avatar
    Step 1 (of 3-ish): Basic ETW Instrumentation in V8 · 8b33c872
    Sara Tang authored
    Design doc:
    https://docs.google.com/document/d/1xkXj94iExFgLWc_OszTNyNGi523ARaKMWPZTeomhI4U
    A lot has changed since the last patchset! I recommend revisiting this
    design doc and reading the parts in green. I explain the roadmap for
    what changes to expect from ETW instrumentation as well as the
    instrumentation of this particular CL.
    
    I'll do my best to answer any further questions anyone has about my
    particular instrumentation or ETW in general :)
    
    ---
    
    This is the first of a series of changelists to round out ETW
    instrumentation for V8.
    
    This changelist represents the most minimal change needed to instrument
    ETW in V8. In particular, it:
      - defines and registers the ETW provider,
      - interacts minimally with the rest of V8, by hooking into the
        existing TracingController::AddTraceEvent function,
      - is designed with a platform-agnostic layer, so that event tracers
        for other platforms can be instrumented in teh future.
    
    Some notes on instrumentation (aka I copied stuff from the design doc):
    
    We make heavy use of the TraceLogging API to log events. It differs from
    previous methods of emitting ETW events in that it doesn<E2><80><99>t
    require the overhead of a separate manifest file to keep track of
    metadata; rather, events using this API are self-descriptive.
    
    Here are the five major steps to instrument the TraceLogging API:
      - Forward declare the provider (from provider-win.h)
      - Define the provider in a .cc file (from provider-win.cc)
      - Register the provider (called from v8.cc).
      - Write events (called from libplatform/tracing-controller.cc)
      - Unregister the provider (called from v8.cc)
    
    At the base, we have an abstract provider class that encapsulates the
    functionality of an event provider. These are things like registering
    and unregistering the provider, and the actual event-logging.
    
    The provider class is split into provider-win and provider-mac
    (currently not instantiated) classes, with OS-dependent implementations
    of the above functions.
    
    In particular, the TraceLogging API is used only in provider-win. It is
    here that we forward declare and define the provider, as well as write
    ETW events.
    
    Finally, there is a v8-provider class that serves as a top-level API and
    is exposed to the rest of V8. It acts as a wrapper for the
    platform-specific providers.
    
    The .wprp file is needed so that Windows Performance Recorder knows how
    to capture our events.
    
    Some considerations:
      - Is TracingController::AddTraceEvent the best place from which to
        write my events?
      - Is src/libplatform/tracing the best place to put my instrumentation?
      - Right now, I fail the preupload because of this, which tells me my
        files are probably not in the best location:
    
    You added one or more #includes that violate checkdeps rules.
    src\init\v8.cc Illegal include: "src/libplatform/tracing/v8-provider.h"
    Because of "-src/libplatform" from src's include_rules.
    
    Change-Id: Id53e4a034c9e526524a17000da0a647a95d93edf
    Bug: v8:11043
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/2233407Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
    Reviewed-by: 's avatarPeter Marshall <petermarshall@chromium.org>
    Commit-Queue: Sara Tang <sartang@microsoft.com>
    Cr-Commit-Position: refs/heads/master@{#71918}
    8b33c872
Name
Last commit
Last update
build_overrides Loading commit data...
custom_deps Loading commit data...
docs Loading commit data...
gni 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...
.clang-tidy Loading commit data...
.editorconfig Loading commit data...
.flake8 Loading commit data...
.git-blame-ignore-revs Loading commit data...
.gitattributes Loading commit data...
.gitignore Loading commit data...
.gn Loading commit data...
.vpython 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...
COMMON_OWNERS Loading commit data...
DEPS Loading commit data...
DIR_METADATA Loading commit data...
ENG_REVIEW_OWNERS Loading commit data...
INFRA_OWNERS Loading commit data...
INTL_OWNERS Loading commit data...
LICENSE Loading commit data...
LICENSE.fdlibm Loading commit data...
LICENSE.strongtalk Loading commit data...
LICENSE.v8 Loading commit data...
MIPS_OWNERS Loading commit data...
OWNERS Loading commit data...
PPC_OWNERS Loading commit data...
PRESUBMIT.py Loading commit data...
README.md Loading commit data...
S390_OWNERS Loading commit data...
WATCHLISTS Loading commit data...
codereview.settings Loading commit data...