VirtualBox

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

Last change on this file since 2138 was 1, checked in by vboxsync, 55 years ago

import

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