VirtualBox

source: vbox/trunk/include/VBox/stam.mac@ 16898

Last change on this file since 16898 was 8155, checked in by vboxsync, 17 years ago

The Big Sun Rebranding Header Change

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.2 KB
Line 
1;; @file
2;
3; STAM - Statistics Manager.
4;
5
6;
7; Copyright (C) 2006-2007 Sun Microsystems, Inc.
8;
9; This file is part of VirtualBox Open Source Edition (OSE), as
10; available from http://www.virtualbox.org. This file is free software;
11; you can redistribute it and/or modify it under the terms of the GNU
12; General Public License (GPL) as published by the Free Software
13; Foundation, in version 2 as it comes in the "COPYING" file of the
14; VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15; hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16;
17; The contents of this file may alternatively be used under the terms
18; of the Common Development and Distribution License Version 1.0
19; (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20; VirtualBox OSE distribution, in which case the provisions of the
21; CDDL are applicable instead of those of the GPL.
22;
23; You may elect to license modified versions of this file under the
24; terms and conditions of either the GPL or the CDDL or both.
25;
26; Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
27; Clara, CA 95054 USA or visit http://www.sun.com if you need
28; additional information or have any questions.
29;
30
31%ifndef __VBox_stam_mac__
32%define __VBox_stam_mac__
33
34
35%ifndef VBOX_WITH_STATISTICS
36 %ifdef DEBUG
37 %define VBOX_WITH_STATISTICS
38 %endif
39%endif
40
41
42
43;;
44; Counter sample - STAMTYPE_COUNTER.
45struc STAMCOUNTER
46 .c resd 2
47endstruc
48
49;;
50; Increments a counter sample by one.
51; @param %1 Pointer to the STAMCOUNTER structure to operate on.
52%macro STAM32_COUNTER_INC 1
53%ifdef VBOX_WITH_STATISTICS
54 push ebx
55 mov ebx, %1
56 inc dword [ebx + STAMCOUNTER.c]
57 adc dword [ebx + STAMCOUNTER.c + 1], byte 0
58 pop ebx
59%endif
60%endmacro
61
62%macro STAM64_COUNTER_INC 1
63%ifdef VBOX_WITH_STATISTICS
64 push rbx
65 mov rbx, %1
66 inc qword [rbx + STAMCOUNTER.c]
67 pop rbx
68%endif
69%endmacro
70
71%macro STAM_COUNTER_INC 1
72%ifdef VBOX_WITH_STATISTICS
73 %ifdef RT_ARCH_AMD64
74 STAM64_COUNTER_INC %1
75 %else
76 STAM32_COUNTER_INC %1
77 %endif
78%endif
79%endmacro
80
81
82;;
83; Increments a counter sample by a value.
84;
85; @param %1 Pointer to the STAMCOUNTER structure to operate on.
86; @param %2 The value to add to the counter.
87%macro STAM32_COUNTER_ADD 2
88%ifdef VBOX_WITH_STATISTICS
89 push ebx
90 mov ebx, %1
91 push eax
92 mov eax, %2
93
94 add [ebx + STAMCOUNTER.c], eax
95 adc dword [ebx + STAMCOUNTER.c], byte 0
96
97 pop eax
98 pop ebx
99%endif
100%endmacro
101
102%macro STAM64_COUNTER_ADD 2
103%ifdef VBOX_WITH_STATISTICS
104 push rbx
105 mov rbx, %1
106 push rax
107 mov rax, %2
108
109 add [rbx + STAMCOUNTER.c], rax
110
111 pop rax
112 pop rbx
113%endif
114%endmacro
115
116%macro STAM_COUNTER_ADD 2
117%ifdef VBOX_WITH_STATISTICS
118 %ifdef RT_ARCH_AMD64
119 STAM64_COUNTER_ADD %1, %2
120 %else
121 STAM32_COUNTER_ADD %1, %2
122 %endif
123%endif
124%endmacro
125
126
127;;
128; Profiling sample - STAMTYPE_PROFILE.
129struc STAMPROFILE
130 .cPeriods resd 2
131 .cTicks resd 2
132 .cTicksMax resd 2
133 .cTicksMin resd 2
134endstruc
135
136
137;;
138; Samples the start time of a profiling period.
139;
140; @param %1 Pointer to somewhere one can store a 64-bit timestamp until STAM_PROFILE_STOPP
141%macro STAM32_PROFILE_START 1
142%ifdef VBOX_WITH_STATISTICS
143 push ebx
144 mov ebx, %1
145 push eax
146 push edx
147
148 rdtsc
149 mov [ebx], eax
150 mov [ebx + 4], edx
151
152 pop edx
153 pop eax
154 pop ebx
155%endif
156%endmacro
157
158%macro STAM64_PROFILE_START 1
159%ifdef VBOX_WITH_STATISTICS
160 push rbx
161 mov rbx, %1
162 push rax
163 push rdx
164
165 rdtsc
166 mov [rbx], eax
167 mov [rbx + 4], edx
168
169 pop rdx
170 pop rax
171 pop rbx
172%endif
173%endmacro
174
175%macro STAM_PROFILE_START 1
176%ifdef VBOX_WITH_STATISTICS
177 %ifdef RT_ARCH_AMD64
178 STAM64_PROFILE_START %1
179 %else
180 STAM32_PROFILE_START %1
181 %endif
182%endif
183%endmacro
184
185
186;;
187; Samples the stop time of a profiling period and updates the sample.
188;
189; @param %1 Pointer to the STAMPROFILE structure to operate on.
190; @param %2 Pointer to where the 64-bit timestamp from STAM_PROFILE_START was stored.
191%macro STAM32_PROFILE_STOP 2
192%ifdef VBOX_WITH_STATISTICS
193 push ebx
194 mov ebx, %1
195 push eax
196 push edx
197
198 ; calc cTicks
199 push ecx
200 mov ecx, %2
201 rdtsc
202 sub eax, [ecx]
203 sbb edx, [ecx + 4]
204 pop ecx
205
206 ; update STAMPROFILE.cTicks
207 add [ebx + STAMPROFILE.cTicks], eax
208 adc [ebx + STAMPROFILE.cTicks + 4], edx
209 ; update STAMPROFILE.cPeriods
210 inc dword [ebx + STAMPROFILE.cPeriods]
211 adc dword [ebx + STAMPROFILE.cPeriods + 4], byte 0
212
213 ; update max?
214 cmp edx, [ebx + STAMPROFILE.cTicksMax + 4]
215 jb short %%not_update_max
216 ja short %%update_max
217 cmp eax, [ebx + STAMPROFILE.cTicksMax]
218 jbe short %%not_update_max
219%%update_max:
220 mov [ebx + STAMPROFILE.cTicksMax], eax
221 mov [ebx + STAMPROFILE.cTicksMax + 4], edx
222%%not_update_max:
223
224 ; update min?
225 cmp edx, [ebx + STAMPROFILE.cTicksMin + 4]
226 ja short %%not_update_min
227 jb short %%update_min
228 cmp eax, [ebx + STAMPROFILE.cTicksMin]
229 jae short %%not_update_min
230%%update_min:
231 mov [ebx + STAMPROFILE.cTicksMin], eax
232 mov [ebx + STAMPROFILE.cTicksMin + 4], edx
233%%not_update_min:
234
235 pop edx
236 pop eax
237 pop ebx
238%endif
239%endmacro
240
241%macro STAM64_PROFILE_STOP 2
242%ifdef VBOX_WITH_STATISTICS
243 push rbx
244 mov rbx, %1
245 push rax
246 push rdx
247
248 ; calc cTicks
249 push rcx
250 mov rcx, %2
251 rdtsc
252 sub rax, [ecx]
253 sbb rdx, [ecx + 4]
254 pop rcx
255
256 ; update STAMPROFILE.cTicks
257 shl rdx, 32
258 or rdx, rax
259 add [rbx + STAMPROFILE.cTicks], rdx
260 ; update STAMPROFILE.cPeriods
261 inc qword [rbx + STAMPROFILE.cPeriods]
262
263 ; update max?
264 cmp rdx, [rbx + STAMPROFILE.cTicksMax]
265 jbe short %%not_update_max
266 mov [rbx + STAMPROFILE.cTicksMax], rdx
267%%not_update_max:
268
269 ; update min?
270 cmp rdx, [rbx + STAMPROFILE.cTicksMin]
271 jae short %%not_update_min
272 mov [rbx + STAMPROFILE.cTicksMin], rax
273%%not_update_min:
274
275 pop rdx
276 pop rax
277 pop rbx
278%endif
279%endmacro
280
281%macro STAM_PROFILE_STOP 2
282%ifdef VBOX_WITH_STATISTICS
283 %ifdef RT_ARCH_AMD64
284 STAM64_PROFILE_STOP %1, %2
285 %else
286 STAM32_PROFILE_STOP %1, %2
287 %endif
288%endif
289%endmacro
290
291
292
293struc STAMPROFILEADV
294 .cPeriods resd 2
295 .cTicks resd 2
296 .cTicksMax resd 2
297 .cTicksMin resd 2
298 .tsStart resd 2
299endstruc
300
301
302;;
303; Samples the start time of a profiling period.
304;
305; @param %1 Pointer to the STAMPROFILEADV structure to operate on.
306%macro STAM32_PROFILE_ADV_START 1
307%ifdef VBOX_WITH_STATISTICS
308 push ecx
309 mov ecx, %1
310 lea ecx, [ecx + STAMPROFILEADV.tsStart]
311 STAM32_PROFILE_START ecx
312 pop ecx
313%endif
314%endmacro
315
316%macro STAM64_PROFILE_ADV_START 1
317%ifdef VBOX_WITH_STATISTICS
318 push rcx
319 mov rcx, %1
320 lea rcx, [rcx + STAMPROFILEADV.tsStart]
321 STAM64_PROFILE_START rcx
322 pop rcx
323%endif
324%endmacro
325
326%macro STAM_PROFILE_ADV_START 1
327%ifdef VBOX_WITH_STATISTICS
328 %ifdef RT_ARCH_AMD64
329 STAM64_PROFILE_ADV_START %1
330 %else
331 STAM32_PROFILE_ADV_START %1
332 %endif
333%endif
334%endmacro
335
336
337;;
338; Samples the stop time of a profiling period and updates the sample.
339;
340; @param %1 Pointer to the STAMPROFILEADV structure to operate on.
341
342%macro STAM32_PROFILE_ADV_STOP 1
343%ifdef VBOX_WITH_STATISTICS
344 push ecx
345 mov ecx, %1
346 lea ecx, [ecx + STAMPROFILEADV.tsStart]
347 cmp dword [ecx], byte 0
348 jnz short %%doit
349 cmp dword [ecx + 4], byte 0
350 jz short %%dont
351%%doit:
352 STAM32_PROFILE_STOP %1, ecx
353%%dont:
354 mov dword [ecx], 0
355 mov dword [ecx + 4], 0
356 pop ecx
357%endif
358%endmacro
359
360%macro STAM64_PROFILE_ADV_STOP 1
361%ifdef VBOX_WITH_STATISTICS
362 push rcx
363 mov rcx, %1
364 lea rcx, [rcx + STAMPROFILEADV.tsStart]
365 cmp qword [rcx], byte 0
366 jz short %%dont
367%%doit:
368 STAM64_PROFILE_STOP %1, rcx
369%%dont:
370 mov qword [rcx], 0
371 pop rcx
372%endif
373%endmacro
374
375%macro STAM_PROFILE_ADV_STOP 1
376%ifdef VBOX_WITH_STATISTICS
377 %ifdef RT_ARCH_AMD64
378 STAM64_PROFILE_ADV_STOP %1
379 %else
380 STAM32_PROFILE_ADV_STOP %1
381 %endif
382%endif
383%endmacro
384
385
386
387%endif
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette