Changeset 9904 in vbox for trunk/src/VBox/Main/MachineImpl.cpp
- Timestamp:
- Jun 25, 2008 11:03:03 AM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Main/MachineImpl.cpp
r9900 r9904 378 378 AssertReturn (aConfigFile, E_INVALIDARG); 379 379 AssertReturn (aMode != Init_New || (aName != NULL && *aName != '\0'), 380 380 E_INVALIDARG); 381 381 AssertReturn (aMode != Init_Registered || aId != NULL, E_FAIL); 382 382 … … 497 497 } 498 498 499 #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; 509 } 510 #endif /* VBOX_WITH_RESOURCE_USAGE_API */ 511 499 512 LogFlowThisFunc (("mName='%ls', mRegistered=%RTbool, mAccessible=%RTbool " 500 513 "rc=%08X\n", … … 620 633 */ 621 634 AutoMultiWriteLock2 alock (mParent, this); 635 636 #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)); 644 } 645 #endif /* VBOX_WITH_RESOURCE_USAGE_API */ 622 646 623 647 if (!mData->mSession.mMachine.isNull()) … … 678 702 LogFlowThisFuncLeave(); 679 703 } 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 680 732 681 733 // IMachine properties … … 2792 2844 } 2793 2845 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) 2857 { 2858 #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); 2863 return S_OK; 2864 #else /* !VBOX_WITH_RESOURCE_USAGE_API */ 2865 return E_NOTIMPL; 2866 #endif /* !VBOX_WITH_RESOURCE_USAGE_API */ 2867 } 2868 2794 2869 2795 2870 // public methods for internal purposes … … 8531 8606 } 8532 8607 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 8533 8623 // public methods only for internal purposes 8534 8624 /////////////////////////////////////////////////////////////////////////////
Note:
See TracChangeset
for help on using the changeset viewer.