# FPSCounter

<a id="fpscounter-2"></a>

# FPSCounter

```cpp
#include <icy/av/fpscounter.h>

class FPSCounter
```

[Defined in src/av/include/icy/av/fpscounter.h:27](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L27)

FPS counter based on the simple moving average (SMA) algorithm.

## Public Attributes

| Return | Name | Description |
|--------|------|-------------|
| `double` | [`fps`](#fps-2)  |  |
| `int64_t` | [`frames`](#frames-1)  |  |

---

<a id="fps-2"></a>

### fps

```cpp
double fps
```

[Defined in src/av/include/icy/av/fpscounter.h:48](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L48)

---

<a id="frames-1"></a>

### frames

```cpp
int64_t frames
```

[Defined in src/av/include/icy/av/fpscounter.h:49](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L49)

## Public Methods

| Return | Name | Description |
|--------|------|-------------|
|  | [`FPSCounter`](#fpscounter-3) `inline` | Initialise the counter with all zeroes. |
| `void` | [`reset`](#reset-10) `inline` | Reset all counters and the SMA window to zero. |
| `void` | [`tick`](#tick-1) `inline` | Record a new frame and update the FPS estimate. Must be called once per frame. Updates `fps` and increments `frames`. |

---

<a id="fpscounter-3"></a>

### FPSCounter

`inline`

```cpp
inline FPSCounter()
```

[Defined in src/av/include/icy/av/fpscounter.h:52](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L52)

Initialise the counter with all zeroes.

---

<a id="reset-10"></a>

### reset

`inline`

```cpp
inline void reset()
```

[Defined in src/av/include/icy/av/fpscounter.h:55](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L55)

Reset all counters and the SMA window to zero.

---

<a id="tick-1"></a>

### tick

`inline`

```cpp
inline void tick()
```

[Defined in src/av/include/icy/av/fpscounter.h:68](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L68)

Record a new frame and update the FPS estimate. Must be called once per frame. Updates `fps` and increments `frames`.

## Private Attributes

| Return | Name | Description |
|--------|------|-------------|
| `int` | [`tickIndex`](#tickindex)  |  |
| `clock_t` | [`prevTick`](#prevtick)  |  |
| `clock_t` | [`tickSum`](#ticksum)  |  |
| `clock_t` | [`tickList`](#ticklist)  |  |

---

<a id="tickindex"></a>

### tickIndex

```cpp
int tickIndex
```

[Defined in src/av/include/icy/av/fpscounter.h:32](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L32)

---

<a id="prevtick"></a>

### prevTick

```cpp
clock_t prevTick
```

[Defined in src/av/include/icy/av/fpscounter.h:33](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L33)

---

<a id="ticksum"></a>

### tickSum

```cpp
clock_t tickSum
```

[Defined in src/av/include/icy/av/fpscounter.h:34](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L34)

---

<a id="ticklist"></a>

### tickList

```cpp
clock_t tickList[MAX]
```

[Defined in src/av/include/icy/av/fpscounter.h:35](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L35)

## Private Methods

| Return | Name | Description |
|--------|------|-------------|
| `double` | [`updateAvg`](#updateavg) `inline` |  |

---

<a id="updateavg"></a>

### updateAvg

`inline`

```cpp
inline double updateAvg(clock_t newTick)
```

[Defined in src/av/include/icy/av/fpscounter.h:37](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L37)

## Private Static Attributes

| Return | Name | Description |
|--------|------|-------------|
| `const int` | [`MAX`](#max) `static` |  |

---

<a id="max"></a>

### MAX

`static`

```cpp
const int MAX = 100
```

[Defined in src/av/include/icy/av/fpscounter.h:30](https://github.com/auscaster/icey/blob/main/src/av/include/icy/av/fpscounter.h#L30)
