1 #ifdef HAVE_CONFIG_H
2 #include "config.h"
3 #endif
4
5 #include <fs/emu.h>
6 #include "util.h"
7 #include <stdio.h>
8 #include <stdlib.h>
9
fs_emu_stat_queue_init(fs_emu_stat_queue * stat_queue,int count)10 void fs_emu_stat_queue_init(fs_emu_stat_queue* stat_queue, int count) {
11 stat_queue->queue = g_queue_new();
12 stat_queue->max_count = count;
13 for (int i = 0; i < count; i++) {
14 g_queue_push_head(stat_queue->queue, FS_INT_TO_POINTER(0));
15 }
16
17 }
18
fs_emu_stat_queue_add_entry(fs_emu_stat_queue * stat_queue,int data,int threshold)19 void fs_emu_stat_queue_add_entry(fs_emu_stat_queue* stat_queue, int data,
20 int threshold) {
21 if (stat_queue->queue == NULL) {
22 fs_log("fs_emu_stat_queue_add_entry: queue is null");
23 return;
24 }
25 if (stat_queue->clear) {
26 for (int i = 0; i < stat_queue->max_count; i++) {
27 g_queue_push_head(stat_queue->queue, FS_INT_TO_POINTER(0));
28 g_queue_pop_tail(stat_queue->queue);
29 }
30 stat_queue->count = 0;
31 stat_queue->total = 0;
32 stat_queue->clear = 0;
33 }
34
35 /*
36 if (treshold && abs(data) >= treshold) {
37 return;
38 }
39 */
40
41 //fs_log("add %d\n", data);
42 g_queue_push_head(stat_queue->queue, FS_INT_TO_POINTER(data));
43 int last = FS_POINTER_TO_INT(g_queue_pop_tail(stat_queue->queue));
44 // fixme: min and max
45 stat_queue->total += data - last;
46 //fs_log("data %d last %d total %lld\n", data, last, stat_queue->total);
47 stat_queue->seq_no += 1;
48 if (stat_queue->count < stat_queue->max_count) {
49 stat_queue->count++;
50 }
51 }
52