summaryrefslogtreecommitdiffstats
path: root/chromium/v8/src/diagnostics/basic-block-profiler.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/v8/src/diagnostics/basic-block-profiler.h')
-rw-r--r--chromium/v8/src/diagnostics/basic-block-profiler.h85
1 files changed, 45 insertions, 40 deletions
diff --git a/chromium/v8/src/diagnostics/basic-block-profiler.h b/chromium/v8/src/diagnostics/basic-block-profiler.h
index 9639e0b6615..0eb82e8a1bc 100644
--- a/chromium/v8/src/diagnostics/basic-block-profiler.h
+++ b/chromium/v8/src/diagnostics/basic-block-profiler.h
@@ -14,66 +14,71 @@
#include "src/base/macros.h"
#include "src/base/platform/mutex.h"
#include "src/common/globals.h"
+#include "torque-generated/exported-class-definitions-tq.h"
namespace v8 {
namespace internal {
+class BasicBlockProfilerData {
+ public:
+ explicit BasicBlockProfilerData(size_t n_blocks);
+ V8_EXPORT_PRIVATE BasicBlockProfilerData(
+ Handle<OnHeapBasicBlockProfilerData> js_heap_data, Isolate* isolate);
+
+ size_t n_blocks() const {
+ DCHECK_EQ(block_rpo_numbers_.size(), counts_.size());
+ return block_rpo_numbers_.size();
+ }
+ const uint32_t* counts() const { return &counts_[0]; }
+
+ void SetCode(const std::ostringstream& os);
+ void SetFunctionName(std::unique_ptr<char[]> name);
+ void SetSchedule(const std::ostringstream& os);
+ void SetBlockRpoNumber(size_t offset, int32_t block_rpo);
+
+ // Copy the data from this object into an equivalent object stored on the JS
+ // heap, so that it can survive snapshotting and relocation. This must
+ // happen on the main thread during finalization of the compilation.
+ Handle<OnHeapBasicBlockProfilerData> CopyToJSHeap(Isolate* isolate);
+
+ private:
+ friend class BasicBlockProfiler;
+ friend std::ostream& operator<<(std::ostream& os,
+ const BasicBlockProfilerData& s);
+
+ V8_EXPORT_PRIVATE void ResetCounts();
+
+ std::vector<int32_t> block_rpo_numbers_;
+ std::vector<uint32_t> counts_;
+ std::string function_name_;
+ std::string schedule_;
+ std::string code_;
+ DISALLOW_COPY_AND_ASSIGN(BasicBlockProfilerData);
+};
+
class BasicBlockProfiler {
public:
- class Data {
- public:
- size_t n_blocks() const { return n_blocks_; }
- const uint32_t* counts() const { return &counts_[0]; }
-
- void SetCode(std::ostringstream* os);
- void SetFunctionName(std::unique_ptr<char[]> name);
- void SetSchedule(std::ostringstream* os);
- void SetBlockRpoNumber(size_t offset, int32_t block_rpo);
- intptr_t GetCounterAddress(size_t offset);
-
- private:
- friend class BasicBlockProfiler;
- friend std::ostream& operator<<(std::ostream& os,
- const BasicBlockProfiler::Data& s);
-
- explicit Data(size_t n_blocks);
- ~Data() = default;
-
- V8_EXPORT_PRIVATE void ResetCounts();
-
- const size_t n_blocks_;
- std::vector<int32_t> block_rpo_numbers_;
- std::vector<uint32_t> counts_;
- std::string function_name_;
- std::string schedule_;
- std::string code_;
- DISALLOW_COPY_AND_ASSIGN(Data);
- };
-
- using DataList = std::list<Data*>;
+ using DataList = std::list<std::unique_ptr<BasicBlockProfilerData>>;
BasicBlockProfiler() = default;
- ~BasicBlockProfiler();
+ ~BasicBlockProfiler() = default;
V8_EXPORT_PRIVATE static BasicBlockProfiler* Get();
- Data* NewData(size_t n_blocks);
- V8_EXPORT_PRIVATE void ResetCounts();
+ BasicBlockProfilerData* NewData(size_t n_blocks);
+ V8_EXPORT_PRIVATE void ResetCounts(Isolate* isolate);
+ V8_EXPORT_PRIVATE bool HasData(Isolate* isolate);
+ V8_EXPORT_PRIVATE void Print(std::ostream& os, Isolate* isolate);
const DataList* data_list() { return &data_list_; }
private:
- friend V8_EXPORT_PRIVATE std::ostream& operator<<(
- std::ostream& os, const BasicBlockProfiler& s);
-
DataList data_list_;
base::Mutex data_list_mutex_;
DISALLOW_COPY_AND_ASSIGN(BasicBlockProfiler);
};
-V8_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os,
- const BasicBlockProfiler& s);
-std::ostream& operator<<(std::ostream& os, const BasicBlockProfiler::Data& s);
+std::ostream& operator<<(std::ostream& os, const BasicBlockProfilerData& s);
} // namespace internal
} // namespace v8