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

  1.  
  2. -- PERFORMANCE MEASUREMENT : exception raise and handle time
  3. --                           exception in procedure 4 deep
  4.  
  5. package EXCEPT_PACK_4 is
  6.  
  7.   MY_EXCEPTION : exception ;
  8.   SWITCH : BOOLEAN ; -- controls return or raise exception
  9.  
  10.   procedure PROC_1 ( SWITCH : BOOLEAN ) ; -- either returns or raises exception
  11.  
  12.   procedure PROC_2 ( SWITCH : BOOLEAN ) ; -- calls PROC_1
  13.  
  14.   procedure PROC_3 ( SWITCH : BOOLEAN ) ; -- calls PROC_2
  15.  
  16.   procedure PROC_4 ( SWITCH : BOOLEAN ) ; -- calls PROC_3
  17.  
  18. end EXCEPT_PACK_4 ;
  19.  
  20. with EXCEPT_PACK_4 ; use EXCEPT_PACK_4 ;
  21. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  22. with ITERATION ; -- obtain stable measurement
  23. with PIWG_IO ; -- output results
  24.  
  25. procedure E000004 is  -- main procedure to execute
  26.  
  27.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  28.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  29.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  30.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  31.   STABLE : BOOLEAN ; -- true when measurement stable
  32.  
  33. begin
  34.  
  35.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  36.  
  37.   delay 0.5 ;  -- wait for stable enviornment on some machines
  38.  
  39.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  40.  
  41.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  42.  
  43. --
  44. -- Control loop
  45. --
  46.     if A_ONE = 2 then
  47.       SWITCH := TRUE ;
  48.     else
  49.       SWITCH := FALSE ;
  50.     end if ;
  51.  
  52.     ITERATION.START_CONTROL ;
  53.     for J in 1 .. ITERATION_COUNT loop
  54.       GLOBAL := 0 ;
  55.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  56. --                     this has control global increment and call inside
  57.         begin
  58.           PROC_4 ( SWITCH ) ;
  59.         exception
  60.           when MY_EXCEPTION =>
  61.             null ;
  62.         end ;
  63.       end loop ;
  64.     end loop ;
  65.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  66.  
  67.  
  68. --
  69. -- Test loop
  70. --
  71. -- establish exception raise and handle time
  72.  
  73.     if A_ONE = 1 then
  74.       SWITCH := TRUE ;
  75.     else
  76.       SWITCH := FALSE ;
  77.     end if ;
  78.  
  79.     ITERATION.START_TEST ;
  80.     for J in 1 .. ITERATION_COUNT loop
  81.       GLOBAL := 0 ;
  82.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  83. --                     this has control global increment and call inside
  84.         begin
  85.           PROC_4 ( SWITCH ) ;
  86.         exception
  87.           when MY_EXCEPTION =>
  88.             null ;
  89.         end ;
  90.       end loop ;
  91.     end loop ;
  92.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  93.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  94.     exit when STABLE ;
  95.   end loop ;
  96. --
  97.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  98.  
  99. --
  100. -- Printout
  101. --
  102.   PIWG_IO.PIWG_OUTPUT ( "E000004" , "Procedure" ,
  103.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  104.     " Exception raise and handle timing measurement " ,
  105.     " when exception is in a package, 4 deep " ,
  106.     " " ) ;
  107. end E000004 ;
  108.  
  109. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  110. package body EXCEPT_PACK_4 is -- compare to E000002, diff is propegation
  111.   procedure PROC_4 ( SWITCH : BOOLEAN ) is
  112.   begin
  113.     PROC_3 ( SWITCH ) ;
  114.   end PROC_4 ;
  115.  
  116.   procedure PROC_3 ( SWITCH : BOOLEAN ) is
  117.   begin
  118.     PROC_2 ( SWITCH ) ;
  119.   end PROC_3 ;
  120.  
  121.   procedure PROC_2 ( SWITCH : BOOLEAN ) is
  122.   begin
  123.     PROC_1 ( SWITCH ) ;
  124.   end PROC_2 ;
  125.  
  126.   procedure PROC_1 ( SWITCH : BOOLEAN ) is
  127.   begin
  128.     GLOBAL := GLOBAL + 1 ;
  129.     REMOTE ;
  130.     if SWITCH then
  131.       raise MY_EXCEPTION ;
  132.     else
  133.       return ;
  134.     end if ;
  135.   end PROC_1 ;
  136. end EXCEPT_PACK_4 ;
  137.