VirtualBox

source: vbox/trunk/src/VBox/VMM/include/STAMInternal.h@ 80507

Last change on this file since 80507 was 76585, checked in by vboxsync, 6 years ago

*: scm --fix-header-guard-endif

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id Revision
File size: 5.5 KB
Line 
1/* $Id: STAMInternal.h 76585 2019-01-01 06:31:29Z vboxsync $ */
2/** @file
3 * STAM Internal Header.
4 */
5
6/*
7 * Copyright (C) 2006-2019 Oracle Corporation
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
18#ifndef VMM_INCLUDED_SRC_include_STAMInternal_h
19#define VMM_INCLUDED_SRC_include_STAMInternal_h
20#ifndef RT_WITHOUT_PRAGMA_ONCE
21# pragma once
22#endif
23
24#include <VBox/cdefs.h>
25#include <VBox/types.h>
26#include <VBox/vmm/stam.h>
27#include <VBox/vmm/gvmm.h>
28#include <VBox/vmm/gmm.h>
29#include <iprt/list.h>
30#include <iprt/semaphore.h>
31
32
33
34RT_C_DECLS_BEGIN
35
36/** @defgroup grp_stam_int Internals
37 * @ingroup grp_stam
38 * @internal
39 * @{
40 */
41
42/** Enables the lookup tree.
43 * This is an optimization for speeding up registration as well as query. */
44#define STAM_WITH_LOOKUP_TREE
45
46
47/** Pointer to sample descriptor. */
48typedef struct STAMDESC *PSTAMDESC;
49/** Pointer to a sample lookup node. */
50typedef struct STAMLOOKUP *PSTAMLOOKUP;
51
52/**
53 * Sample lookup node.
54 */
55typedef struct STAMLOOKUP
56{
57 /** The parent lookup record. This is NULL for the root node. */
58 PSTAMLOOKUP pParent;
59 /** Array of children (using array for binary searching). */
60 PSTAMLOOKUP *papChildren;
61 /** Pointer to the description node, if any. */
62 PSTAMDESC pDesc;
63 /** Number of decentants with descriptors. (Use for freeing up sub-trees.) */
64 uint32_t cDescsInTree;
65 /** The number of children. */
66 uint16_t cChildren;
67 /** The index in the parent paChildren array. UINT16_MAX for the root node. */
68 uint16_t iParent;
69 /** The path offset. */
70 uint16_t off;
71 /** The size of the path component. */
72 uint16_t cch;
73 /** The name (variable size). */
74 char szName[1];
75} STAMLOOKUP;
76
77
78/**
79 * Sample descriptor.
80 */
81typedef struct STAMDESC
82{
83 /** Our entry in the big linear list. */
84 RTLISTNODE ListEntry;
85 /** Pointer to our lookup node. */
86 PSTAMLOOKUP pLookup;
87 /** Sample name. */
88 const char *pszName;
89 /** Sample type. */
90 STAMTYPE enmType;
91 /** Visibility type. */
92 STAMVISIBILITY enmVisibility;
93 /** Pointer to the sample data. */
94 union STAMDESCSAMPLEDATA
95 {
96 /** Counter. */
97 PSTAMCOUNTER pCounter;
98 /** Profile. */
99 PSTAMPROFILE pProfile;
100 /** Advanced profile. */
101 PSTAMPROFILEADV pProfileAdv;
102 /** Ratio, unsigned 32-bit. */
103 PSTAMRATIOU32 pRatioU32;
104 /** unsigned 8-bit. */
105 uint8_t *pu8;
106 /** unsigned 16-bit. */
107 uint16_t *pu16;
108 /** unsigned 32-bit. */
109 uint32_t *pu32;
110 /** unsigned 64-bit. */
111 uint64_t *pu64;
112 /** Simple void pointer. */
113 void *pv;
114 /** Boolean. */
115 bool *pf;
116 /** */
117 struct STAMDESCSAMPLEDATACALLBACKS
118 {
119 /** The same pointer. */
120 void *pvSample;
121 /** Pointer to the reset callback. */
122 PFNSTAMR3CALLBACKRESET pfnReset;
123 /** Pointer to the print callback. */
124 PFNSTAMR3CALLBACKPRINT pfnPrint;
125 } Callback;
126 } u;
127 /** Unit. */
128 STAMUNIT enmUnit;
129 /** The refresh group number (STAM_REFRESH_GRP_XXX). */
130 uint8_t iRefreshGroup;
131 /** Description. */
132 const char *pszDesc;
133} STAMDESC;
134
135
136/**
137 * STAM data kept in the UVM.
138 */
139typedef struct STAMUSERPERVM
140{
141 /** List of samples. */
142 RTLISTANCHOR List;
143 /** Root of the lookup tree. */
144 PSTAMLOOKUP pRoot;
145
146 /** RW Lock for the list and tree. */
147 RTSEMRW RWSem;
148
149 /** The copy of the GVMM statistics. */
150 GVMMSTATS GVMMStats;
151 /** The number of registered host CPU leaves. */
152 uint32_t cRegisteredHostCpus;
153
154 /** Explicit alignment padding. */
155 uint32_t uAlignment;
156 /** The copy of the GMM statistics. */
157 GMMSTATS GMMStats;
158} STAMUSERPERVM;
159#ifdef IN_RING3
160AssertCompileMemberAlignment(STAMUSERPERVM, GMMStats, 8);
161#endif
162
163/** Pointer to the STAM data kept in the UVM. */
164typedef STAMUSERPERVM *PSTAMUSERPERVM;
165
166
167/** Locks the sample descriptors for reading. */
168#define STAM_LOCK_RD(pUVM) do { int rcSem = RTSemRWRequestRead(pUVM->stam.s.RWSem, RT_INDEFINITE_WAIT); AssertRC(rcSem); } while (0)
169/** Locks the sample descriptors for writing. */
170#define STAM_LOCK_WR(pUVM) do { int rcSem = RTSemRWRequestWrite(pUVM->stam.s.RWSem, RT_INDEFINITE_WAIT); AssertRC(rcSem); } while (0)
171/** UnLocks the sample descriptors after reading. */
172#define STAM_UNLOCK_RD(pUVM) do { int rcSem = RTSemRWReleaseRead(pUVM->stam.s.RWSem); AssertRC(rcSem); } while (0)
173/** UnLocks the sample descriptors after writing. */
174#define STAM_UNLOCK_WR(pUVM) do { int rcSem = RTSemRWReleaseWrite(pUVM->stam.s.RWSem); AssertRC(rcSem); } while (0)
175/** Lazy initialization */
176#define STAM_LAZY_INIT(pUVM) do { } while (0)
177
178/** @} */
179
180RT_C_DECLS_END
181
182#endif /* !VMM_INCLUDED_SRC_include_STAMInternal_h */
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