1 #if LV_BUILD_TEST
2 #include "../lvgl.h"
3 #include "../../lvgl_private.h"
4 
5 #include "unity/unity.h"
6 #include <string.h>
7 
8 #define OUTPUT_LINE_MAX 8
9 #define OUTPUT_BUF_MAX 128
10 
11 static uint32_t profiler_tick = 0;
12 static int output_line = 0;
13 static char output_buf[OUTPUT_LINE_MAX][OUTPUT_BUF_MAX];
14 
get_tick_cb(void)15 static uint64_t get_tick_cb(void)
16 {
17     return profiler_tick++;
18 }
19 
flush_cb(const char * buf)20 static void flush_cb(const char * buf)
21 {
22     TEST_ASSERT_LESS_THAN(OUTPUT_LINE_MAX, output_line);
23     TEST_ASSERT_LESS_THAN(OUTPUT_BUF_MAX, strlen(buf));
24 
25     lv_strcpy(output_buf[output_line], buf);
26     output_line++;
27 }
28 
setUp(void)29 void setUp(void)
30 {
31     lv_profiler_builtin_config_t config;
32     lv_profiler_builtin_config_init(&config);
33     config.buf_size = 1024;
34     config.tick_per_sec = 1; /* One second is equal to 1000000 microseconds */
35     config.tick_get_cb = get_tick_cb;
36     config.flush_cb = flush_cb;
37     lv_profiler_builtin_init(&config);
38 }
39 
tearDown(void)40 void tearDown(void)
41 {
42     lv_profiler_builtin_uninit();
43 }
44 
test_profiler_normal(void)45 void test_profiler_normal(void)
46 {
47     /* enable profiler */
48     lv_profiler_builtin_set_enable(true);
49 
50     /* reset */
51     profiler_tick = 0;
52     output_line = 0;
53     lv_memzero(output_buf, sizeof(output_buf));
54 
55     /* test profiler */
56     LV_PROFILER_BEGIN;
57     LV_PROFILER_END;
58     LV_PROFILER_BEGIN_TAG("custom_tag");
59     LV_PROFILER_END_TAG("custom_tag");
60 
61     /* flush output */
62     lv_profiler_builtin_flush();
63 
64     /* check output */
65     TEST_ASSERT_EQUAL_INT(output_line, 4);
66     TEST_ASSERT_EQUAL_INT(profiler_tick, 4);
67     TEST_ASSERT_EQUAL_STRING(output_buf[0], "   LVGL-1 [0] 0.000000000: tracing_mark_write: B|1|test_profiler_normal\n");
68     TEST_ASSERT_EQUAL_STRING(output_buf[1], "   LVGL-1 [0] 1.000000000: tracing_mark_write: E|1|test_profiler_normal\n");
69     TEST_ASSERT_EQUAL_STRING(output_buf[2], "   LVGL-1 [0] 2.000000000: tracing_mark_write: B|1|custom_tag\n");
70     TEST_ASSERT_EQUAL_STRING(output_buf[3], "   LVGL-1 [0] 3.000000000: tracing_mark_write: E|1|custom_tag\n");
71 }
72 
test_profiler_disable(void)73 void test_profiler_disable(void)
74 {
75     /* disable profiler */
76     lv_profiler_builtin_set_enable(false);
77 
78     /* reset */
79     profiler_tick = 0;
80     output_line = 0;
81     lv_memzero(output_buf, sizeof(output_buf));
82 
83     /* test profiler */
84     LV_PROFILER_BEGIN;
85     LV_PROFILER_END;
86     LV_PROFILER_BEGIN_TAG("custom_tag");
87     LV_PROFILER_END_TAG("custom_tag");
88 
89     /* flush output */
90     lv_profiler_builtin_flush();
91 
92     /* check output */
93     TEST_ASSERT_EQUAL_INT(output_line, 0);
94     TEST_ASSERT_EQUAL_INT(profiler_tick, 0);
95     TEST_ASSERT_EQUAL_CHAR(output_buf[1][0], '\0');
96     TEST_ASSERT_EQUAL_CHAR(output_buf[2][0], '\0');
97     TEST_ASSERT_EQUAL_CHAR(output_buf[3][0], '\0');
98     TEST_ASSERT_EQUAL_CHAR(output_buf[4][0], '\0');
99 }
100 
101 #endif
102