/[pcsx2_0.9.7]/trunk/3rdparty/portaudio/src/common/pa_cpuload.c
ViewVC logotype

Contents of /trunk/3rdparty/portaudio/src/common/pa_cpuload.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 273 - (show annotations) (download)
Fri Nov 12 01:10:22 2010 UTC (9 years, 3 months ago) by william
File MIME type: text/plain
File size: 3776 byte(s)
Auto Commited Import of: pcsx2-0.9.7-DEBUG (upstream: v0.9.7.4013 local: v0.9.7.197-latest) in ./trunk
1 /*
2 * $Id: pa_cpuload.c 1097 2006-08-26 08:27:53Z rossb $
3 * Portable Audio I/O Library CPU Load measurement functions
4 * Portable CPU load measurement facility.
5 *
6 * Based on the Open Source API proposed by Ross Bencina
7 * Copyright (c) 2002 Ross Bencina
8 *
9 * Permission is hereby granted, free of charge, to any person obtaining
10 * a copy of this software and associated documentation files
11 * (the "Software"), to deal in the Software without restriction,
12 * including without limitation the rights to use, copy, modify, merge,
13 * publish, distribute, sublicense, and/or sell copies of the Software,
14 * and to permit persons to whom the Software is furnished to do so,
15 * subject to the following conditions:
16 *
17 * The above copyright notice and this permission notice shall be
18 * included in all copies or substantial portions of the Software.
19 *
20 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
24 * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
25 * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27 */
28
29 /*
30 * The text above constitutes the entire PortAudio license; however,
31 * the PortAudio community also makes the following non-binding requests:
32 *
33 * Any person wishing to distribute modifications to the Software is
34 * requested to send the modifications to the original developer so that
35 * they can be incorporated into the canonical version. It is also
36 * requested that these non-binding requests be included along with the
37 * license above.
38 */
39
40 /** @file
41 @ingroup common_src
42
43 @brief Functions to assist in measuring the CPU utilization of a callback
44 stream. Used to implement the Pa_GetStreamCpuLoad() function.
45
46 @todo Dynamically calculate the coefficients used to smooth the CPU Load
47 Measurements over time to provide a uniform characterisation of CPU Load
48 independent of rate at which PaUtil_BeginCpuLoadMeasurement /
49 PaUtil_EndCpuLoadMeasurement are called.
50 */
51
52
53 #include "pa_cpuload.h"
54
55 #include <assert.h>
56
57 #include "pa_util.h" /* for PaUtil_GetTime() */
58
59
60 void PaUtil_InitializeCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer, double sampleRate )
61 {
62 assert( sampleRate > 0 );
63
64 measurer->samplingPeriod = 1. / sampleRate;
65 measurer->averageLoad = 0.;
66 }
67
68 void PaUtil_ResetCpuLoadMeasurer( PaUtilCpuLoadMeasurer* measurer )
69 {
70 measurer->averageLoad = 0.;
71 }
72
73 void PaUtil_BeginCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer )
74 {
75 measurer->measurementStartTime = PaUtil_GetTime();
76 }
77
78
79 void PaUtil_EndCpuLoadMeasurement( PaUtilCpuLoadMeasurer* measurer, unsigned long framesProcessed )
80 {
81 double measurementEndTime, secondsFor100Percent, measuredLoad;
82
83 if( framesProcessed > 0 ){
84 measurementEndTime = PaUtil_GetTime();
85
86 assert( framesProcessed > 0 );
87 secondsFor100Percent = framesProcessed * measurer->samplingPeriod;
88
89 measuredLoad = (measurementEndTime - measurer->measurementStartTime) / secondsFor100Percent;
90
91 /* Low pass filter the calculated CPU load to reduce jitter using a simple IIR low pass filter. */
92 /** FIXME @todo these coefficients shouldn't be hardwired */
93 #define LOWPASS_COEFFICIENT_0 (0.9)
94 #define LOWPASS_COEFFICIENT_1 (0.99999 - LOWPASS_COEFFICIENT_0)
95
96 measurer->averageLoad = (LOWPASS_COEFFICIENT_0 * measurer->averageLoad) +
97 (LOWPASS_COEFFICIENT_1 * measuredLoad);
98 }
99 }
100
101
102 double PaUtil_GetCpuLoad( PaUtilCpuLoadMeasurer* measurer )
103 {
104 return measurer->averageLoad;
105 }

  ViewVC Help
Powered by ViewVC 1.1.22