Annotation of OpenXM_contrib/PHC/Ada/System/other_timing_package.adb, Revision 1.1
1.1 ! maekawa 1: with Text_Io, Unix_Resource_Usage;
! 2:
! 3: package body Timing_Package is
! 4:
! 5: package duration_io is new text_io.fixed_io(duration);
! 6: package integer_io is new text_io.integer_io (integer);
! 7:
! 8: function duration_to_string (dur : duration)
! 9: return string;
! 10: pragma inline (duration_to_string);
! 11:
! 12: type timing_item is record
! 13: start_time : Unix_Resource_Usage.Process_Times;
! 14: stop_time : Unix_Resource_Usage.Process_Times;
! 15: end record;
! 16:
! 17: type rusage_timing_stuff is record
! 18: total_time : duration;
! 19: user_time : duration;
! 20: system_time : duration;
! 21: -- max_resident_size : natural;
! 22: -- shared_pages : natural;
! 23: -- unshared_pages : natural;
! 24: -- stack_pages : natural;
! 25: non_io_faults : natural;
! 26: io_faults : natural;
! 27: swaps : natural;
! 28: -- input_blocks : natural;
! 29: -- output_blocks : natural;
! 30: -- messages_out : natural;
! 31: -- messages_in : natural;
! 32: signals : natural;
! 33: -- vol_context_switches : natural;
! 34: -- invol_context_switches : natural;
! 35: total_context_switches : natural;
! 36: end record;
! 37:
! 38: function to_rusage_timing_stuff ( item : Timing_Widget )
! 39: return rusage_timing_stuff;
! 40: pragma inline (to_rusage_timing_stuff);
! 41:
! 42: procedure tstart ( widget : out Timing_Widget ) is
! 43:
! 44: answer : timing_item;
! 45:
! 46: begin
! 47: answer.start_time := Unix_Resource_Usage.get_process_times;
! 48: widget := new timing_item'(answer);
! 49: end tstart;
! 50:
! 51: procedure tstop ( widget : in out Timing_Widget ) is
! 52: begin
! 53: widget.all.stop_time := Unix_Resource_Usage.get_process_times;
! 54: end tstop;
! 55:
! 56: function Elapsed_Total_Time ( widget : Timing_Widget ) return duration is
! 57: begin
! 58: return (Unix_Resource_Usage.Total_Time_of(widget.Stop_Time)
! 59: - Unix_Resource_Usage.Total_Time_of(widget.Start_Time));
! 60: end Elapsed_Total_Time;
! 61:
! 62: function Elapsed_User_Time ( widget : Timing_Widget ) return duration is
! 63: begin
! 64: return (Unix_Resource_Usage.User_CPU_Time_of(widget.Stop_Time)
! 65: - Unix_Resource_Usage.User_CPU_Time_of(widget.Start_Time));
! 66: end Elapsed_User_Time;
! 67:
! 68: function Elapsed_System_Time ( widget : Timing_Widget ) return duration is
! 69: begin
! 70: return (Unix_Resource_Usage.System_CPU_Time_of(widget.Stop_Time)
! 71: - Unix_Resource_Usage.System_CPU_Time_of(widget.Start_Time));
! 72: end Elapsed_System_Time;
! 73:
! 74: procedure print_times ( widget : Timing_Widget; tag : string := "" ) is
! 75: begin
! 76: print_times(Standard_Output,widget,tag);
! 77: end print_times;
! 78:
! 79: procedure print_time ( file : file_type; mach_time : duration ) is
! 80: begin
! 81: duration_io.put(file,mach_time);
! 82: end print_time;
! 83:
! 84: function truncate ( d : duration ) return integer is
! 85:
! 86: rd : integer := integer(d);
! 87:
! 88: begin
! 89: if rd > 0
! 90: then if duration(rd) > d
! 91: then rd := rd-1;
! 92: end if;
! 93: end if;
! 94: return rd;
! 95: end truncate;
! 96:
! 97: procedure print_hms ( file : file_type; mach_time : duration ) is
! 98:
! 99: seconds : integer := truncate(mach_time);
! 100: millsec : integer := integer((mach_time-duration(seconds))*1000);
! 101: minutes,hours : integer;
! 102:
! 103: begin
! 104: if millsec >= 1000 -- could be due to rounding
! 105: then seconds := seconds + 1;
! 106: millsec := millsec - 1000;
! 107: end if;
! 108: minutes := seconds/60;
! 109: hours := minutes/60;
! 110: seconds := seconds - 60*minutes;
! 111: minutes := minutes - 60*hours;
! 112: integer_io.put(file,hours,2); text_io.put(file,"h");
! 113: integer_io.put(file,minutes,2); text_io.put(file,"m");
! 114: integer_io.put(file,seconds,2); text_io.put(file,"s");
! 115: integer_io.put(file,millsec,3); text_io.put(file,"ms");
! 116: end print_hms;
! 117:
! 118: procedure print_times ( file : file_type;
! 119: widget : Timing_Widget; tag : string := "") is
! 120:
! 121: rusage_stuff : rusage_timing_stuff;
! 122:
! 123: printout_column : text_io.positive_count := 45;
! 124: function "+" (l,r : text_io.positive_count)
! 125: return text_io.positive_count renames Text_IO."+";
! 126:
! 127: begin
! 128: text_io.put_line (file,"TIMING INFORMATION for " & tag);
! 129: rusage_stuff := to_rusage_timing_stuff (widget);
! 130: -- print out total time
! 131: Text_Io.Put (file,"The elapsed time in seconds was ");
! 132: text_io.set_col (file,Text_IO.positive_count(printout_column + 3));
! 133: duration_io.put (file,rusage_stuff.total_time);
! 134: text_io.put(file," = "); print_hms(file,rusage_stuff.total_time);
! 135: text_io.new_line(file);
! 136: -- print out user time
! 137: Text_Io.Put (file,"User time in seconds was ");
! 138: text_io.set_col (file,Text_IO.positive_count(printout_column + 3));
! 139: duration_io.put (file,rusage_stuff.user_time);
! 140: text_io.put(file," = "); print_hms(file,rusage_stuff.user_time);
! 141: text_io.new_line(file);
! 142: -- print out system time
! 143: Text_Io.Put (file,"System CPU time in seconds was ");
! 144: text_io.set_col (file,text_io.positive_count(printout_column + 3));
! 145: duration_io.put (file,rusage_stuff.system_time);
! 146: text_io.put(file," = "); print_hms(file,rusage_stuff.system_time);
! 147: text_io.new_line(file);
! 148: -- print out non-I/O page faults
! 149: Text_IO.put (file,"Non-I/O page faults was ");
! 150: text_io.set_col (file,printout_column);
! 151: integer_io.put (file,rusage_stuff.non_io_faults);
! 152: Text_IO.new_line(file);
! 153: -- print out I/O page faults
! 154: Text_IO.put (file,"I/O page faults was ");
! 155: text_io.set_col (file,printout_column);
! 156: integer_io.put (file,rusage_stuff.io_faults);
! 157: text_io.new_line(file);
! 158: -- print out signals
! 159: Text_IO.put (file,"Signals delivered was ");
! 160: text_io.set_col (file,printout_column);
! 161: integer_io.put (file,rusage_stuff.signals);
! 162: text_io.new_line(file);
! 163: -- print out swaps
! 164: text_io.put (file,"Swaps was ");
! 165: text_io.set_col (file,printout_column);
! 166: integer_io.put (file,rusage_stuff.swaps);
! 167: text_io.new_line(file);
! 168: -- print out total context switches
! 169: text_io.put (file,"Total context switches was ");
! 170: text_io.set_col (file,printout_column);
! 171: integer_io.put (file,rusage_stuff.total_context_switches);
! 172: text_io.new_line(file);
! 173: -- text_io.put_line
! 174: --("-----------------------------------------------------------------");
! 175: end print_times;
! 176:
! 177: function times_to_string ( widget : Timing_Widget;
! 178: delimiter : string := ":" ) return string is
! 179:
! 180: rusage_stuff : rusage_timing_stuff;
! 181:
! 182: begin
! 183: rusage_stuff := to_rusage_timing_stuff(widget);
! 184: return "Total Time in seconds => "
! 185: & duration_to_string (rusage_stuff.total_time) & delimiter
! 186: & "User Time in seconds => "
! 187: & duration_to_string (rusage_stuff.user_time) & delimiter
! 188: & "System Time in seconds => "
! 189: & duration_to_string (rusage_stuff.system_time) & delimiter
! 190: & "Non I/O Page Faults => "
! 191: & integer'image (rusage_stuff.non_io_faults) & delimiter
! 192: & "I/O Page Faults => "
! 193: & integer'image (rusage_stuff.io_faults) & delimiter
! 194: & "Swaps => "
! 195: & integer'image (rusage_stuff.swaps) & delimiter
! 196: & "Signals Delivered => "
! 197: & integer'image (rusage_stuff.signals) & delimiter
! 198: & "Total Context Switches => "
! 199: & integer'image (rusage_stuff.total_context_switches) & delimiter;
! 200: end times_to_string;
! 201:
! 202: function duration_to_string (dur : duration) return string is
! 203:
! 204: answer : string(1..(duration'fore + duration'aft + 1));
! 205:
! 206: begin
! 207: duration_io.put (to => answer, item => dur);
! 208: return answer;
! 209: end duration_to_string;
! 210:
! 211: function to_rusage_timing_stuff (item : Timing_Widget)
! 212: return rusage_timing_stuff is
! 213:
! 214: answer : rusage_timing_stuff;
! 215:
! 216: begin
! 217: answer.total_time := Unix_Resource_Usage.total_time_of
! 218: (item.Stop_Time)
! 219: - Unix_Resource_Usage.total_time_of
! 220: (item.Start_Time);
! 221: answer.user_time := Unix_Resource_Usage.user_cpu_time_of
! 222: (Item.Stop_time)
! 223: - Unix_Resource_Usage.user_cpu_time_of
! 224: (Item.Start_time);
! 225: answer.system_time := Unix_Resource_Usage.system_cpu_time_of
! 226: (Item.Stop_time)
! 227: - Unix_Resource_Usage.system_cpu_time_of
! 228: (Item.Start_time);
! 229: answer.non_io_faults := integer(Unix_Resource_Usage.non_io_page_faults_of
! 230: (item.stop_time)
! 231: - Unix_Resource_Usage.non_io_page_faults_of
! 232: (item.start_time));
! 233: answer.io_faults := integer (Unix_Resource_Usage.io_page_faults_of
! 234: (item.stop_time)
! 235: - Unix_Resource_Usage.io_page_faults_of
! 236: (item.start_time));
! 237: answer.swaps := (Unix_Resource_Usage.swaps_of
! 238: (item.stop_time)
! 239: - Unix_Resource_Usage.swaps_of
! 240: (item.start_time));
! 241: answer.signals := (Unix_Resource_Usage.signals_delivered_of
! 242: (item.stop_time)
! 243: - Unix_Resource_Usage.signals_delivered_of
! 244: (item.start_time));
! 245:
! 246: answer.total_context_switches
! 247: := ( Unix_Resource_Usage.voluntary_context_switches_of
! 248: (item.stop_time)
! 249: - Unix_Resource_Usage.voluntary_context_switches_of
! 250: (item.start_time))
! 251: + (Unix_Resource_Usage.involuntary_context_switches_of
! 252: (item.stop_time)
! 253: - Unix_Resource_Usage.involuntary_context_switches_of
! 254: (item.start_time));
! 255: return answer;
! 256: end to_rusage_timing_stuff;
! 257:
! 258: end Timing_Package;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>