• Camillo Bruni's avatar
    Reland "[counters] Fix reentrant timers for V8.Execute" · f688fe08
    Camillo Bruni authored
    This is a reland of fffcbaea
    
    Additional fixes:
    - Relax IsStarted DCHECKs in ElapsedTimer for paused_elapsed
    - Add LogEventStatus enum in the API for better testing
    - Rename Logger::StartEnd enum values to kXXX
    - Add additional NestedTimedHistogramScope tests
    
    Original change's description:
    > [counters] Fix reentrant timers for V8.Execute
    >
    > This CL fixes a long standing issue where reentering TimedHistograms
    > scopes would cause spurious measurements. Only the non-nested scopes
    > yielded correct results.
    >
    > Due to the changed numbers, the V8.Execute histogram is renamed to
    > V8.ExecuteMicroSeconds. Note that this histogram is also guarded
    > behind the --slow-histograms flag due to the additional overhead.
    >
    > Unlike before, it does no longer include time for external callbacks
    > and only measures self time. The following example illustrates the
    > new behaviour:
    >
    > 1. Enter V8:           |--+.......+--| self-time: 4 units (reported)
    > 2. Exit V8 (callback):    |-+...+-|    self-time: 2 units (ignored)
    > 3. Re-enter V8:             |---|      self-time: 3 units (reported)
    >
    > This would result in 2 histogram entries with 4 time units for the first
    > V8 slice and 3 units for the nested part. Note that the callback time
    > itself is ignored.
    >
    > This CL attempts to clean up how TimedHistograms work:
    > - Histogram: the base class
    > - TimedHistograms: used for time-related histograms that are not nested
    > - NestedTimeHistograms: Extends TimedHistograms and is used for nested
    >   histograms
    >
    > This CL changes Histograms to not measure time themselves. Measurements
    > happen in the *HistogramScopes:
    > - BaseTimedHistogramScope: Base functionality
    > - TimedHistogramScope: For non-nested measurements
    > - NestedTimedHistogramScope: For nested measurements
    > - PauseNestedTimedHistogramScope: Ignore time during a given scope.
    >   This is used to pause timers during callbacks.
    >
    > Additional changes:
    > - ExternalCallbackScope now contains a PauseNestedTimedHistogramScope
    >   and always sets VMState<EXTERNAL>
    >
    > Bug: v8:11946
    > Change-Id: I45e4b7ff77b5948b605dd50539044cb26222fa21
    > Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3001345
    > Reviewed-by: Omer Katz <omerkatz@chromium.org>
    > Reviewed-by: Thibaud Michaud <thibaudm@chromium.org>
    > Reviewed-by: Victor Gomes <victorgomes@chromium.org>
    > Reviewed-by: Leszek Swirski <leszeks@chromium.org>
    > Commit-Queue: Camillo Bruni <cbruni@chromium.org>
    > Cr-Commit-Position: refs/heads/master@{#76111}
    
    Bug: v8:11946
    Change-Id: Ic2eef7456fbc245febcf780b23418f6ab0bebdb7
    Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3080566
    Commit-Queue: Camillo Bruni <cbruni@chromium.org>
    Reviewed-by: 's avatarLeszek Swirski <leszeks@chromium.org>
    Reviewed-by: 's avatarVictor Gomes <victorgomes@chromium.org>
    Reviewed-by: 's avatarThibaud Michaud <thibaudm@chromium.org>
    Reviewed-by: 's avatarOmer Katz <omerkatz@chromium.org>
    Cr-Commit-Position: refs/heads/master@{#76180}
    f688fe08
counters-definitions.h 26.2 KB