PerformanceImpl.cpp revision f72cbd6a549c34992fa79cce84600fe2b92b3299
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * VBox Performance API COM Classes implementation
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Copyright (C) 2008 Sun Microsystems, Inc.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * available from http://www.virtualbox.org. This file is free software;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * you can redistribute it and/or modify it under the terms of the GNU
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * General Public License (GPL) as published by the Free Software
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * additional information or have any questions.
864051af8bf1aae6d2b5c52529b348234f22541dvboxsync////////////////////////////////////////////////////////////////////////////////
022e56bff837db399121bc76e4f404a6cd959d6evboxsync// PerformanceCollector class
864051af8bf1aae6d2b5c52529b348234f22541dvboxsync////////////////////////////////////////////////////////////////////////////////
022e56bff837db399121bc76e4f404a6cd959d6evboxsync// constructor / destructor
022e56bff837db399121bc76e4f404a6cd959d6evboxsync////////////////////////////////////////////////////////////////////////////////
022e56bff837db399121bc76e4f404a6cd959d6evboxsyncPerformanceCollector::PerformanceCollector() : mMagic(0) {}
864051af8bf1aae6d2b5c52529b348234f22541dvboxsync// public initializer/uninitializer for internal purposes only
c6ccc50e63b794d6ef52f52de638eeb08c61417evboxsync////////////////////////////////////////////////////////////////////////////////
864051af8bf1aae6d2b5c52529b348234f22541dvboxsync * Initializes the PerformanceCollector object.
864051af8bf1aae6d2b5c52529b348234f22541dvboxsync /* Enclose the state transition NotReady->InInit->Ready */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Let the sampler know it gets a valid collector. */
864051af8bf1aae6d2b5c52529b348234f22541dvboxsync /* Start resource usage sampler */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync int vrc = RTTimerLRCreate (&m.sampler, VBOX_USAGE_SAMPLER_MIN_INTERVAL,
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync &PerformanceCollector::staticSamplerCallback, this);
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync AssertMsgRC (vrc, ("Failed to create resource usage "
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Uninitializes the PerformanceCollector object.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync * Called either from FinalRelease() or by the parent when it gets destroyed.
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Enclose the state transition Ready->InUninit->NotReady */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync /* Destroy resource usage sampler */
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync AssertMsgRC (vrc, ("Failed to destroy resource usage "
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync //delete m.factory;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync //m.factory = NULL;
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync// IPerformanceCollector properties
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync////////////////////////////////////////////////////////////////////////////////
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncPerformanceCollector::COMGETTER(MetricNames) (ComSafeArrayOut (BSTR, theMetricNames))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync com::SafeArray <BSTR> metricNames(RT_ELEMENTS(gMetricNames));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (size_t i = 0; i < RT_ELEMENTS(gMetricNames); i++)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync //gMetricNames.detachTo(ComSafeArrayOutArg (theMetricNames));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync metricNames.detachTo (ComSafeArrayOutArg (theMetricNames));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync// IPerformanceCollector methods
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync////////////////////////////////////////////////////////////////////////////////
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncHRESULT PerformanceCollector::toIPerformanceMetric(pm::Metric *src, IPerformanceMetric **dst)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncHRESULT PerformanceCollector::toIPerformanceMetric(pm::BaseMetric *src, IPerformanceMetric **dst)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncPerformanceCollector::GetMetrics (ComSafeArrayIn (IN_BSTR, metricNames),
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync ComSafeArrayOut (IPerformanceMetric *, outMetrics))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync //LogFlowThisFunc (("mState=%d, mType=%d\n", mState, mType));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pm::Filter filter (ComSafeArrayInArg (metricNames),
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync for (it = m.metrics.begin(); it != m.metrics.end(); ++it)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync if (filter.match ((*it)->getObject(), (*it)->getName()))
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync com::SafeIfaceArray<IPerformanceMetric> retMetrics (filteredMetrics.size());
81b3101ea5e60964f67c97185bbd43dbf75c5ab5vboxsync for (it = filteredMetrics.begin(); it != filteredMetrics.end(); ++it)
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync LogFlow (("PerformanceCollector::GetMetrics() store a metric at "
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync "retMetrics[%d]...\n", i));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync retMetrics.detachTo (ComSafeArrayOutArg(outMetrics));
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsyncPerformanceCollector::SetupMetrics (ComSafeArrayIn (IN_BSTR, metricNames),
e0e0c19eefceaf5d4ec40f9466b58a771f50e799vboxsync pm::Filter filter (ComSafeArrayInArg (metricNames),
return rc;
return rc;
return rc;
return S_OK;
LogAleksey(("{%p} " LOG_FN_FMT ": obj=%p name=%s\n", this, __PRETTY_FUNCTION__, (void *)baseMetric->getObject(), baseMetric->getName()));
LogAleksey(("{%p} " LOG_FN_FMT ": obj=%p name=%s\n", this, __PRETTY_FUNCTION__, (void *)metric->getObject(), metric->getName()));
LogAleksey(("{%p} " LOG_FN_FMT ": before remove_if: m.baseMetrics.size()=%d\n", this, __PRETTY_FUNCTION__, m.baseMetrics.size()));
LogAleksey(("{%p} " LOG_FN_FMT ": after remove_if: m.baseMetrics.size()=%d\n", this, __PRETTY_FUNCTION__, m.baseMetrics.size()));
return S_OK;
uninit ();
// public initializer/uninitializer for internal purposes only
return S_OK;
return S_OK;
return S_OK;
return S_OK;
return S_OK;
return S_OK;
return S_OK;
return S_OK;
return S_OK;
return S_OK;