VirtualBox

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

Last change on this file since 14959 was 14949, checked in by vboxsync, 16 years ago

Appended vim modeline to set tabstop and expand tabs (in the way
suggested by our coding guidelines).

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 7.0 KB
Line 
1/* $Id: PerformanceImpl.h 14949 2008-12-03 15:17:16Z vboxsync $ */
2
3/** @file
4 *
5 * VBox Performance COM Classes declaration.
6 */
7
8/*
9 * Copyright (C) 2008 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//#include <set>
37
38#include "Performance.h"
39
40/* Each second we obtain new CPU load stats. */
41#define VBOX_USAGE_SAMPLER_MIN_INTERVAL 1000
42
43class Machine;
44class HostUSBDevice;
45
46class ATL_NO_VTABLE PerformanceMetric :
47 public VirtualBoxBaseNEXT,
48 public VirtualBoxSupportTranslation <PerformanceMetric>,
49 public IPerformanceMetric
50{
51public:
52
53 DECLARE_NOT_AGGREGATABLE (PerformanceMetric)
54
55 DECLARE_PROTECT_FINAL_CONSTRUCT()
56
57 BEGIN_COM_MAP (PerformanceMetric)
58 COM_INTERFACE_ENTRY (IPerformanceMetric)
59 END_COM_MAP()
60
61 NS_DECL_ISUPPORTS
62
63 DECLARE_EMPTY_CTOR_DTOR (PerformanceMetric)
64
65 HRESULT FinalConstruct();
66 void FinalRelease();
67
68 // public initializer/uninitializer for internal purposes only
69 HRESULT init (pm::Metric *aMetric);
70 HRESULT init (pm::BaseMetric *aMetric);
71 void uninit();
72
73 // IPerformanceMetric properties
74 STDMETHOD(COMGETTER(MetricName)) (BSTR *aMetricName);
75 STDMETHOD(COMGETTER(Object)) (IUnknown **anObject);
76 STDMETHOD(COMGETTER(Description)) (BSTR *aDescription);
77 STDMETHOD(COMGETTER(Period)) (ULONG *aPeriod);
78 STDMETHOD(COMGETTER(Count)) (ULONG *aCount);
79 STDMETHOD(COMGETTER(Unit)) (BSTR *aUnit);
80 STDMETHOD(COMGETTER(MinimumValue)) (LONG *aMinValue);
81 STDMETHOD(COMGETTER(MaximumValue)) (LONG *aMaxValue);
82
83 // IPerformanceMetric methods
84
85 // public methods only for internal purposes
86
87 // public methods for internal purposes only
88 // (ensure there is a caller and a read lock before calling them!)
89
90private:
91
92 struct Data
93 {
94 /* Constructor. */
95 Data() : period(0), count(0), min(0), max(0) { }
96
97 Bstr name;
98 ComPtr<IUnknown> object;
99 Bstr description;
100 ULONG period;
101 ULONG count;
102 Bstr unit;
103 LONG min;
104 LONG max;
105 };
106
107 Data m;
108};
109
110
111class ATL_NO_VTABLE PerformanceCollector :
112 public VirtualBoxBaseNEXT,
113 public VirtualBoxSupportErrorInfoImpl <PerformanceCollector, IPerformanceCollector>,
114 public VirtualBoxSupportTranslation <PerformanceCollector>,
115 public IPerformanceCollector
116{
117public:
118
119 VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (PerformanceCollector)
120
121 DECLARE_NOT_AGGREGATABLE (PerformanceCollector)
122
123 DECLARE_PROTECT_FINAL_CONSTRUCT()
124
125 BEGIN_COM_MAP(PerformanceCollector)
126 COM_INTERFACE_ENTRY(ISupportErrorInfo)
127 COM_INTERFACE_ENTRY(IPerformanceCollector)
128 END_COM_MAP()
129
130 NS_DECL_ISUPPORTS
131
132 DECLARE_EMPTY_CTOR_DTOR (PerformanceCollector)
133
134 HRESULT FinalConstruct();
135 void FinalRelease();
136
137 // public initializers/uninitializers only for internal purposes
138 HRESULT init();
139 void uninit();
140
141 // IPerformanceCollector properties
142 STDMETHOD(COMGETTER(MetricNames)) (ComSafeArrayOut (BSTR, metricNames));
143
144 // IPerformanceCollector methods
145 STDMETHOD(GetMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
146 ComSafeArrayIn (IUnknown *, objects),
147 ComSafeArrayOut (IPerformanceMetric *, outMetrics));
148 STDMETHOD(SetupMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
149 ComSafeArrayIn (IUnknown *, objects),
150 ULONG aPeriod, ULONG aCount,
151 ComSafeArrayOut (IPerformanceMetric *,
152 outMetrics));
153 STDMETHOD(EnableMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
154 ComSafeArrayIn (IUnknown *, objects),
155 ComSafeArrayOut (IPerformanceMetric *,
156 outMetrics));
157 STDMETHOD(DisableMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
158 ComSafeArrayIn (IUnknown *, objects),
159 ComSafeArrayOut (IPerformanceMetric *,
160 outMetrics));
161 STDMETHOD(QueryMetricsData) (ComSafeArrayIn (INPTR BSTR, metricNames),
162 ComSafeArrayIn (IUnknown *, objects),
163 ComSafeArrayOut (BSTR, outMetricNames),
164 ComSafeArrayOut (IUnknown *, outObjects),
165 ComSafeArrayOut (BSTR, outUnits),
166 ComSafeArrayOut (ULONG, outScales),
167 ComSafeArrayOut (ULONG, outSequenceNumbers),
168 ComSafeArrayOut (ULONG, outDataIndices),
169 ComSafeArrayOut (ULONG, outDataLengths),
170 ComSafeArrayOut (LONG, outData));
171
172 // public methods only for internal purposes
173
174 void registerBaseMetric (pm::BaseMetric *baseMetric);
175 void registerMetric (pm::Metric *metric);
176 void unregisterBaseMetricsFor (const ComPtr <IUnknown> &object);
177 void unregisterMetricsFor (const ComPtr <IUnknown> &object);
178
179 // public methods for internal purposes only
180 // (ensure there is a caller and a read lock before calling them!)
181
182 pm::CollectorHAL *getHAL() { return m.hal; };
183
184 // for VirtualBoxSupportErrorInfoImpl
185 static const wchar_t *getComponentName() { return L"PerformanceCollector"; }
186
187private:
188 HRESULT toIPerformanceMetric(pm::Metric *src, IPerformanceMetric **dst);
189 HRESULT toIPerformanceMetric(pm::BaseMetric *src, IPerformanceMetric **dst);
190
191 static void staticSamplerCallback (RTTIMERLR hTimerLR, void *pvUser, uint64_t iTick);
192 void samplerCallback();
193
194 typedef std::list<pm::Metric*> MetricList;
195 typedef std::list<pm::BaseMetric*> BaseMetricList;
196
197 enum
198 {
199 MAGIC = 0xABBA1972u
200 };
201
202 unsigned int mMagic;
203
204 struct Data
205 {
206 Data() : hal(0) {};
207
208 BaseMetricList baseMetrics;
209 MetricList metrics;
210 RTTIMERLR sampler;
211 pm::CollectorHAL *hal;
212 };
213
214 Data m;
215};
216
217#endif //!____H_PERFORMANCEIMPL
218/* 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