VirtualBox

Changeset 56470 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Jun 17, 2015 8:50:35 AM (10 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
101087
Message:

Main: when reporting the guest CPU metrics, use the average between all VCPUs

Location:
trunk/src/VBox/Main
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/GuestImpl.h

    r55644 r56470  
    9595    HRESULT i_setStatistic(ULONG aCpuId, GUESTSTATTYPE enmType, ULONG aVal);
    9696    BOOL i_isPageFusionEnabled();
     97    void i_setCpuCount(uint32_t aCpus) { mCpus = aCpus; }
    9798    static HRESULT i_setErrorStatic(HRESULT aResultCode, const Utf8Str &aText)
    9899    {
     
    209210    uint64_t                        mNetStatLastTs;
    210211    ULONG                           mCurrentGuestStat[GUESTSTATTYPE_MAX];
     212    ULONG                           mCurrentGuestCpuUserStat[VMM_MAX_CPU_COUNT];
     213    ULONG                           mCurrentGuestCpuKernelStat[VMM_MAX_CPU_COUNT];
     214    ULONG                           mCurrentGuestCpuIdleStat[VMM_MAX_CPU_COUNT];
    211215    ULONG                           mVmValidStats;
    212216    BOOL                            mCollectVMMStats;
    213217    BOOL                            mfPageFusionEnabled;
     218    uint32_t                        mCpus;
    214219
    215220    const ComObjPtr<Console>        mParent;
  • trunk/src/VBox/Main/src-client/ConsoleImpl.cpp

    r56283 r56470  
    496496        rc = mGuest->init(this);
    497497        AssertComRCReturnRC(rc);
     498   
     499        ULONG cCpus = 1;
     500        rc = mMachine->COMGETTER(CPUCount)(&cCpus);
     501        mGuest->i_setCpuCount(cCpus);
    498502
    499503        unconst(mKeyboard).createObject();
  • trunk/src/VBox/Main/src-client/GuestImpl.cpp

    r56030 r56470  
    104104        mCurrentGuestStat[i] = 0;
    105105    mVmValidStats = pm::VMSTATMASK_NONE;
     106    RT_ZERO(mCurrentGuestCpuUserStat);
     107    RT_ZERO(mCurrentGuestCpuKernelStat);
     108    RT_ZERO(mCurrentGuestCpuIdleStat);
    106109
    107110    mMagic = GUEST_MAGIC;
     
    113116    if (SUCCEEDED(hr))
    114117        hr = mEventSource->init();
     118
     119    mCpus = 1;
    115120
    116121#ifdef VBOX_WITH_DRAG_AND_DROP
     
    702707    if (enmType >= GUESTSTATTYPE_MAX)
    703708        return E_INVALIDARG;
     709
     710    if (aCpuId < VMM_MAX_CPU_COUNT)
     711    {
     712        ULONG *paCpuStats;
     713        switch (enmType)
     714        {
     715            case GUESTSTATTYPE_CPUUSER:   paCpuStats = mCurrentGuestCpuUserStat;   break;
     716            case GUESTSTATTYPE_CPUKERNEL: paCpuStats = mCurrentGuestCpuKernelStat; break;
     717            case GUESTSTATTYPE_CPUIDLE:   paCpuStats = mCurrentGuestCpuIdleStat;   break;
     718            default:                      paCpuStats = NULL;                       break;
     719        }
     720        if (paCpuStats)
     721        {
     722            paCpuStats[aCpuId] = aVal;
     723            aVal = 0;
     724            for (uint32_t i = 0; i < mCpus && i < VMM_MAX_CPU_COUNT; i++)
     725                aVal += paCpuStats[i];
     726            aVal /= mCpus;
     727        }
     728    }
    704729
    705730    mCurrentGuestStat[enmType] = aVal;
     
    10801105    /** @todo Add VMMDEV_GUEST_SUPPORTS_GUEST_HOST_WINDOW_MAPPING */
    10811106}
    1082 
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette