42 // Initialization 43 static void reset() PRODUCT_RETURN; 44 45 // Counter info (all info since last reset) 46 static int counter_value() PRODUCT_RETURN0 NOT_PRODUCT({ return _counter_value; }); 47 static double elapsed_time() PRODUCT_RETURN0; // in seconds 48 static double frequency() PRODUCT_RETURN0; // bytecodes/seconds 49 50 // Counter printing 51 static void print() PRODUCT_RETURN; 52 }; 53 54 55 // BytecodeHistogram collects number of executions of bytecodes 56 57 class BytecodeHistogram: AllStatic { 58 private: 59 NOT_PRODUCT(static int _counters[Bytecodes::number_of_codes];) // a counter for each bytecode 60 61 friend class TemplateInterpreterGenerator; 62 friend class InterpreterGenerator; 63 friend class BytecodeInterpreter; 64 65 public: 66 // Initialization 67 static void reset() PRODUCT_RETURN; // reset counters 68 69 // Profile printing 70 static void print(float cutoff = 0.01F) PRODUCT_RETURN; // cutoff in percent 71 }; 72 73 74 // BytecodePairHistogram collects number of executions of bytecode pairs. 75 // A bytecode pair is any sequence of two consequtive bytecodes. 76 77 class BytecodePairHistogram: AllStatic { 78 public: // for SparcWorks 79 enum Constants { 80 log2_number_of_codes = 8, // use a power of 2 for faster addressing 81 number_of_codes = 1 << log2_number_of_codes, // must be no less than Bytecodes::number_of_codes 82 number_of_pairs = number_of_codes * number_of_codes 83 }; 84 85 private: 86 NOT_PRODUCT(static int _index;) // new bytecode is shifted in - used to index into _counters 87 NOT_PRODUCT(static int _counters[number_of_pairs];) // a counter for each pair 88 89 friend class TemplateInterpreterGenerator; 90 friend class InterpreterGenerator; 91 92 public: 93 // Initialization 94 static void reset() PRODUCT_RETURN; // reset counters 95 96 // Profile printing 97 static void print(float cutoff = 0.01F) PRODUCT_RETURN; // cutoff in percent 98 }; 99 100 #endif // SHARE_VM_INTERPRETER_BYTECODEHISTOGRAM_HPP | 42 // Initialization 43 static void reset() PRODUCT_RETURN; 44 45 // Counter info (all info since last reset) 46 static int counter_value() PRODUCT_RETURN0 NOT_PRODUCT({ return _counter_value; }); 47 static double elapsed_time() PRODUCT_RETURN0; // in seconds 48 static double frequency() PRODUCT_RETURN0; // bytecodes/seconds 49 50 // Counter printing 51 static void print() PRODUCT_RETURN; 52 }; 53 54 55 // BytecodeHistogram collects number of executions of bytecodes 56 57 class BytecodeHistogram: AllStatic { 58 private: 59 NOT_PRODUCT(static int _counters[Bytecodes::number_of_codes];) // a counter for each bytecode 60 61 friend class TemplateInterpreterGenerator; 62 friend class BytecodeInterpreter; 63 64 public: 65 // Initialization 66 static void reset() PRODUCT_RETURN; // reset counters 67 68 // Profile printing 69 static void print(float cutoff = 0.01F) PRODUCT_RETURN; // cutoff in percent 70 }; 71 72 73 // BytecodePairHistogram collects number of executions of bytecode pairs. 74 // A bytecode pair is any sequence of two consequtive bytecodes. 75 76 class BytecodePairHistogram: AllStatic { 77 public: // for SparcWorks 78 enum Constants { 79 log2_number_of_codes = 8, // use a power of 2 for faster addressing 80 number_of_codes = 1 << log2_number_of_codes, // must be no less than Bytecodes::number_of_codes 81 number_of_pairs = number_of_codes * number_of_codes 82 }; 83 84 private: 85 NOT_PRODUCT(static int _index;) // new bytecode is shifted in - used to index into _counters 86 NOT_PRODUCT(static int _counters[number_of_pairs];) // a counter for each pair 87 88 friend class TemplateInterpreterGenerator; 89 90 public: 91 // Initialization 92 static void reset() PRODUCT_RETURN; // reset counters 93 94 // Profile printing 95 static void print(float cutoff = 0.01F) PRODUCT_RETURN; // cutoff in percent 96 }; 97 98 #endif // SHARE_VM_INTERPRETER_BYTECODEHISTOGRAM_HPP |