1#![allow(non_camel_case_types)]
2
3extern crate libc;
4extern crate hbs_common_sys;
5
6use libc::{uint64_t, c_double, c_int};
7use hbs_common_sys::{heartbeat_udata, heartbeat_rates, heartbeat_window_state};
8
9pub type heartbeat_acc_window_complete = extern fn(*const heartbeat_acc_context);
11
12#[repr(C)]
14pub struct heartbeat_acc_record {
15 pub id: uint64_t,
16 pub user_tag: uint64_t,
17
18 pub work: uint64_t,
19 pub wd: heartbeat_udata,
20 pub start_time: uint64_t,
21 pub end_time: uint64_t,
22 pub td: heartbeat_udata,
23 pub perf: heartbeat_rates,
24
25 pub accuracy: uint64_t,
26 pub ad: heartbeat_udata,
27 pub acc: heartbeat_rates,
28}
29
30#[repr(C)]
32pub struct heartbeat_acc_context {
33 pub ws: heartbeat_window_state,
34 pub window_buffer: *mut heartbeat_acc_record,
35 pub counter: uint64_t,
36 pub lock: c_int,
37 pub hwc_callback: heartbeat_acc_window_complete,
38
39 pub td: heartbeat_udata,
40 pub wd: heartbeat_udata,
41 pub ad: heartbeat_udata,
42}
43
44extern "C" {
45 pub fn heartbeat_acc_init(hb: *mut heartbeat_acc_context,
48 window_size: uint64_t,
49 window_buffer: *mut heartbeat_acc_record,
50 log_fd: c_int,
51 hwc_callback: Option<heartbeat_acc_window_complete>) -> c_int;
52
53 pub fn heartbeat_acc(hb: *mut heartbeat_acc_context,
54 user_tag: uint64_t,
55 work: uint64_t,
56 start_time: uint64_t,
57 end_time: uint64_t,
58 accuracy: uint64_t);
59
60 pub fn hb_acc_log_header(fd: c_int) -> c_int;
61
62 pub fn hb_acc_log_window_buffer(hb: *const heartbeat_acc_context,
63 fd: c_int) -> c_int;
64
65 pub fn hb_acc_get_window_size(hb: *const heartbeat_acc_context) -> uint64_t;
68 pub fn hb_acc_get_log_fd(hb: *const heartbeat_acc_context) -> c_int;
69
70 pub fn hb_acc_get_user_tag(hb: *const heartbeat_acc_context) -> uint64_t;
71
72 pub fn hb_acc_get_global_time(hb: *const heartbeat_acc_context) -> uint64_t;
73 pub fn hb_acc_get_window_time(hb: *const heartbeat_acc_context) -> uint64_t;
74 pub fn hb_acc_get_global_work(hb: *const heartbeat_acc_context) -> uint64_t;
75 pub fn hb_acc_get_window_work(hb: *const heartbeat_acc_context) -> uint64_t;
76
77 pub fn hb_acc_get_global_perf(hb: *const heartbeat_acc_context) -> c_double;
78 pub fn hb_acc_get_window_perf(hb: *const heartbeat_acc_context) -> c_double;
79 pub fn hb_acc_get_instant_perf(hb: *const heartbeat_acc_context) -> c_double;
80
81 pub fn hb_acc_get_global_accuracy(hb: *const heartbeat_acc_context) -> uint64_t;
82 pub fn hb_acc_get_window_accuracy(hb: *const heartbeat_acc_context) -> uint64_t;
83
84 pub fn hb_acc_get_global_accuracy_rate(hb: *const heartbeat_acc_context) -> c_double;
85 pub fn hb_acc_get_window_accuracy_rate(hb: *const heartbeat_acc_context) -> c_double;
86 pub fn hb_acc_get_instant_accuracy_rate(hb: *const heartbeat_acc_context) -> c_double;
87}