35 class ZPage;
36 class ZStatSampler;
37 class ZStatSamplerHistory;
38 struct ZStatCounterData;
39 struct ZStatSamplerData;
40
41 //
42 // Stat unit printers
43 //
44 typedef void (*ZStatUnitPrinter)(LogTargetHandle log, const ZStatSampler&, const ZStatSamplerHistory&);
45
46 void ZStatUnitTime(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
47 void ZStatUnitBytes(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
48 void ZStatUnitThreads(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
49 void ZStatUnitBytesPerSecond(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
50 void ZStatUnitOpsPerSecond(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
51
52 //
53 // Stat value
54 //
55 class ZStatValue VALUE_OBJ_CLASS_SPEC {
56 private:
57 static uintptr_t _base;
58 static uint32_t _cpu_offset;
59
60 const char* const _group;
61 const char* const _name;
62 const uint32_t _id;
63 const uint32_t _offset;
64
65 protected:
66 ZStatValue(const char* group,
67 const char* name,
68 uint32_t id,
69 uint32_t size);
70
71 template <typename T> T* get_cpu_local(uint32_t cpu) const;
72
73 public:
74 static void initialize();
75
141 ZStatUnitPrinter printer);
142
143 ZStatCounterData* get() const;
144 void sample_and_reset() const;
145 };
146
147 //
148 // Stat unsampled counter
149 //
150 class ZStatUnsampledCounter : public ZStatIterableValue<ZStatUnsampledCounter> {
151 public:
152 ZStatUnsampledCounter(const char* name);
153
154 ZStatCounterData* get() const;
155 ZStatCounterData collect_and_reset() const;
156 };
157
158 //
159 // Stat MMU (Mimimum Mutator Utilization)
160 //
161 class ZStatMMUPause VALUE_OBJ_CLASS_SPEC {
162 private:
163 double _start;
164 double _end;
165
166 public:
167 ZStatMMUPause();
168 ZStatMMUPause(const Ticks& start, const Ticks& end);
169
170 double end() const;
171 double overlap(double start, double end) const;
172 };
173
174 class ZStatMMU VALUE_OBJ_CLASS_SPEC {
175 private:
176 static size_t _next;
177 static size_t _npauses;
178 static ZStatMMUPause _pauses[200]; // Record the last 200 pauses
179
180 static double _mmu_2ms;
181 static double _mmu_5ms;
182 static double _mmu_10ms;
183 static double _mmu_20ms;
184 static double _mmu_50ms;
185 static double _mmu_100ms;
186
187 static const ZStatMMUPause& pause(size_t index);
188 static double calculate_mmu(double time_slice);
189
190 public:
191 static void register_pause(const Ticks& start, const Ticks& end);
192
193 static void print();
194 };
195
196 //
197 // Stat phases
198 //
199 class ZStatPhase VALUE_OBJ_CLASS_SPEC {
200 private:
201 static ConcurrentGCTimer _timer;
202
203 protected:
204 const ZStatSampler _sampler;
205
206 ZStatPhase(const char* group, const char* name);
207
208 void log_start(LogTargetHandle log, bool thread = false) const;
209 void log_end(LogTargetHandle log, const Tickspan& duration, bool thread = false) const;
210
211 public:
212 static ConcurrentGCTimer* timer();
213
214 const char* name() const;
215
216 virtual void register_start(const Ticks& start) const = 0;
217 virtual void register_end(const Ticks& start, const Ticks& end) const = 0;
218 };
219
|
35 class ZPage;
36 class ZStatSampler;
37 class ZStatSamplerHistory;
38 struct ZStatCounterData;
39 struct ZStatSamplerData;
40
41 //
42 // Stat unit printers
43 //
44 typedef void (*ZStatUnitPrinter)(LogTargetHandle log, const ZStatSampler&, const ZStatSamplerHistory&);
45
46 void ZStatUnitTime(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
47 void ZStatUnitBytes(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
48 void ZStatUnitThreads(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
49 void ZStatUnitBytesPerSecond(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
50 void ZStatUnitOpsPerSecond(LogTargetHandle log, const ZStatSampler& sampler, const ZStatSamplerHistory& history);
51
52 //
53 // Stat value
54 //
55 class ZStatValue {
56 private:
57 static uintptr_t _base;
58 static uint32_t _cpu_offset;
59
60 const char* const _group;
61 const char* const _name;
62 const uint32_t _id;
63 const uint32_t _offset;
64
65 protected:
66 ZStatValue(const char* group,
67 const char* name,
68 uint32_t id,
69 uint32_t size);
70
71 template <typename T> T* get_cpu_local(uint32_t cpu) const;
72
73 public:
74 static void initialize();
75
141 ZStatUnitPrinter printer);
142
143 ZStatCounterData* get() const;
144 void sample_and_reset() const;
145 };
146
147 //
148 // Stat unsampled counter
149 //
150 class ZStatUnsampledCounter : public ZStatIterableValue<ZStatUnsampledCounter> {
151 public:
152 ZStatUnsampledCounter(const char* name);
153
154 ZStatCounterData* get() const;
155 ZStatCounterData collect_and_reset() const;
156 };
157
158 //
159 // Stat MMU (Mimimum Mutator Utilization)
160 //
161 class ZStatMMUPause {
162 private:
163 double _start;
164 double _end;
165
166 public:
167 ZStatMMUPause();
168 ZStatMMUPause(const Ticks& start, const Ticks& end);
169
170 double end() const;
171 double overlap(double start, double end) const;
172 };
173
174 class ZStatMMU {
175 private:
176 static size_t _next;
177 static size_t _npauses;
178 static ZStatMMUPause _pauses[200]; // Record the last 200 pauses
179
180 static double _mmu_2ms;
181 static double _mmu_5ms;
182 static double _mmu_10ms;
183 static double _mmu_20ms;
184 static double _mmu_50ms;
185 static double _mmu_100ms;
186
187 static const ZStatMMUPause& pause(size_t index);
188 static double calculate_mmu(double time_slice);
189
190 public:
191 static void register_pause(const Ticks& start, const Ticks& end);
192
193 static void print();
194 };
195
196 //
197 // Stat phases
198 //
199 class ZStatPhase {
200 private:
201 static ConcurrentGCTimer _timer;
202
203 protected:
204 const ZStatSampler _sampler;
205
206 ZStatPhase(const char* group, const char* name);
207
208 void log_start(LogTargetHandle log, bool thread = false) const;
209 void log_end(LogTargetHandle log, const Tickspan& duration, bool thread = false) const;
210
211 public:
212 static ConcurrentGCTimer* timer();
213
214 const char* name() const;
215
216 virtual void register_start(const Ticks& start) const = 0;
217 virtual void register_end(const Ticks& start, const Ticks& end) const = 0;
218 };
219
|