~ubuntu-branches/ubuntu/saucy/sflphone/saucy-proposed

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject/third_party/portaudio/src/common/pa_cpuload.c

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2013-06-30 11:40:56 UTC
  • mfrom: (20.1.3 sid)
  • Revision ID: package-import@ubuntu.com-20130630114056-i0rz9ibang07g7qr
Tags: 1.2.3-2
* changeset_r92d62cfc54732bbbcfff2b1d36c096b120b981a5.diff 
  - fixes automatic endian detection 
* Update Vcs: fixes vcs-field-not-canonical

Show diffs side-by-side

added added

removed removed

Lines of Context:
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
 
}