source: rtems/c/src/ada-tests/tmtests/tm09/tmtest.adb @ bf9ae83

4.104.114.84.95
Last change on this file since bf9ae83 was bf9ae83, checked in by Joel Sherrill <joel.sherrill@…>, on 06/02/97 at 20:32:11

modified copyright notice to be the same as RTEMS 4.0.0.

changed the CVS ID string to be a "development" version.

  • Property mode set to 100644
File size: 7.9 KB
Line 
1--
2--  TMTEST / BODY
3--
4--  DESCRIPTION:
5--
6--  This package is the implementation of Test 9 of the RTEMS
7--  Timing Test Suite.
8--
9--  DEPENDENCIES:
10--
11-- 
12--
13--  COPYRIGHT (c) 1989-1997.
14--  On-Line Applications Research Corporation (OAR).
15--  Copyright assigned to U.S. Government, 1994.
16--
17--  The license and distribution terms for this file may in
18--  the file LICENSE in this distribution or at
19--  http://www.OARcorp.com/rtems/license.html.
20--
21--  $Id$
22--
23
24with INTERFACES; use INTERFACES;
25with RTEMS;
26with RTEMS_CALLING_OVERHEAD;
27with TEST_SUPPORT;
28with TEXT_IO;
29with TIME_TEST_SUPPORT;
30with UNSIGNED32_IO;
31
32package body TMTEST is
33
34--PAGE
35--
36--  INIT
37--
38
39   procedure INIT (
40      ARGUMENT : in     RTEMS.TASK_ARGUMENT
41   ) is
42      TASK_ID : RTEMS.ID;
43      STATUS  : RTEMS.STATUS_CODES;
44   begin
45
46      TEXT_IO.NEW_LINE( 2 );
47      TEXT_IO.PUT_LINE( "*** TIME TEST 9 ***" );
48
49      RTEMS.TASK_CREATE(
50         1,
51         128,
52         4096,
53         RTEMS.DEFAULT_OPTIONS,
54         RTEMS.DEFAULT_ATTRIBUTES,
55         TASK_ID,
56         STATUS
57      );
58      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_CREATE" );
59
60      RTEMS.TASK_START( TASK_ID, TMTEST.TEST_TASK'ACCESS, 0, STATUS );
61      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_START" );
62
63      RTEMS.TASK_DELETE( RTEMS.SELF, STATUS );
64      TEST_SUPPORT.DIRECTIVE_FAILED( STATUS, "TASK_DELETE OF SELF" );
65
66   end INIT;
67
68--PAGE
69--
70--  TEST_TASK
71--
72
73   procedure TEST_TASK (
74      ARGUMENT : in     RTEMS.TASK_ARGUMENT
75   ) is
76      STATUS       : RTEMS.STATUS_CODES;
77   begin
78
79      TIMER_DRIVER.INITIALIZE;
80         RTEMS.MESSAGE_QUEUE_CREATE(
81            1,
82            TIME_TEST_SUPPORT.OPERATION_COUNT,
83            RTEMS.DEFAULT_OPTIONS,
84            TMTEST.QUEUE_ID,
85            STATUS
86         );
87      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
88      TIME_TEST_SUPPORT.PUT_TIME(
89         "MESSAGE_QUEUE_CREATE",
90         TMTEST.END_TIME,
91         1,
92         0,
93         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_CREATE
94      );
95
96      TMTEST.QUEUE_TEST;
97
98      TIMER_DRIVER.INITIALIZE;
99         RTEMS.MESSAGE_QUEUE_DELETE(
100            TMTEST.QUEUE_ID,
101            STATUS
102         );
103      TMTEST.END_TIME := TIMER_DRIVER.READ_TIMER;
104      TIME_TEST_SUPPORT.PUT_TIME(
105         "MESSAGE_QUEUE_DELETE",
106         TMTEST.END_TIME,
107         1,
108         0,
109         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_DELETE
110      );
111
112      RTEMS.SHUTDOWN_EXECUTIVE( 0 );
113
114   end TEST_TASK;
115
116--PAGE
117--
118--  QUEUE_TEST
119--
120
121   procedure QUEUE_TEST
122   is
123      SEND_LOOP_TIME    : RTEMS.UNSIGNED32;
124      URGENT_LOOP_TIME  : RTEMS.UNSIGNED32;
125      RECEIVE_LOOP_TIME : RTEMS.UNSIGNED32;
126      SEND_TIME         : RTEMS.UNSIGNED32;
127      URGENT_TIME       : RTEMS.UNSIGNED32;
128      RECEIVE_TIME      : RTEMS.UNSIGNED32;
129      EMPTY_FLUSH_TIME  : RTEMS.UNSIGNED32;
130      FLUSH_TIME        : RTEMS.UNSIGNED32;
131      FLUSH_COUNT       : RTEMS.UNSIGNED32;
132      EMPTY_FLUSH_COUNT : RTEMS.UNSIGNED32;
133      INDEX             : RTEMS.UNSIGNED32;
134      ITERATIONS        : RTEMS.UNSIGNED32;
135      LOOP_COUNT        : RTEMS.UNSIGNED32;
136      BUFFER            : RTEMS.BUFFER;
137      BUFFER_POINTER    : RTEMS.BUFFER_POINTER;
138      STATUS            : RTEMS.STATUS_CODES;
139   begin
140
141      SEND_LOOP_TIME    := 0;
142      URGENT_LOOP_TIME  := 0;
143      RECEIVE_LOOP_TIME := 0;
144      SEND_TIME         := 0;
145      URGENT_TIME       := 0;
146      RECEIVE_TIME      := 0;
147      EMPTY_FLUSH_TIME  := 0;
148      FLUSH_TIME        := 0;
149      FLUSH_COUNT       := 0;
150      EMPTY_FLUSH_COUNT := 0;
151
152      BUFFER_POINTER := RTEMS.TO_BUFFER_POINTER( BUFFER'ADDRESS );
153
154      for ITERATIONS in 1 .. TIME_TEST_SUPPORT.ITERATION_COUNT
155      loop
156
157         TIMER_DRIVER.INITIALIZE;
158            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
159            loop
160               TIMER_DRIVER.EMPTY_FUNCTION;
161            end loop;
162         SEND_LOOP_TIME := SEND_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
163
164         TIMER_DRIVER.INITIALIZE;
165            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
166            loop
167               TIMER_DRIVER.EMPTY_FUNCTION;
168            end loop;
169         URGENT_LOOP_TIME := URGENT_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
170
171         TIMER_DRIVER.INITIALIZE;
172            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
173            loop
174               TIMER_DRIVER.EMPTY_FUNCTION;
175            end loop;
176         RECEIVE_LOOP_TIME := RECEIVE_LOOP_TIME + TIMER_DRIVER.READ_TIMER;
177
178         TIMER_DRIVER.INITIALIZE;
179            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
180            loop
181               RTEMS.MESSAGE_QUEUE_SEND(
182                  TMTEST.QUEUE_ID,
183                  BUFFER_POINTER,
184                  STATUS
185               );
186            end loop;
187         SEND_TIME := SEND_TIME + TIMER_DRIVER.READ_TIMER;
188
189         TIMER_DRIVER.INITIALIZE;
190            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
191            loop
192               RTEMS.MESSAGE_QUEUE_RECEIVE(
193                  TMTEST.QUEUE_ID,
194                  BUFFER_POINTER,
195                  RTEMS.DEFAULT_OPTIONS,
196                  RTEMS.NO_TIMEOUT,
197                  STATUS
198               );
199            end loop;
200         RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER;
201
202         TIMER_DRIVER.INITIALIZE;
203            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
204            loop
205               RTEMS.MESSAGE_QUEUE_URGENT(
206                  TMTEST.QUEUE_ID,
207                  BUFFER_POINTER,
208                  STATUS
209               );
210            end loop;
211         URGENT_TIME := URGENT_TIME + TIMER_DRIVER.READ_TIMER;
212
213         TIMER_DRIVER.INITIALIZE;
214            for INDEX in 1 .. TIME_TEST_SUPPORT.OPERATION_COUNT
215            loop
216               RTEMS.MESSAGE_QUEUE_RECEIVE(
217                  TMTEST.QUEUE_ID,
218                  BUFFER_POINTER,
219                  RTEMS.DEFAULT_OPTIONS,
220                  RTEMS.NO_TIMEOUT,
221                  STATUS
222               );
223            end loop;
224         RECEIVE_TIME := RECEIVE_TIME + TIMER_DRIVER.READ_TIMER;
225
226         TIMER_DRIVER.INITIALIZE;
227            RTEMS.MESSAGE_QUEUE_FLUSH(
228               TMTEST.QUEUE_ID,
229               EMPTY_FLUSH_COUNT,
230               STATUS
231            );
232         EMPTY_FLUSH_TIME := EMPTY_FLUSH_TIME + TIMER_DRIVER.READ_TIMER;
233
234         -- send one message to flush
235         RTEMS.MESSAGE_QUEUE_SEND(
236            TMTEST.QUEUE_ID,
237            BUFFER_POINTER,
238            STATUS
239         );
240         TIMER_DRIVER.INITIALIZE;
241            RTEMS.MESSAGE_QUEUE_FLUSH(
242               TMTEST.QUEUE_ID,
243               FLUSH_COUNT,
244               STATUS
245            );
246         FLUSH_TIME := FLUSH_TIME + TIMER_DRIVER.READ_TIMER;
247
248      end loop;
249
250      TIME_TEST_SUPPORT.PUT_TIME(
251         "MESSAGE_QUEUE_SEND (no tasks waiting)",
252         SEND_TIME,
253         TIME_TEST_SUPPORT.OPERATION_COUNT *
254            TIME_TEST_SUPPORT.ITERATION_COUNT,
255         SEND_LOOP_TIME,
256         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_SEND
257      );
258
259      TIME_TEST_SUPPORT.PUT_TIME(
260         "MESSAGE_QUEUE_URGENT (no tasks waiting)",
261         URGENT_TIME,
262         TIME_TEST_SUPPORT.OPERATION_COUNT *
263            TIME_TEST_SUPPORT.ITERATION_COUNT,
264         URGENT_LOOP_TIME,
265         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_URGENT
266      );
267
268      TIME_TEST_SUPPORT.PUT_TIME(
269         "MESSAGE_QUEUE_RECEIVE (messages available)",
270         RECEIVE_TIME,
271         TIME_TEST_SUPPORT.OPERATION_COUNT *
272            TIME_TEST_SUPPORT.ITERATION_COUNT * 2,
273         RECEIVE_LOOP_TIME * 2,
274         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_RECEIVE
275      );
276
277      TIME_TEST_SUPPORT.PUT_TIME(
278         "MESSAGE_QUEUE_FLUSH (empty queue)",
279         EMPTY_FLUSH_TIME,
280         TIME_TEST_SUPPORT.ITERATION_COUNT,
281         0,
282         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH
283      );
284
285      TIME_TEST_SUPPORT.PUT_TIME(
286         "MESSAGE_QUEUE_FLUSH (messages flushed)",
287         FLUSH_TIME,
288         TIME_TEST_SUPPORT.ITERATION_COUNT,
289         0,
290         RTEMS_CALLING_OVERHEAD.MESSAGE_QUEUE_FLUSH
291      );
292
293   end QUEUE_TEST;
294
295end TMTEST;
Note: See TracBrowser for help on using the repository browser.