home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / piwg / e000001.ada < prev    next >
Encoding:
Text File  |  1988-05-03  |  2.5 KB  |  98 lines

  1.  
  2. -- PERFORMANCE MEASUREMENT : exception raise and handle time
  3. --                           exception in loop
  4.  
  5. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  6. with ITERATION ; -- obtain stable measurement
  7. with PIWG_IO ; -- output results
  8.  
  9. procedure E000001 is  -- main procedure to execute
  10.  
  11.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  12.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  13.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  14.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  15.   STABLE : BOOLEAN ; -- true when measurement stable
  16.   MY_EXCEPTION : exception ;
  17.  
  18. --
  19.  
  20. begin
  21.  
  22.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  23.  
  24.   delay 0.5 ;  -- wait for stable enviornment on some machines
  25.  
  26.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  27.  
  28.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  29.  
  30. --
  31. -- Control loop
  32. --
  33.     ITERATION.START_CONTROL ;
  34.     for J in 1 .. ITERATION_COUNT loop
  35.       GLOBAL := 0 ;
  36.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  37.         begin
  38.           if A_ONE = 1 then
  39.             GLOBAL := GLOBAL + A_ONE ;
  40.             REMOTE ;
  41.           else
  42.             GLOBAL := GLOBAL + A_ONE ;
  43.             REMOTE ;
  44.             raise MY_EXCEPTION ;
  45.           end if ;
  46.         exception
  47.           when MY_EXCEPTION =>
  48.             null ;
  49.         end ;
  50.       end loop ;
  51.     end loop ;
  52.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  53.  
  54.  
  55. --
  56. -- Test loop
  57. --
  58. -- establish exception raise and handle time
  59.  
  60.     ITERATION.START_TEST ;
  61.     for J in 1 .. ITERATION_COUNT loop
  62.       GLOBAL := 0 ;
  63.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  64.         begin
  65.           if A_ONE = 2 then
  66.             GLOBAL := GLOBAL + A_ONE ;
  67.             REMOTE ;
  68.           else
  69.             GLOBAL := GLOBAL + A_ONE ;
  70.             REMOTE ;
  71.             raise MY_EXCEPTION ;
  72.           end if ;
  73.         exception
  74.           when MY_EXCEPTION =>
  75.             null ;
  76.         end ;
  77.       end loop ;
  78.     end loop ;
  79.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  80.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  81.     exit when STABLE ;
  82.   end loop ;
  83. --
  84.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  85.  
  86.  
  87. --
  88. -- Printout
  89. --
  90.   PIWG_IO.PIWG_OUTPUT ( "E000001" , "Exception" ,
  91.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  92.      " Time to raise and handle an exception " ,
  93.      " Exception defined locally and handled locally " ,
  94.      " " ) ;
  95.  
  96.  
  97. end E000001 ;
  98.