summaryrefslogtreecommitdiff
path: root/deps/v8/src/profiler/profiler-stats.h
blob: 7f19b047f04d58fcd9fd7cd3c029d8e09be822b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef V8_PROFILER_PROFILER_STATS_H_
#define V8_PROFILER_PROFILER_STATS_H_

#include <atomic>

namespace v8 {
namespace internal {

// Stats are used to diagnose the reasons for dropped or unnattributed frames.
class ProfilerStats {
 public:
  enum Reason {
    // Reasons we fail to record a TickSample.
    kTickBufferFull,
    kIsolateNotLocked,
    // These all generate a TickSample.
    kSimulatorFillRegistersFailed,
    kNoFrameRegion,
    kInCallOrApply,
    kNoSymbolizedFrames,
    kNullPC,

    kNumberOfReasons,
  };

  static ProfilerStats* Instance() {
    static ProfilerStats stats;
    return &stats;
  }

  void AddReason(Reason reason);
  void Clear();
  void Print() const;

 private:
  ProfilerStats() = default;
  static const char* ReasonToString(Reason reason);

  std::atomic_int counts_[Reason::kNumberOfReasons] = {};
};

}  // namespace internal
}  // namespace v8

#endif  // V8_PROFILER_PROFILER_STATS_H_