v8
V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++.
Loading...
Searching...
No Matches
metrics.h
Go to the documentation of this file.
1// Copyright 2020 the V8 project authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef V8_LOGGING_METRICS_H_
6#define V8_LOGGING_METRICS_H_
7
8#include <memory>
9#include <queue>
10
11#include "include/v8-metrics.h"
14#include "src/init/v8.h"
15
16namespace v8 {
17
18class TaskRunner;
19
20namespace internal {
21namespace metrics {
22
23class Recorder : public std::enable_shared_from_this<Recorder> {
24 public:
26 Isolate* isolate,
27 const std::shared_ptr<v8::metrics::Recorder>& embedder_recorder);
28
30
32
33 template <class T>
34 void AddMainThreadEvent(const T& event,
37 embedder_recorder_->AddMainThreadEvent(event, id);
38 }
39
40 template <class T>
41 void DelayMainThreadEvent(const T& event,
43 if (!embedder_recorder_) return;
44 Delay(std::make_unique<DelayedEvent<T>>(event, id));
45 }
46
47 template <class T>
48 void AddThreadSafeEvent(const T& event) {
49 if (embedder_recorder_) embedder_recorder_->AddThreadSafeEvent(event);
50 }
51
52 private:
54 public:
55 virtual ~DelayedEventBase() = default;
56
57 virtual void Run(const std::shared_ptr<Recorder>& recorder) = 0;
58 };
59
60 template <class T>
62 public:
64 : event_(event), id_(id) {}
65
66 void Run(const std::shared_ptr<Recorder>& recorder) override {
67 recorder->AddMainThreadEvent(event_, id_);
68 }
69
70 protected:
73 };
74
75 class Task;
76
78 std::unique_ptr<Recorder::DelayedEventBase>&& event);
79
81 std::shared_ptr<v8::TaskRunner> foreground_task_runner_;
82 std::shared_ptr<v8::metrics::Recorder> embedder_recorder_;
83 std::queue<std::unique_ptr<DelayedEventBase>> delayed_events_;
84};
85
86template <class T, int64_t (base::TimeDelta::*precision)() const =
89 public:
90 explicit TimedScope(T* event) : event_(event) { Start(); }
91 ~TimedScope() { Stop(); }
92
94
95 void Stop() {
96 if (start_time_.IsMin()) return;
98 event_->wall_clock_duration_in_us = (duration.*precision)();
100 }
101
102 private:
105};
106
107} // namespace metrics
108} // namespace internal
109} // namespace v8
110
111#endif // V8_LOGGING_METRICS_H_
#define T
int64_t InMicroseconds() const
Definition time.cc:251
static TimeTicks Now()
Definition time.cc:736
virtual void Run(const std::shared_ptr< Recorder > &recorder)=0
v8::metrics::Recorder::ContextId id_
Definition metrics.h:72
void Run(const std::shared_ptr< Recorder > &recorder) override
Definition metrics.h:66
DelayedEvent(const T &event, v8::metrics::Recorder::ContextId id)
Definition metrics.h:63
void AddThreadSafeEvent(const T &event)
Definition metrics.h:48
V8_EXPORT_PRIVATE void Delay(std::unique_ptr< Recorder::DelayedEventBase > &&event)
Definition metrics.cc:51
V8_EXPORT_PRIVATE void SetEmbedderRecorder(Isolate *isolate, const std::shared_ptr< v8::metrics::Recorder > &embedder_recorder)
Definition metrics.cc:34
V8_EXPORT_PRIVATE bool HasEmbedderRecorder() const
Definition metrics.cc:43
std::queue< std::unique_ptr< DelayedEventBase > > delayed_events_
Definition metrics.h:83
std::shared_ptr< v8::TaskRunner > foreground_task_runner_
Definition metrics.h:81
std::shared_ptr< v8::metrics::Recorder > embedder_recorder_
Definition metrics.h:82
V8_EXPORT_PRIVATE void NotifyIsolateDisposal()
Definition metrics.cc:45
void DelayMainThreadEvent(const T &event, v8::metrics::Recorder::ContextId id)
Definition metrics.h:41
void AddMainThreadEvent(const T &event, v8::metrics::Recorder::ContextId id)
Definition metrics.h:34
Precision precision
base::TimeTicks start_time_
v8::TaskRunner TaskRunner
Definition platform.h:25
#define V8_EXPORT_PRIVATE
Definition macros.h:460
#define V8_NODISCARD
Definition v8config.h:693