VirtualBox

source: vbox/trunk/include/VBox/vmm/stam.mac@ 67180

Last change on this file since 67180 was 62476, checked in by vboxsync, 8 years ago

(C) 2016

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