[BACK]Return to unix_resource_usage.adb CVS log [TXT][DIR] Up to [local] / OpenXM_contrib / PHC / Ada / System

Annotation of OpenXM_contrib/PHC/Ada/System/unix_resource_usage.adb, Revision 1.1

1.1     ! maekawa     1: package body Unix_Resource_Usage is
        !             2:
        !             3:   package C_Interfaces is
        !             4:
        !             5:     times_map : constant array (times_enum)
        !             6:                of integer
        !             7:              := (self => 0, children => -1);
        !             8:
        !             9:     function getrusage (who : integer;
        !            10:                        rusage : system.address)
        !            11:        return integer;
        !            12:     pragma interface (C, getrusage);
        !            13:
        !            14:     function timeval_to_duration (tv : timeval)
        !            15:         return duration;
        !            16:
        !            17:   end C_Interfaces;
        !            18:
        !            19:     function Get_Process_Times (who : times_enum := self)
        !            20:        return Process_Times
        !            21:     is
        !            22:       answer : Process_Times;
        !            23:       c_result : integer;
        !            24:     begin
        !            25:       c_result := C_Interfaces.getrusage
        !            26:                        (who => C_Interfaces.times_map(who),
        !            27:                         rusage => answer'address);
        !            28:       if (c_result = -1) then
        !            29:        raise program_error;    -- something broke in Unix!
        !            30:       else
        !            31:        return answer;
        !            32:       end if;
        !            33:     end Get_Process_Times;
        !            34:
        !            35:     function Total_Time_of (Times: in Process_Times)
        !            36:         return duration
        !            37:     is
        !            38:     begin
        !            39:       return user_cpu_time_of (times) + system_cpu_time_of (times);
        !            40:     end;
        !            41:
        !            42:     function User_CPU_Time_Of (Times: in Process_Times)
        !            43:         return Duration
        !            44:     is
        !            45:     begin
        !            46:       return C_Interfaces.timeval_to_duration (times.ru_utime);
        !            47:     end User_CPU_Time_Of;
        !            48:
        !            49:     function System_CPU_Time_Of (Times: in Process_Times)
        !            50:         return Duration
        !            51:     is
        !            52:     begin
        !            53:       return C_Interfaces.timeval_to_duration (times.ru_stime);
        !            54:     end System_CPU_Time_Of;
        !            55:
        !            56:     function Max_Resident_Set_Size_of (Times: in Process_Times)
        !            57:         return natural
        !            58:     is
        !            59:     begin
        !            60:       return times.ru_maxrss;
        !            61:     end max_resident_set_size_of;
        !            62:
        !            63:     function Shared_Pages_Value_of (Times: in Process_Times)
        !            64:         return page_seconds
        !            65:     is
        !            66:     begin
        !            67:       return page_seconds(times.ru_ixrss);
        !            68:     end;
        !            69:
        !            70:     function Unshared_Data_Pages_Value_of (Times: in Process_Times)
        !            71:        return page_seconds
        !            72:     is
        !            73:     begin
        !            74:       return page_seconds(times.ru_idrss);
        !            75:     end;
        !            76:
        !            77:     function Stack_Pages_Value_of (Times: in Process_Times)
        !            78:         return page_seconds
        !            79:     is
        !            80:     begin
        !            81:       return page_seconds(times.ru_isrss);
        !            82:     end;
        !            83:
        !            84:     function Non_IO_Page_Faults_of (Times: in Process_Times)
        !            85:         return natural
        !            86:     is
        !            87:     begin
        !            88:       return times.ru_minflt;
        !            89:     end;
        !            90:
        !            91:     function IO_Page_Faults_of (Times: in Process_Times)
        !            92:        return natural
        !            93:     is
        !            94:     begin
        !            95:       return times.ru_majflt;
        !            96:     end;
        !            97:
        !            98:     function Swaps_of (Times : in Process_Times)
        !            99:         return natural
        !           100:     is
        !           101:     begin
        !           102:       return times.ru_nswap;
        !           103:     end;
        !           104:
        !           105:     function Input_Blocks_of (Times : in Process_Times)
        !           106:         return natural
        !           107:     is
        !           108:     begin
        !           109:       return times.ru_inblock;
        !           110:     end;
        !           111:
        !           112:     function Output_Blocks_of (Times : in Process_Times)
        !           113:         return natural
        !           114:     is
        !           115:     begin
        !           116:       return times.ru_outblock;
        !           117:     end;
        !           118:
        !           119:     function Socket_Messages_Sent_of (Times : in Process_Times)
        !           120:        return natural
        !           121:     is
        !           122:     begin
        !           123:       return times.ru_msgsnd;
        !           124:     end;
        !           125:
        !           126:     function Socket_Messages_Received_of (Times : in Process_Times)
        !           127:         return natural
        !           128:     is
        !           129:     begin
        !           130:       return times.ru_msgrcv;
        !           131:     end;
        !           132:
        !           133:     function Signals_Delivered_of (Times : in Process_Times)
        !           134:         return natural
        !           135:     is
        !           136:     begin
        !           137:       return times.ru_nsignals;
        !           138:     end;
        !           139:
        !           140:     function Voluntary_Context_Switches_of (Times: in Process_Times)
        !           141:         return natural
        !           142:     is
        !           143:     begin
        !           144:       return times.ru_nvcsw;
        !           145:     end;
        !           146:
        !           147:     function Involuntary_Context_Switches_of (Times: in Process_Times)
        !           148:         return natural
        !           149:     is
        !           150:     begin
        !           151:       return times.ru_nivcsw;
        !           152:     end;
        !           153:
        !           154:   package body C_Interfaces is
        !           155:
        !           156:     function timeval_to_duration (tv : timeval)
        !           157:         return duration
        !           158:     is
        !           159:       answer : duration;
        !           160:     begin
        !           161:       -- on a sun:
        !           162:         answer := duration(tv.tv_sec) + duration(tv.tv_usec)/1_000_000;
        !           163:       -- on a dec:
        !           164:       -- answer := duration(tv.tv_sec);
        !           165:       -- if float(tv.tv_usec) <= duration'large
        !           166:       --  then answer := answer + duration(tv.tv_usec)/1_000_000;
        !           167:       --  else answer := answer + duration(tv.tv_usec/100)/10_000;
        !           168:       -- end if;
        !           169:       -- because of the strange fact that on a dec
        !           170:       -- duration'large is about 2.14E+5 < 1_000_000;
        !           171:       -- with the following trials, only the seconds were printed:
        !           172:       --  answer := duration(tv.tv_sec + tv.tv_usec/1_000_000);
        !           173:       --  answer := duration(tv.tv_sec) + duration(tv.tv_usec/1_000_000);
        !           174:       return answer;
        !           175:     end timeval_to_duration;
        !           176:
        !           177:   end C_Interfaces;
        !           178:
        !           179: end Unix_Resource_Usage;

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>