VirtualBox

Ignore:
Timestamp:
Jun 25, 2008 6:18:13 PM (17 years ago)
Author:
vboxsync
Message:

Main: Corrected getProcessorUsage() impl (docs, spacing etc).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/MachineImpl.cpp

    r9904 r9937  
    147147    mSession.mPid = NIL_RTPROCESS;
    148148    mSession.mState = SessionState_Closed;
     149
     150#ifdef VBOX_WITH_RESOURCE_USAGE_API
     151    mUsageSampler = NULL;
     152#endif /* VBOX_WITH_RESOURCE_USAGE_API */
    149153}
    150154
     
    498502
    499503#ifdef VBOX_WITH_RESOURCE_USAGE_API
    500     /*
    501      * Start resource usage sampler.
    502      */
    503     printf("Creating sampling timer with Machine::staticSamplerCallback, this=%p\n", this);
    504     int result = RTTimerCreate(&m_pUsageSampler, VBOX_USAGE_SAMPLER_INTERVAL, Machine::staticSamplerCallback, this);
    505     if (RT_FAILURE(result))
    506     {
    507         AssertMsgFailed(("Failed to create resource usage sampling timer, rc=%d!\n", result));
    508         rc = E_FAIL;
     504    /* Start resource usage sampler */
     505    {
     506        vrc = RTTimerCreate (&mData->mUsageSampler, VBOX_USAGE_SAMPLER_INTERVAL,
     507                             Machine::UsageSamplerCallback, this);
     508        AssertMsgRC (vrc, ("Failed to create resource usage "
     509                            "sampling timer(%Rra)\n", vrc));
     510        if (RT_FAILURE (vrc))
     511            rc = E_FAIL;
    509512    }
    510513#endif /* VBOX_WITH_RESOURCE_USAGE_API */
     
    635638
    636639#ifdef VBOX_WITH_RESOURCE_USAGE_API
    637     /*
    638      * Destroy resource usage sampler.
    639      */
    640     int rc = RTTimerDestroy(m_pUsageSampler);
    641     if (RT_FAILURE(rc))
    642     {
    643         AssertMsgFailed(("Failed to destroy resource usage sampling timer, rc=%d!\n", rc));
     640    /* Destroy resource usage sampler */
     641    {
     642        int vrc = RTTimerDestroy (mData->mUsageSampler);
     643        AssertMsgRC (vrc, ("Failed to destroy resource usage "
     644                           "sampling timer (%Rra)\n", vrc));
    644645    }
    645646#endif /* VBOX_WITH_RESOURCE_USAGE_API */
     
    702703    LogFlowThisFuncLeave();
    703704}
    704 
    705 #ifdef VBOX_WITH_RESOURCE_USAGE_API
    706 void Machine::staticSamplerCallback(PRTTIMER pTimer, void *pvUser, uint64_t iTick)
    707 {
    708     ((Machine*)pvUser)->usageSamplerCallback();
    709 }
    710 
    711 void Machine::usageSamplerCallback()
    712 {
    713     //LogFlowThisFunc(("mData->mSession.mPid = %u &m_CpuStats = %p)\n", mData->mSession.mPid, &m_CpuStats));
    714     if (mData->mSession.mPid != NIL_RTPROCESS) {
    715         int rc = RTProcessGetProcessorUsageStats(mData->mSession.mPid, &m_CpuStats);
    716         if (RT_FAILURE(rc))
    717         {
    718             AssertMsgFailed(("Failed to get CPU stats, rc=%d!\n", rc));
    719         }
    720     }
    721     else
    722     {
    723         m_CpuStats.u32User   = 0;
    724         m_CpuStats.u32System = 0;
    725     }
    726 //  printf("Machine::usageSamplerCallback: user=%u%% system=%u%% &m_CpuStats=%p this=%p\n",
    727 //         m_CpuStats.u32User / 10000000, m_CpuStats.u32System / 10000000, &m_CpuStats, this);
    728     //printf("user=%.2f system=%.2f\n", m_CpuStats.u32User/10000000., m_CpuStats.u32System/10000000.);
    729 }
    730 #endif /* VBOX_WITH_RESOURCE_USAGE_API */
    731 
    732705
    733706// IMachine properties
     
    27112684 * session.  Otherwise read the value from machine extra data, where it is
    27122685 * stored between sessions.
    2713  * 
     2686 *
    27142687 * @note since the way this method is implemented depends on whether or not
    27152688 *       a session is currently open, we grab a write lock on the object, in
    27162689 *       order to ensure that the session state does not change during the
    27172690 *       call, and to force us to block if it is currently changing (either
    2718  *       way) between open and closed. 
     2691 *       way) between open and closed.
    27192692 */
    27202693STDMETHODIMP Machine::GetConfigRegistryValue (INPTR BSTR aKey, BSTR *aValue)
     
    27822755 * session.  Otherwise read the value from machine extra data, where it is
    27832756 * stored between sessions.
    2784  * 
     2757 *
    27852758 * @note since the way this method is implemented depends on whether or not
    27862759 *       a session is currently open, we grab a write lock on the object, in
    27872760 *       order to ensure that the session state does not change during the
    27882761 *       call, and to force us to block if it is currently changing (either
    2789  *       way) between open and closed. 
     2762 *       way) between open and closed.
    27902763 */
    27912764STDMETHODIMP Machine::SetConfigRegistryValue (INPTR BSTR aKey, INPTR BSTR aValue)
     
    28442817}
    28452818
    2846 /**
    2847  * Obtains the results of the latest measurement of CPU usage by
    2848  * this machine.
    2849  *
    2850  * @returns error code.
    2851  *
    2852  * @param   user      out   % of CPU time spent in user mode.
    2853  * @param   system    out   % of CPU time spent in kernel mode.
    2854  *
    2855  */
    2856 STDMETHODIMP Machine::GetProcessorUsage(ULONG *user, ULONG *system)
     2819STDMETHODIMP Machine::GetProcessorUsage (ULONG *aUser, ULONG *aSystem)
    28572820{
    28582821#ifdef VBOX_WITH_RESOURCE_USAGE_API
    2859     *user   = m_CpuStats.u32User;
    2860     *system = m_CpuStats.u32System;
    2861 //  printf("Machine::GetProcessorUsage: user=%u%% system=%u%% &m_CpuStats=%p this=%p\n",
    2862 //         m_CpuStats.u32User / 10000000, m_CpuStats.u32System / 10000000, &m_CpuStats, this);
     2822    if (aUser == NULL || aSystem == NULL)
     2823        return E_POINTER;
     2824
     2825//  LogFlowThisFunc (("user=%u%% system=%u%% &mData->mCpuStats=%p\n",
     2826//                    mData->mCpuStats.u32User / 10000000,
     2827//                    mData->mCpuStats.u32System / 10000000, &mData->mCpuStats));
     2828
     2829    *aUser   = mData->mCpuStats.u32User;
     2830    *aSystem = mData->mCpuStats.u32System;
    28632831    return S_OK;
    28642832#else /* !VBOX_WITH_RESOURCE_USAGE_API */
     
    73547322}
    73557323
     7324#ifdef VBOX_WITH_RESOURCE_USAGE_API
     7325
     7326/* static */
     7327void Machine::UsageSamplerCallback (PRTTIMER pTimer, void *pvUser, uint64_t iTick)
     7328{
     7329    AssertReturnVoid (pvUser != NULL);
     7330    static_cast <Machine *> (pvUser)->usageSamplerCallback();
     7331}
     7332
     7333void Machine::usageSamplerCallback()
     7334{
     7335//  LogFlowThisFunc (("mData->mSession.mPid = %u &mData->mCpuStats = %p)\n",
     7336//                    mData->mSession.mPid, &m_CpuStats));
     7337    if (mData->mSession.mPid != NIL_RTPROCESS)
     7338    {
     7339        int vrc = RTProcessGetProcessorUsageStats (mData->mSession.mPid,
     7340                                                   &mData->mCpuStats);
     7341        AssertMsgRC (vrc, ("Failed to get CPU stats (%Rra)\n", vrc));
     7342    }
     7343    else
     7344    {
     7345        mData->mCpuStats.u32User   = 0;
     7346        mData->mCpuStats.u32System = 0;
     7347    }
     7348//  LogFlowThisFunc (("user=%u%% system=%u%% &mData->mCpuStats=%p\n",
     7349//                    mData->mCpuStats.u32User / 10000000,
     7350//                    mData->mCpuStats.u32System / 10000000, &mData->mCpuStats));
     7351//  LogFlowThisFunc (("user=%.2f system=%.2f\n",
     7352//                    mData->mCpuStats.u32User/10000000., mData->mCpuStats.u32System/10000000.));
     7353}
     7354
     7355#endif /* VBOX_WITH_RESOURCE_USAGE_API */
     7356
    73567357/////////////////////////////////////////////////////////////////////////////
    73577358// SessionMachine class
     
    86068607}
    86078608
    8608 /**
    8609  * Obtains the results of the latest measurement of CPU usage by
    8610  * this machine.
    8611  *
    8612  * @returns error code.
    8613  *
    8614  * @param   user      out   % of CPU time spent in user mode.
    8615  * @param   system    out   % of CPU time spent in kernel mode.
    8616  *
    8617  */
    8618 STDMETHODIMP SessionMachine::GetProcessorUsage(ULONG *user, ULONG *system)
    8619 {
    8620     return mPeer->GetProcessorUsage(user, system);
    8621 }
    8622 
    86238609// public methods only for internal purposes
    86248610/////////////////////////////////////////////////////////////////////////////
Note: See TracChangeset for help on using the changeset viewer.

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