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