# HG changeset patch # User Doug Simon # Date 1359578188 -3600 # Node ID 140d4d4ab3b9db4b4ded94578b8d5686e9a0bb06 # Parent a8bc60aeacb89d596d40c7523bcbf6b17afb7afe added per-compiler compilation speed statistics for C1 and C2 (included in output produced by -XX:+CITime) diff -r a8bc60aeacb8 -r 140d4d4ab3b9 src/share/vm/compiler/abstractCompiler.hpp --- a/src/share/vm/compiler/abstractCompiler.hpp Wed Jan 30 18:19:01 2013 +0100 +++ b/src/share/vm/compiler/abstractCompiler.hpp Wed Jan 30 21:36:28 2013 +0100 @@ -29,6 +29,17 @@ typedef void (*initializer)(void); +#ifdef GRAAL +class CompilerStatistics { + public: + elapsedTimer _t_osr_compilation; + elapsedTimer _t_standard_compilation; + int _sum_osr_bytes_compiled; + int _sum_standard_bytes_compiled; + CompilerStatistics() : _sum_osr_bytes_compiled(0), _sum_standard_bytes_compiled(0) {} +}; +#endif + class AbstractCompiler : public CHeapObj { private: bool _is_initialized; // Mark whether compiler object is initialized @@ -49,6 +60,10 @@ private: Type _type; +#ifdef GRAAL + CompilerStatistics _stats; +#endif + public: AbstractCompiler(Type type) : _is_initialized(false), _type(type) {} @@ -83,6 +98,10 @@ virtual void print_timers() { ShouldNotReachHere(); } + +#ifdef GRAAL + CompilerStatistics* stats() { return &_stats; } +#endif }; #endif // SHARE_VM_COMPILER_ABSTRACTCOMPILER_HPP diff -r a8bc60aeacb8 -r 140d4d4ab3b9 src/share/vm/compiler/compileBroker.cpp --- a/src/share/vm/compiler/compileBroker.cpp Wed Jan 30 18:19:01 2013 +0100 +++ b/src/share/vm/compiler/compileBroker.cpp Wed Jan 30 21:36:28 2013 +0100 @@ -2082,9 +2082,17 @@ if (is_osr) { _t_osr_compilation.add(time); _sum_osr_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#ifdef GRAAL + compiler(task->comp_level())->stats()->_t_osr_compilation.add(time); + compiler(task->comp_level())->stats()->_sum_osr_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#endif } else { _t_standard_compilation.add(time); _sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#ifdef GRAAL + compiler(task->comp_level())->stats()->_t_standard_compilation.add(time); + compiler(task->comp_level())->stats()->_sum_standard_bytes_compiled += method->code_size() + task->num_inlined_bytecodes(); +#endif } } @@ -2157,8 +2165,25 @@ tty->print_cr(" Total compiled bytecodes : %6d bytes", tcb); tty->print_cr(" Standard compilation : %6d bytes", CompileBroker::_sum_standard_bytes_compiled); tty->print_cr(" On stack replacement : %6d bytes", CompileBroker::_sum_osr_bytes_compiled); - int bps = (int)(tcb / CompileBroker::_t_total_compilation.seconds()); + double tcs = CompileBroker::_t_total_compilation.seconds(); + int bps = tcs == 0.0 ? 0 : (int)(tcb / tcs); tty->print_cr(" Average compilation speed: %6d bytes/s", bps); +#ifdef GRAAL + for (unsigned int i = 0; i < sizeof(_compilers) / sizeof(AbstractCompiler*); i++) { + AbstractCompiler* comp = _compilers[i]; + if (comp != NULL) { + CompilerStatistics* stats = comp->stats(); + int bytecodes = stats->_sum_osr_bytes_compiled + stats->_sum_standard_bytes_compiled; + if (bytecodes != 0) { + double seconds = stats->_t_osr_compilation.seconds() + stats->_t_standard_compilation.seconds(); + int bps = seconds == 0.0 ? 0 : (int) (bytecodes / seconds); + tty->print_cr(" %7s compilation speed: %6d bytes/s {standard: %6.3f s, %6d bytes; osr: %6.3f s, %6d bytes}", + comp->name(), bps, stats->_t_standard_compilation.seconds(), stats->_sum_standard_bytes_compiled, + stats->_t_osr_compilation.seconds(), stats->_sum_osr_bytes_compiled); + } + } + } +#endif tty->cr(); tty->print_cr(" nmethod code size : %6d bytes", CompileBroker::_sum_nmethod_code_size); tty->print_cr(" nmethod total size : %6d bytes", CompileBroker::_sum_nmethod_size); diff -r a8bc60aeacb8 -r 140d4d4ab3b9 src/share/vm/graal/graalCompiler.hpp --- a/src/share/vm/graal/graalCompiler.hpp Wed Jan 30 18:19:01 2013 +0100 +++ b/src/share/vm/graal/graalCompiler.hpp Wed Jan 30 21:36:28 2013 +0100 @@ -46,7 +46,7 @@ static GraalCompiler* instance() { return _instance; } - virtual const char* name() { return "G"; } + virtual const char* name() { return "Graal"; } virtual bool supports_native() { return true; } virtual bool supports_osr () { return true; }