Line data Source code
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_COMPILER_PIPELINE_STATISTICS_H_
6 : #define V8_COMPILER_PIPELINE_STATISTICS_H_
7 :
8 : #include <memory>
9 : #include <string>
10 :
11 : #include "src/base/platform/elapsed-timer.h"
12 : #include "src/compilation-statistics.h"
13 : #include "src/compiler/zone-stats.h"
14 :
15 : namespace v8 {
16 : namespace internal {
17 : namespace compiler {
18 :
19 : class PhaseScope;
20 :
21 : class PipelineStatistics : public Malloced {
22 : public:
23 : PipelineStatistics(CompilationInfo* info, ZoneStats* zone_stats);
24 : ~PipelineStatistics();
25 :
26 : void BeginPhaseKind(const char* phase_kind_name);
27 : void EndPhaseKind();
28 :
29 : private:
30 : size_t OuterZoneSize() {
31 0 : return static_cast<size_t>(outer_zone_->allocation_size());
32 : }
33 :
34 : class CommonStats {
35 : public:
36 0 : CommonStats() : outer_zone_initial_size_(0) {}
37 :
38 : void Begin(PipelineStatistics* pipeline_stats);
39 : void End(PipelineStatistics* pipeline_stats,
40 : CompilationStatistics::BasicStats* diff);
41 :
42 : std::unique_ptr<ZoneStats::StatsScope> scope_;
43 : base::ElapsedTimer timer_;
44 : size_t outer_zone_initial_size_;
45 : size_t allocated_bytes_at_start_;
46 :
47 : private:
48 : DISALLOW_COPY_AND_ASSIGN(CommonStats);
49 : };
50 :
51 : bool InPhaseKind() { return !!phase_kind_stats_.scope_; }
52 :
53 : friend class PhaseScope;
54 : bool InPhase() { return !!phase_stats_.scope_; }
55 : void BeginPhase(const char* name);
56 : void EndPhase();
57 :
58 : Isolate* isolate_;
59 : Zone* outer_zone_;
60 : ZoneStats* zone_stats_;
61 : CompilationStatistics* compilation_stats_;
62 : std::string function_name_;
63 :
64 : // Stats for the entire compilation.
65 : CommonStats total_stats_;
66 : size_t source_size_;
67 :
68 : // Stats for phase kind.
69 : const char* phase_kind_name_;
70 : CommonStats phase_kind_stats_;
71 :
72 : // Stats for phase.
73 : const char* phase_name_;
74 : CommonStats phase_stats_;
75 :
76 : DISALLOW_COPY_AND_ASSIGN(PipelineStatistics);
77 : };
78 :
79 :
80 : class PhaseScope {
81 : public:
82 : PhaseScope(PipelineStatistics* pipeline_stats, const char* name)
83 25206951 : : pipeline_stats_(pipeline_stats) {
84 25630172 : if (pipeline_stats_ != nullptr) pipeline_stats_->BeginPhase(name);
85 : }
86 : ~PhaseScope() {
87 25631653 : if (pipeline_stats_ != nullptr) pipeline_stats_->EndPhase();
88 : }
89 :
90 : private:
91 : PipelineStatistics* const pipeline_stats_;
92 :
93 : DISALLOW_COPY_AND_ASSIGN(PhaseScope);
94 : };
95 :
96 : } // namespace compiler
97 : } // namespace internal
98 : } // namespace v8
99 :
100 : #endif
|