blob: 446cee73b2f4e2fbbcbf733f7a59192d8ca48d40 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#include "fmdsp_platform_info.h"
#include <sys/times.h>
#include <time.h>
#include <limits.h>
#include <stdint.h>
static struct {
clock_t lastall;
clock_t lastcpu;
struct timespec lasttimespec;
} g;
int fmdsp_cpu_usage(void) {
struct tms tmsbuf;
clock_t all = times(&tmsbuf);
clock_t cpu = tmsbuf.tms_utime + tmsbuf.tms_stime;
clock_t percentage = 0;
clock_t alld = all - g.lastall;
clock_t cpud = cpu - g.lastcpu;
if (alld) percentage = cpud * 100 / alld;
g.lastall = all;
g.lastcpu = cpu;
if (!g.lastall) percentage = 0;
if (percentage > INT_MAX) percentage = INT_MAX;
if (percentage < 0) percentage = 0;
return percentage;
}
int fmdsp_fps_30(void) {
struct timespec time;
clock_gettime(CLOCK_MONOTONIC, &time);
uint64_t fps = 0;
if (g.lasttimespec.tv_sec || g.lasttimespec.tv_nsec) {
uint64_t diffns = time.tv_sec - g.lasttimespec.tv_sec;
diffns *= 1000000000ull;
diffns += time.tv_nsec - g.lasttimespec.tv_nsec;
if (diffns) {
fps = 30ull * 1000000000ull / diffns;
}
}
g.lasttimespec = time;
if (fps > INT_MAX) fps = INT_MAX;
return fps;
}
|