PerformanceImpl.h revision 615105a2b89b7dd89a76504e6a9b8e099704c0d9
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync/* $Id$ */
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync/** @file
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync *
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * VBox Performance COM Classes declaration.
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync */
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync/*
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * Copyright (C) 2008 Sun Microsystems, Inc.
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync *
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * available from http://www.virtualbox.org. This file is free software;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * you can redistribute it and/or modify it under the terms of the GNU
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * General Public License (GPL) as published by the Free Software
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync *
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync * additional information or have any questions.
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync */
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#ifndef ____H_PERFORMANCEIMPL
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#define ____H_PERFORMANCEIMPL
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#include "VirtualBoxBase.h"
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#include <VBox/com/com.h>
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#include <VBox/com/array.h>
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync//#ifdef VBOX_WITH_RESOURCE_USAGE_API
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync//#include <iprt/system.h>
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#include <iprt/timer.h>
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync//#endif /* VBOX_WITH_RESOURCE_USAGE_API */
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#include <list>
f2fedb6cbb946e9dd6d418b1472373395e2ac34fvboxsync#include <set>
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#include "Performance.h"
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync/* Each second we obtain new CPU load stats. */
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#define VBOX_USAGE_SAMPLER_MIN_INTERVAL 1000
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncclass Machine;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncclass HostUSBDevice;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncclass ATL_NO_VTABLE PerformanceMetric :
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public VirtualBoxBaseNEXT,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public VirtualBoxSupportTranslation <PerformanceMetric>,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public IPerformanceMetric
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync{
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncprivate:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync struct Data
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync {
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync /* Constructor. */
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync Data() { }
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync bool operator== (const Data &that) const
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync {
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync return this == &that;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync }
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync };
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncpublic:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_NOT_AGGREGATABLE (PerformanceMetric)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync BEGIN_COM_MAP (PerformanceMetric)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync COM_INTERFACE_ENTRY (IPerformanceMetric)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync END_COM_MAP()
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync NS_DECL_ISUPPORTS
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_EMPTY_CTOR_DTOR (PerformanceMetric)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync HRESULT FinalConstruct();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void FinalRelease();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public initializer/uninitializer for internal purposes only
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync HRESULT init (pm::Metric *aMetric);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void uninit();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // IPerformanceMetric properties
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync STDMETHOD(COMGETTER(MetricName)) (BSTR *aMetricName);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync STDMETHOD(COMGETTER(Object)) (IUnknown **anObject);
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(COMGETTER(Period)) (ULONG *aPeriod);
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(COMGETTER(Count)) (ULONG *aCount);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync STDMETHOD(COMGETTER(Unit)) (BSTR *aUnit);
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(COMGETTER(MinimumValue)) (LONG *aMinValue);
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(COMGETTER(MaximumValue)) (LONG *aMaxValue);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // IPerformanceMetric methods
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public methods only for internal purposes
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public methods for internal purposes only
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // (ensure there is a caller and a read lock before calling them!)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncprivate:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync pm::Metric *mMetric;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync};
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#if 0
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncclass ATL_NO_VTABLE PerformanceData :
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public VirtualBoxBaseNEXT,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public VirtualBoxSupportTranslation <PerformanceData>,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public IPerformanceData
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync{
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncprivate:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync struct Data
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync {
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync /* Constructor. */
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync Data() { }
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync bool operator== (const Data &that) const
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync {
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync return this == &that;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync }
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync };
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncpublic:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (PerformanceData)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_NOT_AGGREGATABLE (PerformanceData)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync BEGIN_COM_MAP(PerformanceData)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync COM_INTERFACE_ENTRY (ISupportErrorInfo)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync COM_INTERFACE_ENTRY (IPerformanceData)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync END_COM_MAP()
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync NS_DECL_ISUPPORTS
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_EMPTY_CTOR_DTOR (PerformanceData)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync HRESULT FinalConstruct();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void FinalRelease();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public initializer/uninitializer for internal purposes only
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync HRESULT init (cosnt BSTR aMetricName, IUnknown *anObject,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ULONG *data, ULONG aLength);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void uninit();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // IPerformanceData properties
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync STDMETHOD(COMGETTER(MetricName)) (BSTR *aMetricName);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync STDMETHOD(COMGETTER(Object)) (IUnknown **anObject);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync STDMETHOD(COMGETTER(Values)) (ComSafeArrayOut (LONG, values));
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // IPerformanceData methods
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public methods only for internal purposes
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncprivate:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync Bstr mMetricName;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync IUnknown *mObject;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ULONG *mData;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ULONG mLength;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync};
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#endif
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncclass ATL_NO_VTABLE PerformanceCollector :
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public VirtualBoxBaseNEXT,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public VirtualBoxSupportErrorInfoImpl <PerformanceCollector, IPerformanceCollector>,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public VirtualBoxSupportTranslation <PerformanceCollector>,
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync public IPerformanceCollector
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync{
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncpublic:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync VIRTUALBOXBASE_ADD_ERRORINFO_SUPPORT (PerformanceCollector)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_NOT_AGGREGATABLE (PerformanceCollector)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_PROTECT_FINAL_CONSTRUCT()
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync BEGIN_COM_MAP(PerformanceCollector)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync COM_INTERFACE_ENTRY(ISupportErrorInfo)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync COM_INTERFACE_ENTRY(IPerformanceCollector)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync END_COM_MAP()
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync NS_DECL_ISUPPORTS
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync DECLARE_EMPTY_CTOR_DTOR (PerformanceCollector)
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync HRESULT FinalConstruct();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void FinalRelease();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public initializers/uninitializers only for internal purposes
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync HRESULT init();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void uninit();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // IPerformanceCollector properties
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync STDMETHOD(COMGETTER(MetricNames)) (ComSafeArrayOut (BSTR, metricNames));
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // IPerformanceCollector methods
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(GetMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayIn (IUnknown *, objects),
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync ComSafeArrayOut (IPerformanceMetric *, outMetrics));
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync STDMETHOD(SetupMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayIn (IUnknown *, objects),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ULONG aPeriod, ULONG aCount);
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(EnableMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayIn (IUnknown *, objects));
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(DisableMetrics) (ComSafeArrayIn (INPTR BSTR, metricNames),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayIn (IUnknown *, objects));
30f7bd6bf198ae0489df375e5a17cb086acb30fbvboxsync STDMETHOD(QueryMetricsData) (ComSafeArrayIn (INPTR BSTR, metricNames),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayIn (IUnknown *, objects),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayOut (BSTR, outMetricNames),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayOut (IUnknown *, outObjects),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayOut (ULONG, outDataIndices),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayOut (ULONG, outDataLengths),
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync ComSafeArrayOut (LONG, outData));
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public methods only for internal purposes
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void registerBaseMetric (pm::BaseMetric *baseMetric);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void registerMetric (pm::Metric *metric);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void unregisterBaseMetricsFor (const ComPtr <IUnknown> &object);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void unregisterMetricsFor (const ComPtr <IUnknown> &object);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // public methods for internal purposes only
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // (ensure there is a caller and a read lock before calling them!)
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync pm::MetricFactory *getMetricFactory() { return m.factory; };
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync // for VirtualBoxSupportErrorInfoImpl
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync static const wchar_t *getComponentName() { return L"PerformanceCollector"; }
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsyncprivate:
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync static void staticSamplerCallback (PRTTIMER pTimer, void *pvUser, uint64_t iTick);
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync void samplerCallback();
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
f2fedb6cbb946e9dd6d418b1472373395e2ac34fvboxsync typedef std::list<pm::Metric*> MetricList;
f2fedb6cbb946e9dd6d418b1472373395e2ac34fvboxsync typedef std::list<pm::BaseMetric*> BaseMetricList;
f2fedb6cbb946e9dd6d418b1472373395e2ac34fvboxsync
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync enum
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync {
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync MAGIC = 0xABBA1972u
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync };
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync unsigned int mMagic;
6c5e2fff0e3fdfc7c3f3fb2e7b7ec8ebb2223cecvboxsync
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync struct Data
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync {
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync Data() : factory(0) {};
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync BaseMetricList baseMetrics;
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync MetricList metrics;
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync PRTTIMER sampler;
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync pm::MetricFactory *factory;
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync };
f2fedb6cbb946e9dd6d418b1472373395e2ac34fvboxsync
615105a2b89b7dd89a76504e6a9b8e099704c0d9vboxsync Data m;
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync};
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync
05c28d9d4557bed6e320dfee1acca69408bc3c15vboxsync#endif //!____H_PERFORMANCEIMPL