public static void report(){
  if (!booted)   return;
  ControllerThread.report();
  RuntimeMeasurements.report();
  for (Enumeration<Organizer> e=organizers.elements(); e.hasMoreElements(); ) {
    Organizer organizer=e.nextElement();
    organizer.report();
  }
  if (options.FINAL_REPORT_LEVEL >= 2) {
    EdgeCounts.dumpCounts();
    dcg.dumpGraph();
  }
  if (options.REPORT_INTERRUPT_STATS) {
    VM.sysWriteln("Timer Interrupt and Listener Stats");
    VM.sysWriteln("\tTotal number of clock ticks ",RVMThread.timerTicks);
    VM.sysWriteln("\tController clock ",controllerClock);
    VM.sysWriteln("\tNumber of method samples taken ",(int)methodSamples.getTotalNumberOfSamples());
  }
}

public static void report ( ) { if ( ! booted ) return ; ControllerThread . report ( ) ; RuntimeMeasurements . report ( ) ; for ( Enumeration < Organizer > e = organizers . elements ( ) ; e . hasMoreElements ( ) ; ) { Organizer organizer = e . nextElement ( ) ; organizer . report ( ) ; } if ( options . FINAL_REPORT_LEVEL >= 2 ) { EdgeCounts . dumpCounts ( ) ; dcg . dumpGraph ( ) ; } if ( options . REPORT_INTERRUPT_STATS ) { VM . sysWriteln ( "Timer Interrupt and Listener Stats" ) ; VM . sysWriteln ( "\tTotal number of clock ticks " , RVMThread . timerTicks ) ; VM . sysWriteln ( "\tController clock " , controllerClock ) ; VM . sysWriteln ( "\tNumber of method samples taken " , ( int ) methodSamples . getTotalNumberOfSamples ( ) ) ; } }
this method is called when the vm is exiting to provide a hook to allow the adaptive optimization subsystem to generate a summary report . it can also be called directly from driver programs to allow reporting on a single run of a benchmark that the driver program is executing in a loop ( in which case the adaptive system isn ' t actually exiting . . . . . so some of the log messages may get a little weird ) .
