summaryrefslogtreecommitdiff
path: root/src/osfp_common.c
blob: 8ac9ac3b30c047ef1e221b45fe460e66e96b21e1 (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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include "osfp_common.h"

#include "osfp.h"

unsigned int osfp_profile_enable;

const char *osfp_os_class_name[OSFP_OS_CLASS_MAX] = {
    OSFP_OS_CLASS_NAME_UNKNOWN,
    OSFP_OS_CLASS_NAME_WINDOWS,
    OSFP_OS_CLASS_NAME_LINUX,
    OSFP_OS_CLASS_NAME_MAC_OS,
    OSFP_OS_CLASS_NAME_IOS,
    OSFP_OS_CLASS_NAME_ANDROID,
    OSFP_OS_CLASS_NAME_OTHERS
};

struct osfp_profile_counter osfp_profile_fingerprinting;
struct osfp_profile_counter osfp_profile_prefilter;
struct osfp_profile_counter osfp_profile_score;
struct osfp_profile_counter osfp_profile_result_build;
struct osfp_profile_counter osfp_profile_result_export;

const char *osfp_os_class_id_to_name(enum osfp_os_class_id os_class)
{
    return osfp_os_class_name[os_class];
}

void osfp_profile_counter_print(struct osfp_profile_counter *profile, const char *name)
{
    printf("profile %s: avg: %lu max: %lu min: %lu curr: %lu total: %lu count: %lu\n",
            name, 
            profile->total_cycle / profile->count,
            profile->max_cycle,
            profile->min_cycle,
            profile->curr_cycle,
            profile->total_cycle,
            profile->count);
}
void osfp_profile_counter_update(struct osfp_profile_counter *profile, unsigned long long curr_cycle)
{
    profile->count++;
    profile->curr_cycle = curr_cycle;
    profile->total_cycle += curr_cycle;

    if (profile->min_cycle == 0) {
        profile->min_cycle = curr_cycle;
    } else {
        if (profile->min_cycle > curr_cycle) {
            profile->min_cycle = curr_cycle;
        }
    }

    if (profile->max_cycle < curr_cycle) {
        profile->max_cycle = curr_cycle;
    }
}

void osfp_profile_print_stats(void)
{
    osfp_profile_counter_print(&osfp_profile_fingerprinting, "fingerprinting");
    osfp_profile_counter_print(&osfp_profile_prefilter, "prefilter");
    osfp_profile_counter_print(&osfp_profile_score, "score");
    osfp_profile_counter_print(&osfp_profile_result_build, "result build");
    osfp_profile_counter_print(&osfp_profile_result_export, "result export");
}

void osfp_profile_set(unsigned int enabled)
{
    osfp_profile_enable = enabled;
}

enum osfp_os_class_id osfp_os_class_name_to_id(char *name)
{
    enum osfp_os_class_id os_class;

    if (0 == strncmp(name, OSFP_OS_CLASS_NAME_WINDOWS, strlen(OSFP_OS_CLASS_NAME_WINDOWS))) {
        os_class = OSFP_OS_CLASS_WINDOWS;
    } else if (0 == strncmp(name, OSFP_OS_CLASS_NAME_LINUX, strlen(OSFP_OS_CLASS_NAME_LINUX))) {
        os_class = OSFP_OS_CLASS_LINUX;
    } else if (0 == strncmp(name, OSFP_OS_CLASS_NAME_MAC_OS, strlen(OSFP_OS_CLASS_NAME_MAC_OS))) {
        os_class = OSFP_OS_CLASS_MAC_OS;
    } else if (0 == strncmp(name, OSFP_OS_CLASS_NAME_IOS, strlen(OSFP_OS_CLASS_NAME_IOS))) {
        os_class = OSFP_OS_CLASS_IOS;
    } else if (0 == strncmp(name, OSFP_OS_CLASS_NAME_ANDROID, strlen(OSFP_OS_CLASS_NAME_ANDROID))) {
        os_class = OSFP_OS_CLASS_ANDROID;
    } else {
        os_class = OSFP_OS_CLASS_MAX;
    }

    return os_class;
}