Return cached data instead of sleeping in CpuWrapperMac (shaves 2s off WebrtcMediaEngine creation time on Mac).
Review URL: http://webrtc-codereview.appspot.com/226005 git-svn-id: http://webrtc.googlecode.com/svn/trunk@804 4adac7df-926f-26a2-2b94-8c16560cd09d
This commit is contained in:
parent
0a9c318c9f
commit
0d0037c2fd
@ -17,7 +17,12 @@
|
||||
#include "tick_util.h"
|
||||
|
||||
namespace webrtc {
|
||||
CpuWrapperMac::CpuWrapperMac() : _cpuUsage(NULL)
|
||||
CpuWrapperMac::CpuWrapperMac()
|
||||
: _cpuCount(0),
|
||||
_cpuUsage(NULL),
|
||||
_totalCpuUsage(0),
|
||||
_lastTickCount(NULL),
|
||||
_lastTime(0)
|
||||
{
|
||||
natural_t cpuCount;
|
||||
processor_info_array_t infoArray;
|
||||
@ -33,6 +38,7 @@ CpuWrapperMac::CpuWrapperMac() : _cpuUsage(NULL)
|
||||
return;
|
||||
}
|
||||
|
||||
_cpuCount = cpuCount;
|
||||
_cpuUsage = new WebRtc_UWord32[cpuCount];
|
||||
_lastTickCount = new WebRtc_Word64[cpuCount];
|
||||
_lastTime = TickTime::MillisecondTimestamp();
|
||||
@ -47,14 +53,15 @@ CpuWrapperMac::CpuWrapperMac() : _cpuUsage(NULL)
|
||||
ticks += cpuLoadInfo[cpu].cpu_ticks[state];
|
||||
}
|
||||
_lastTickCount[cpu] = ticks;
|
||||
_cpuUsage[cpu] = 0;
|
||||
}
|
||||
vm_deallocate(mach_task_self(), (vm_address_t)infoArray, infoCount);
|
||||
}
|
||||
|
||||
CpuWrapperMac::~CpuWrapperMac()
|
||||
{
|
||||
delete _cpuUsage;
|
||||
delete _lastTickCount;
|
||||
delete[] _cpuUsage;
|
||||
delete[] _lastTickCount;
|
||||
}
|
||||
|
||||
WebRtc_Word32 CpuWrapperMac::CpuUsage()
|
||||
@ -68,29 +75,35 @@ WebRtc_Word32
|
||||
CpuWrapperMac::CpuUsageMultiCore(WebRtc_UWord32& numCores,
|
||||
WebRtc_UWord32*& array)
|
||||
{
|
||||
natural_t cpuCount;
|
||||
processor_info_array_t infoArray;
|
||||
mach_msg_type_number_t infoCount;
|
||||
|
||||
// sanity check
|
||||
if(_cpuUsage == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
WebRtc_Word64 now = TickTime::MillisecondTimestamp();
|
||||
WebRtc_Word64 timeDiffMS = now - _lastTime;
|
||||
// TODO(hellner) why block here? Why not just return the old
|
||||
// value? Is this behavior consistent across all
|
||||
// platforms?
|
||||
// Make sure that at least 500 ms pass between calls.
|
||||
if(timeDiffMS < 500)
|
||||
if(timeDiffMS >= 500)
|
||||
{
|
||||
usleep((500-timeDiffMS)*1000);
|
||||
return CpuUsageMultiCore(numCores, array);
|
||||
if(Update(timeDiffMS) != 0)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
_lastTime = now;
|
||||
}
|
||||
_lastTime = now;
|
||||
|
||||
numCores = _cpuCount;
|
||||
array = _cpuUsage;
|
||||
return _totalCpuUsage / _cpuCount;
|
||||
}
|
||||
|
||||
kern_return_t error = host_processor_info(mach_host_self(),
|
||||
WebRtc_Word32 CpuWrapperMac::Update(WebRtc_Word64 timeDiffMS)
|
||||
{
|
||||
natural_t cpuCount;
|
||||
processor_info_array_t infoArray;
|
||||
mach_msg_type_number_t infoCount;
|
||||
|
||||
kern_return_t error = host_processor_info(mach_host_self(),
|
||||
PROCESSOR_CPU_LOAD_INFO,
|
||||
&cpuCount,
|
||||
&infoArray,
|
||||
@ -103,7 +116,7 @@ CpuWrapperMac::CpuUsageMultiCore(WebRtc_UWord32& numCores,
|
||||
processor_cpu_load_info_data_t* cpuLoadInfo =
|
||||
(processor_cpu_load_info_data_t*) infoArray;
|
||||
|
||||
WebRtc_Word32 totalCpuUsage = 0;
|
||||
_totalCpuUsage = 0;
|
||||
for (unsigned int cpu = 0; cpu < cpuCount; cpu++)
|
||||
{
|
||||
WebRtc_Word64 ticks = 0;
|
||||
@ -120,13 +133,11 @@ CpuWrapperMac::CpuUsageMultiCore(WebRtc_UWord32& numCores,
|
||||
timeDiffMS);
|
||||
}
|
||||
_lastTickCount[cpu] = ticks;
|
||||
totalCpuUsage += _cpuUsage[cpu];
|
||||
_totalCpuUsage += _cpuUsage[cpu];
|
||||
}
|
||||
|
||||
vm_deallocate(mach_task_self(), (vm_address_t)infoArray, infoCount);
|
||||
|
||||
numCores = cpuCount;
|
||||
array = _cpuUsage;
|
||||
return totalCpuUsage/cpuCount;
|
||||
return 0;
|
||||
}
|
||||
} // namespace webrtc
|
||||
|
@ -35,7 +35,11 @@ public:
|
||||
virtual void Stop() {}
|
||||
|
||||
private:
|
||||
WebRtc_Word32 Update(WebRtc_Word64 timeDiffMS);
|
||||
|
||||
WebRtc_UWord32 _cpuCount;
|
||||
WebRtc_UWord32* _cpuUsage;
|
||||
WebRtc_Word32 _totalCpuUsage;
|
||||
WebRtc_Word64* _lastTickCount;
|
||||
WebRtc_Word64 _lastTime;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user