-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcalclock.c
More file actions
62 lines (51 loc) · 1.58 KB
/
calclock.c
File metadata and controls
62 lines (51 loc) · 1.58 KB
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
#include "calclock.h"
/**
* @brief make number as separated with commas
*
* @number input number
* @buffer number string buffer
* @return separated number string buffer itself
*/
static const char *separate_num(unsigned long long number, char buffer[])
{
char tmp_buff[100]; // temp buffer for characterized numbers
char tmp_reverse_buff[100]; // temp buffer for saving reversed numbers
int cur, counter = 0, rvs_cur = 0;
sprintf(tmp_buff, "%llu", number);
cur = strlen(tmp_buff);
for (--cur; cur > -1; cur--) {
if (counter == 3) {
tmp_reverse_buff[rvs_cur++] = ',';
counter = 0;
cur++;
}
else {
tmp_reverse_buff[rvs_cur++] = tmp_buff[cur];
counter++;
}
}
cur = 0;
for (--rvs_cur; rvs_cur > -1; rvs_cur--) {
buffer[cur++] = tmp_reverse_buff[rvs_cur];
}
buffer[cur] = '\0'; // inserting null char
return buffer;
}
void __ktprint(int depth, char *func_name, ktime_t time, unsigned long long count)
{
char char_buff[100], char_buff2[100]; // buffer for characterized numbers
int percentage;
static ktime_t totaltime = 1;
if (ktime_before(totaltime, time))
totaltime = time;
percentage = time * 10000 / totaltime;
printk("%s", "");
while(depth--)
printk(KERN_CONT " ");
printk(KERN_CONT "%s is called ", func_name);
printk(KERN_CONT "%s times, ", separate_num(count, char_buff));
printk(KERN_CONT "and the time interval is %sns (per thread is %sns)",
separate_num((u64)ktime_to_ns(time), char_buff),
separate_num((u64)(ktime_to_ns(time) / num_online_cpus()), char_buff2));
printk(KERN_CONT " (%d.%.2d%%)\n", percentage/100, percentage%100);
}