Performance.cpp revision 30f7bd6bf198ae0489df375e5a17cb086acb30fb
/* $Id$ */
/** @file
*
* VBox Performance Classes implementation.
*/
/*
* Copyright (C) 2008 Sun Microsystems, Inc.
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
* Clara, CA 95054 USA or visit http://www.sun.com if you need
* additional information or have any questions.
*/
#include "Performance.h"
using namespace pm;
// Default factory
BaseMetric *MetricFactory::createHostCpuLoad(ComPtr<IUnknown> object, SubMetric *user, SubMetric *kernel, SubMetric *idle)
{
}
{
}
BaseMetric *MetricFactory::createHostRamUsage(ComPtr<IUnknown> object, SubMetric *total, SubMetric *used, SubMetric *available)
{
}
BaseMetric *MetricFactory::createMachineCpuLoad(ComPtr<IUnknown> object, RTPROCESS process, SubMetric *user, SubMetric *kernel)
{
}
BaseMetric *MetricFactory::createMachineRamUsage(ComPtr<IUnknown> object, RTPROCESS process, SubMetric *used)
{
}
// Linux factory
{
mHAL = new CollectorLinux();
}
BaseMetric *MetricFactoryLinux::createHostCpuLoad(ComPtr<IUnknown> object, SubMetric *user, SubMetric *kernel, SubMetric *idle)
{
}
BaseMetric *MetricFactoryLinux::createMachineCpuLoad(ComPtr<IUnknown> object, RTPROCESS process, SubMetric *user, SubMetric *kernel)
{
}
// Stubs for non-pure virtual methods
{
return E_NOTIMPL;
}
{
return E_NOTIMPL;
}
int CollectorHAL::getRawHostCpuLoad(unsigned long *user, unsigned long *kernel, unsigned long *idle)
{
return E_NOTIMPL;
}
int CollectorHAL::getRawProcessCpuLoad(RTPROCESS process, unsigned long *user, unsigned long *kernel)
{
return E_NOTIMPL;
}
// Collector HAL for Linux
#include <stdio.h>
int CollectorLinux::getRawHostCpuLoad(unsigned long *user, unsigned long *kernel, unsigned long *idle)
{
#ifdef RT_OS_LINUX
int rc = VINF_SUCCESS;
unsigned long nice;
if (f)
{
else
fclose(f);
}
else
return rc;
#else
return E_NOTIMPL;
#endif
}
int CollectorLinux::getRawProcessCpuLoad(RTPROCESS process, unsigned long *user, unsigned long *kernel)
{
#ifdef RT_OS_LINUX
int rc = VINF_SUCCESS;
char *pszName;
char c;
int iTmp;
unsigned uTmp;
unsigned long ulTmp;
//printf("Opening %s...\n", pszName);
if (f)
{
if (fscanf(f, "%d %s %c %d %d %d %d %d %u %lu %lu %lu %lu %lu %lu",
{
}
else
fclose(f);
}
else
return rc;
#else
return E_NOTIMPL;
#endif
}
{
return E_NOTIMPL;
}
int CollectorLinux::getHostMemoryUsage(unsigned long *total, unsigned long *used, unsigned long *available)
{
#ifdef RT_OS_LINUX
int rc = VINF_SUCCESS;
if (f)
{
if (processed == 4)
else
fclose(f);
}
else
return rc;
#else
return E_NOTIMPL;
#endif
}
{
return E_NOTIMPL;
}
{
if (isEnabled())
{
{
collect();
}
}
}
{
}
void HostCpuLoad::collect()
{
}
void HostCpuLoadRaw::collect()
{
if (RT_SUCCESS(rc))
{
}
}
{
}
void HostCpuMhz::collect()
{
unsigned long mhz;
if (RT_SUCCESS(rc))
}
{
}
void HostRamUsage::collect()
{
if (RT_SUCCESS(rc))
{
}
}
{
}
void MachineCpuLoad::collect()
{
if (RT_SUCCESS(rc))
{
}
}
void MachineCpuLoadRaw::collect()
{
unsigned long processUser, processKernel;
if (RT_SUCCESS(rc))
{
if (RT_SUCCESS(rc))
{
mUser->put(PM_CPU_LOAD_MULTIPLIER * (processUser - mProcessUserPrev) / (hostTotal - mHostTotalPrev));
mUser->put(PM_CPU_LOAD_MULTIPLIER * (processKernel - mProcessKernelPrev ) / (hostTotal - mHostTotalPrev));
}
}
}
{
}
void MachineRamUsage::collect()
{
unsigned long used;
if (RT_SUCCESS(rc))
}
{
if (mData)
mWrapped = false;
mEnd = 0;
}
unsigned long CircularBuffer::length()
{
}
{
if (mData)
{
{
mEnd = 0;
mWrapped = true;
}
}
}
{
if (mWrapped)
{
// Copy the wrapped part
if (mEnd)
}
else
}
{
}
{
unsigned long length;
unsigned long *tmpData;
if (length)
{
if (mAggregate)
{
*count = 1;
}
else
{
}
}
else
{
*count = 0;
*data = 0;
}
}
{
for (unsigned long i = 0; i < length; ++i)
}
const char * AggregateAvg::getName()
{
return "avg";
}
{
for (unsigned long i = 0; i < length; ++i)
return tmp;
}
const char * AggregateMin::getName()
{
return "min";
}
{
for (unsigned long i = 0; i < length; ++i)
return tmp;
}
const char * AggregateMax::getName()
{
return "max";
}
{
if (objectArray.isNull())
{
{
}
else
}
else
{
{
case 0:
break;
case 1:
break;
default:
break;
}
}
}
{
{
}
}
{
{
printf("...matching against(%p, %s)\n", static_cast<const IUnknown*> ((*it).first), (*it).second.c_str());
{
// Objects match, compare names
{
printf("...found!\n");
return true;
}
}
}
printf("...no matches!\n");
return false;
}