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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 273 - (hide 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 william 31 /*
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 william 273 * The text above constitutes the entire PortAudio license; however,
31 william 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 william 273 * they can be incorporated into the canonical version. It is also
36     * requested that these non-binding requests be included along with the
37 william 31 * 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