VirtualBox

source: vbox/trunk/src/VBox/Main/include/PerformanceImpl.h@ 21686

Last change on this file since 21686 was 21686, checked in by vboxsync, 15 years ago

Main: back out r50147 until the locking is properly understood; will come back.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.2 KB
Line 
1/* $Id: PerformanceImpl.h 21686 2009-07-17 13:41:39Z vboxsync $ */
2
3/** @file
4 *
5 * VBox Performance COM class implementation.
6 */
7
8/*
9 * Copyright (C) 2008-2009 Sun Microsystems, Inc.
10 *
11 * This file is part of VirtualBox Open Source Edition (OSE), as
12 * available from http://www.virtualbox.org. This file is free software;
13 * you can redistribute it and/or modify it under the terms of the GNU
14 * General Public License (GPL) as published by the Free Software
15 * Foundation, in version 2 as it comes in the "COPYING" file of the
16 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
17 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
18 *
19 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
20 * Clara, CA 95054 USA or visit http://www.sun.com if you need
21 * additional information or have any questions.
22 */
23
24#ifndef ____H_PERFORMANCEIMPL
25#define ____H_PERFORMANCEIMPL
26
27#include "VirtualBoxBase.h"
28
29#include <VBox/com/com.h>
30#include <VBox/com/array.h>
31//#ifdef VBOX_WITH_RESOURCE_USAGE_API
32#include <iprt/timer.h>
33//#endif /* VBOX_WITH_RESOURCE_USAGE_API */
34
35#include <list>
36
37namespace pm
38{
39 class Metric;
40 class BaseMetric;
41 class CollectorHAL;
42}
43
44#undef min
45#undef max
46
47/* Each second we obtain new CPU load stats. */
48#define VBOX_USAGE_SAMPLER_MIN_INTERVAL 1000
49
50class Machine;
51class HostUSBDevice;
52
53class ATL_NO_VTABLE PerformanceMetric :
54 public VirtualBoxBaseNEXT,
55 public VirtualBoxSupportTranslation <PerformanceMetric>,
56 VBOX_SCRIPTABLE_IMPL(IPerformanceMetric)
57{
58public:
59
60 DECLARE_NOT_AGGREGATABLE (PerformanceMetric)
61
62 DECLARE_PROTECT_FINAL_CONSTRUCT()
63
64 BEGIN_COM_MAP (PerformanceMetric)
65 COM_INTERFACE_ENTRY (IPerformanceMetric)
66 COM_INTERFACE_ENTRY (IDispatch)
67 END_COM_MAP()
68
69 NS_DECL_ISUPPORTS
70
71 DECLARE_EMPTY_CTOR_DTOR (PerformanceMetric)
72
73 HRESULT FinalConstruct();
74 void FinalRelease();
75
76 // public initializer/uninitializer for internal purposes only
77 HRESULT init (pm::Metric *aMetric);
78 HRESULT init (pm::BaseMetric *aMetric);
79 void uninit();
80
81 // IPerformanceMetric properties
82 STDMETHOD(COMGETTER(MetricName)) (BSTR *aMetricName);
83 STDMETHOD(COMGETTER(Object)) (IUnknown **anObject);
84 STDMETHOD(COMGETTER(Description)) (BSTR *aDescription);
85 STDMETHOD(COMGETTER(Period)) (ULONG *aPeriod);
86 STDMETHOD(COMGETTER(Count)) (ULONG *aCount);
87 STDMETHOD(COMGETTER(Unit)) (BSTR *aUnit);
88 STDMETHOD(COMGETTER(MinimumValue)) (LONG *aMinValue);
89 STDMETHOD(COMGETTER(MaximumValue)) (LONG *aMaxValue);
90
91 // IPerformanceMetric methods
92
93 // public methods only for internal purposes
94
95 // public methods for internal purposes only
96 // (ensure there is a caller and a read lock before calling them!)
97
98private:
99
100 struct Data
101 {
102 /* Constructor. */
103 Data()
104 : period(0), count(0), min(0), max(0)
105 {
106 }
107
108 Bstr name;
109 ComPtr<IUnknown> object;
110 Bstr description;
111 ULONG period;
112 ULONG count;
113 Bstr unit;
114 LONG min;
115 LONG max;
116 };
117
118 Data m;
119};
120
121
122class ATL_NO_VTABLE PerformanceCollector :
123 public VirtualBoxBaseNEXT,
124 public VirtualBoxSupportErrorInfoImpl <PerformanceCollector, IPerformanceCollector>,
125 public VirtualBoxSupportTranslation <PerformanceCollector>,
126 VBOX_SCRIPTABLE_IMPL(IPerformanceCollector)
127{
128public:
129
130 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (PerformanceCollector)
131
132 DECLARE_NOT_AGGREGATABLE (PerformanceCollector)
133
134 DECLARE_PROTECT_FINAL_CONSTRUCT()
135
136 BEGIN_COM_MAP(PerformanceCollector)
137 COM_INTERFACE_ENTRY(ISupportErrorInfo)
138 COM_INTERFACE_ENTRY(IPerformanceCollector)
139 COM_INTERFACE_ENTRY(IDispatch)
140 END_COM_MAP()
141
142 NS_DECL_ISUPPORTS
143
144 DECLARE_EMPTY_CTOR_DTOR (PerformanceCollector)
145
146 HRESULT FinalConstruct();
147 void FinalRelease();
148
149 // public initializers/uninitializers only for internal purposes
150 HRESULT init();
151 void uninit();
152
153 // IPerformanceCollector properties
154 STDMETHOD(COMGETTER(MetricNames)) (ComSafeArrayOut (BSTR, metricNames));
155
156 // IPerformanceCollector methods
157 STDMETHOD(GetMetrics) (ComSafeArrayIn (IN_BSTR, metricNames),
158 ComSafeArrayIn (IUnknown *, objects),
159 ComSafeArrayOut (IPerformanceMetric *, outMetrics));
160 STDMETHOD(SetupMetrics) (ComSafeArrayIn (IN_BSTR, metricNames),
161 ComSafeArrayIn (IUnknown *, objects),
162 ULONG aPeriod, ULONG aCount,
163 ComSafeArrayOut (IPerformanceMetric *,
164 outMetrics));
165 STDMETHOD(EnableMetrics) (ComSafeArrayIn (IN_BSTR, metricNames),
166 ComSafeArrayIn (IUnknown *, objects),
167 ComSafeArrayOut (IPerformanceMetric *,
168 outMetrics));
169 STDMETHOD(DisableMetrics) (ComSafeArrayIn (IN_BSTR, metricNames),
170 ComSafeArrayIn (IUnknown *, objects),
171 ComSafeArrayOut (IPerformanceMetric *,
172 outMetrics));
173 STDMETHOD(QueryMetricsData) (ComSafeArrayIn (IN_BSTR, metricNames),
174 ComSafeArrayIn (IUnknown *, objects),
175 ComSafeArrayOut (BSTR, outMetricNames),
176 ComSafeArrayOut (IUnknown *, outObjects),
177 ComSafeArrayOut (BSTR, outUnits),
178 ComSafeArrayOut (ULONG, outScales),
179 ComSafeArrayOut (ULONG, outSequenceNumbers),
180 ComSafeArrayOut (ULONG, outDataIndices),
181 ComSafeArrayOut (ULONG, outDataLengths),
182 ComSafeArrayOut (LONG, outData));
183
184 // public methods only for internal purposes
185
186 void registerBaseMetric (pm::BaseMetric *baseMetric);
187 void registerMetric (pm::Metric *metric);
188 void unregisterBaseMetricsFor (const ComPtr <IUnknown> &object);
189 void unregisterMetricsFor (const ComPtr <IUnknown> &object);
190
191 void suspendSampling();
192 void resumeSampling();
193
194 // public methods for internal purposes only
195 // (ensure there is a caller and a read lock before calling them!)
196
197 pm::CollectorHAL *getHAL() { return m.hal; };
198
199 // for VirtualBoxSupportErrorInfoImpl
200 static const wchar_t *getComponentName() { return L"PerformanceCollector"; }
201
202private:
203 HRESULT toIPerformanceMetric(pm::Metric *src, IPerformanceMetric **dst);
204 HRESULT toIPerformanceMetric(pm::BaseMetric *src, IPerformanceMetric **dst);
205
206 static void staticSamplerCallback (RTTIMERLR hTimerLR, void *pvUser, uint64_t iTick);
207 void samplerCallback();
208
209 typedef std::list<pm::Metric*> MetricList;
210 typedef std::list<pm::BaseMetric*> BaseMetricList;
211
212 enum
213 {
214 MAGIC = 0xABBA1972u
215 };
216
217 unsigned int mMagic;
218
219 struct Data
220 {
221 Data() : hal(0) {};
222
223 BaseMetricList baseMetrics;
224 MetricList metrics;
225 RTTIMERLR sampler;
226 pm::CollectorHAL *hal;
227 };
228
229 Data m;
230};
231
232#endif //!____H_PERFORMANCEIMPL
233/* vi: set tabstop=4 shiftwidth=4 expandtab: */
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