V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
basic-block-profiler.h
1 // Copyright 2014 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_BASIC_BLOCK_PROFILER_H_
6 #define V8_BASIC_BLOCK_PROFILER_H_
7 
8 #include <iosfwd>
9 #include <list>
10 #include <string>
11 #include <vector>
12 
13 #include "src/base/macros.h"
14 #include "src/base/platform/mutex.h"
15 #include "src/globals.h"
16 
17 namespace v8 {
18 namespace internal {
19 
21  public:
22  class Data {
23  public:
24  size_t n_blocks() const { return n_blocks_; }
25  const uint32_t* counts() const { return &counts_[0]; }
26 
27  void SetCode(std::ostringstream* os);
28  void SetFunctionName(std::unique_ptr<char[]> name);
29  void SetSchedule(std::ostringstream* os);
30  void SetBlockRpoNumber(size_t offset, int32_t block_rpo);
31  intptr_t GetCounterAddress(size_t offset);
32 
33  private:
34  friend class BasicBlockProfiler;
35  friend std::ostream& operator<<(std::ostream& os,
36  const BasicBlockProfiler::Data& s);
37 
38  explicit Data(size_t n_blocks);
39  ~Data() = default;
40 
41  void ResetCounts();
42 
43  const size_t n_blocks_;
44  std::vector<int32_t> block_rpo_numbers_;
45  std::vector<uint32_t> counts_;
46  std::string function_name_;
47  std::string schedule_;
48  std::string code_;
49  DISALLOW_COPY_AND_ASSIGN(Data);
50  };
51 
52  typedef std::list<Data*> DataList;
53 
54  BasicBlockProfiler() = default;
56 
57  V8_EXPORT_PRIVATE static BasicBlockProfiler* Get();
58  Data* NewData(size_t n_blocks);
59  void ResetCounts();
60 
61  const DataList* data_list() { return &data_list_; }
62 
63  private:
64  friend V8_EXPORT_PRIVATE std::ostream& operator<<(
65  std::ostream& os, const BasicBlockProfiler& s);
66 
67  DataList data_list_;
68  base::Mutex data_list_mutex_;
69 
70  DISALLOW_COPY_AND_ASSIGN(BasicBlockProfiler);
71 };
72 
73 V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
74  const BasicBlockProfiler& s);
75 std::ostream& operator<<(std::ostream& os, const BasicBlockProfiler::Data& s);
76 
77 } // namespace internal
78 } // namespace v8
79 
80 #endif // V8_BASIC_BLOCK_PROFILER_H_
Definition: libplatform.h:13