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