Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/timer.cpp @ 10405:f2110083203d
8005849: JEP 167: Event-Based JVM Tracing
Reviewed-by: acorn, coleenp, sla
Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>
author | sla |
---|---|
date | Mon, 10 Jun 2013 11:30:51 +0200 |
parents | 0f80645e9c26 |
children | c0b0974dd509 bdd155477289 |
comparison
equal
deleted
inserted
replaced
10404:d0add7016434 | 10405:f2110083203d |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
37 #endif | 37 #endif |
38 #ifdef TARGET_OS_FAMILY_bsd | 38 #ifdef TARGET_OS_FAMILY_bsd |
39 # include "os_bsd.inline.hpp" | 39 # include "os_bsd.inline.hpp" |
40 #endif | 40 #endif |
41 | 41 |
42 double TimeHelper::counter_to_seconds(jlong counter) { | |
43 double count = (double) counter; | |
44 double freq = (double) os::elapsed_frequency(); | |
45 return counter/freq; | |
46 } | |
42 | 47 |
43 void elapsedTimer::add(elapsedTimer t) { | 48 void elapsedTimer::add(elapsedTimer t) { |
44 _counter += t._counter; | 49 _counter += t._counter; |
45 } | 50 } |
46 | 51 |
57 _active = false; | 62 _active = false; |
58 } | 63 } |
59 } | 64 } |
60 | 65 |
61 double elapsedTimer::seconds() const { | 66 double elapsedTimer::seconds() const { |
62 double count = (double) _counter; | 67 return TimeHelper::counter_to_seconds(_counter); |
63 double freq = (double) os::elapsed_frequency(); | |
64 return count/freq; | |
65 } | 68 } |
66 | 69 |
67 jlong elapsedTimer::milliseconds() const { | 70 jlong elapsedTimer::milliseconds() const { |
68 jlong ticks_per_ms = os::elapsed_frequency() / 1000; | 71 jlong ticks_per_ms = os::elapsed_frequency() / 1000; |
69 return _counter / ticks_per_ms; | 72 return _counter / ticks_per_ms; |
88 } | 91 } |
89 | 92 |
90 double TimeStamp::seconds() const { | 93 double TimeStamp::seconds() const { |
91 assert(is_updated(), "must not be clear"); | 94 assert(is_updated(), "must not be clear"); |
92 jlong new_count = os::elapsed_counter(); | 95 jlong new_count = os::elapsed_counter(); |
93 double count = (double) new_count - _counter; | 96 return TimeHelper::counter_to_seconds(new_count - _counter); |
94 double freq = (double) os::elapsed_frequency(); | |
95 return count/freq; | |
96 } | 97 } |
97 | 98 |
98 jlong TimeStamp::milliseconds() const { | 99 jlong TimeStamp::milliseconds() const { |
99 assert(is_updated(), "must not be clear"); | 100 assert(is_updated(), "must not be clear"); |
100 | 101 |
108 assert(is_updated(), "must not be clear"); | 109 assert(is_updated(), "must not be clear"); |
109 return os::elapsed_counter() - _counter; | 110 return os::elapsed_counter() - _counter; |
110 } | 111 } |
111 | 112 |
112 TraceTime::TraceTime(const char* title, | 113 TraceTime::TraceTime(const char* title, |
113 bool doit, | 114 bool doit) { |
114 bool print_cr, | |
115 outputStream* logfile) { | |
116 _active = doit; | 115 _active = doit; |
117 _verbose = true; | 116 _verbose = true; |
118 _print_cr = print_cr; | |
119 _logfile = (logfile != NULL) ? logfile : tty; | |
120 | 117 |
121 if (_active) { | 118 if (_active) { |
122 _accum = NULL; | 119 _accum = NULL; |
123 _logfile->stamp(PrintGCTimeStamps); | 120 tty->stamp(PrintGCTimeStamps); |
124 _logfile->print("[%s", title); | 121 tty->print("[%s", title); |
125 _logfile->flush(); | 122 tty->flush(); |
126 _t.start(); | 123 _t.start(); |
127 } | 124 } |
128 } | 125 } |
129 | 126 |
130 TraceTime::TraceTime(const char* title, | 127 TraceTime::TraceTime(const char* title, |
131 elapsedTimer* accumulator, | 128 elapsedTimer* accumulator, |
132 bool doit, | 129 bool doit, |
133 bool verbose, | 130 bool verbose) { |
134 outputStream* logfile) { | |
135 _active = doit; | 131 _active = doit; |
136 _verbose = verbose; | 132 _verbose = verbose; |
137 _print_cr = true; | |
138 _logfile = (logfile != NULL) ? logfile : tty; | |
139 if (_active) { | 133 if (_active) { |
140 if (_verbose) { | 134 if (_verbose) { |
141 _logfile->stamp(PrintGCTimeStamps); | 135 tty->stamp(PrintGCTimeStamps); |
142 _logfile->print("[%s", title); | 136 tty->print("[%s", title); |
143 _logfile->flush(); | 137 tty->flush(); |
144 } | 138 } |
145 _accum = accumulator; | 139 _accum = accumulator; |
146 _t.start(); | 140 _t.start(); |
147 } | 141 } |
148 } | 142 } |
150 TraceTime::~TraceTime() { | 144 TraceTime::~TraceTime() { |
151 if (_active) { | 145 if (_active) { |
152 _t.stop(); | 146 _t.stop(); |
153 if (_accum!=NULL) _accum->add(_t); | 147 if (_accum!=NULL) _accum->add(_t); |
154 if (_verbose) { | 148 if (_verbose) { |
155 if (_print_cr) { | 149 tty->print_cr(", %3.7f secs]", _t.seconds()); |
156 _logfile->print_cr(", %3.7f secs]", _t.seconds()); | 150 tty->flush(); |
157 } else { | |
158 _logfile->print(", %3.7f secs]", _t.seconds()); | |
159 } | |
160 _logfile->flush(); | |
161 } | 151 } |
162 } | 152 } |
163 } | 153 } |
164 | 154 |
165 TraceCPUTime::TraceCPUTime(bool doit, | 155 TraceCPUTime::TraceCPUTime(bool doit, |