Example: Fix eventfd example test and added a diagram to explain printed values

This commit is contained in:
Omar Chebib
2021-11-03 19:31:33 +08:00
parent b86619fc61
commit 0a3cdd4e4f
4 changed files with 727 additions and 47 deletions

View File

@@ -39,36 +39,36 @@ See the Getting Started Guide for full steps to configure and use ESP-IDF to bui
The following log output should appear when the example runs (note that the bootloader log has been omitted). The following log output should appear when the example runs (note that the bootloader log has been omitted).
``` ```
I (4310) eventfd_example: Time: 1.99s I (4340) eventfd_example: Elapsed since test start: 2003 ms
I (4310) eventfd_example: Select timeout I (4340) eventfd_example: Select timeout
I (4310) eventfd_example: ================================= I (4830) eventfd_example: Elapsed since test start: 2499 ms
I (4310) eventfd_example: Select timeouted for 1 times I (4830) eventfd_example: TimerEvent fd event triggered
I (4320) eventfd_example: Timer triggerred for 0 times I (5830) eventfd_example: Elapsed since test start: 3493 ms
I (4320) eventfd_example: Progress triggerred for 0 times I (5830) eventfd_example: Progress fd event triggered
I (4330) eventfd_example: ================================= I (7330) eventfd_example: Elapsed since test start: 4999 ms
I (4810) eventfd_example: Time: 2.50s I (7330) eventfd_example: TimerEvent fd event triggered
I (4810) eventfd_example: TimerEvent fd event triggered I (7330) eventfd_example: =================================
I (5810) eventfd_example: Time: 3.49s I (7340) eventfd_example: Select timeouted for 1 times
I (5810) eventfd_example: Progress fd event triggered I (7340) eventfd_example: Timer triggerred for 2 times
I (7310) eventfd_example: Time: 5.00s I (7350) eventfd_example: Progress triggerred for 1 times
I (7310) eventfd_example: TimerEvent fd event triggered I (7360) eventfd_example: =================================
I (9310) eventfd_example: Time: 6.99s I (9330) eventfd_example: Elapsed since test start: 6993 ms
I (9310) eventfd_example: Select timeout I (9330) eventfd_example: Progress fd event triggered
I (9310) eventfd_example: Time: 6.99s I (9830) eventfd_example: Elapsed since test start: 7499 ms
I (9310) eventfd_example: Progress fd event triggered I (9830) eventfd_example: TimerEvent fd event triggered
I (9810) eventfd_example: Time: 7.50s I (11840) eventfd_example: Elapsed since test start: 9503 ms
I (9810) eventfd_example: TimerEvent fd event triggered I (11840) eventfd_example: Select timeout
I (11810) eventfd_example: Time: 9.49s I (12330) eventfd_example: Elapsed since test start: 9999 ms
I (11810) eventfd_example: Select timeout I (12330) eventfd_example: TimerEvent fd event triggered
I (12310) eventfd_example: Time: 10.00s I (12330) eventfd_example: =================================
I (12310) eventfd_example: TimerEvent fd event triggered I (12340) eventfd_example: Select timeouted for 2 times
I (12810) eventfd_example: Time: 10.49s I (12340) eventfd_example: Timer triggerred for 4 times
I (12810) eventfd_example: Progress fd event triggered I (12350) eventfd_example: Progress triggerred for 2 times
I (14810) eventfd_example: Time: 12.49s I (12360) eventfd_example: =================================
I (14810) eventfd_example: Select timeout
I (14810) eventfd_example: =================================
I (14810) eventfd_example: Select timeouted for 4 times
I (14820) eventfd_example: Timer triggerred for 4 times
I (14820) eventfd_example: Progress triggerred for 3 times
I (14830) eventfd_example: =================================
``` ```
## Diagram
The following diagram shows, with a timeline, the order of the events:
![Timeline](timeline.svg)

View File

@@ -15,14 +15,23 @@ def test_examples_eventfd(env, extra_data):
dut.expect('cpu_start: Starting scheduler', timeout=30) dut.expect('cpu_start: Starting scheduler', timeout=30)
exp_list = [ exp_list_5seconds = [
'eventfd_example: Select timeouted for 4 times', 'eventfd_example: Select timeouted for 1 times',
'eventfd_example: Timer triggerred for 4 times', 'eventfd_example: Timer triggerred for 2 times',
'eventfd_example: Progress triggerred for 3 times', 'eventfd_example: Progress triggerred for 1 times',
] ]
Utility.console_log('Expecting:{}{}'.format(os.linesep, os.linesep.join(exp_list))) exp_list_10seconds = [
dut.expect_all(*exp_list, timeout=60) 'eventfd_example: Select timeouted for 2 times',
'eventfd_example: Timer triggerred for 4 times',
'eventfd_example: Progress triggerred for 2 times',
]
Utility.console_log('Expecting:{}{}'.format(os.linesep, os.linesep.join(exp_list_5seconds)))
dut.expect_all(*exp_list_5seconds, timeout=60)
Utility.console_log('Expecting:{}{}'.format(os.linesep, os.linesep.join(exp_list_10seconds)))
dut.expect_all(*exp_list_10seconds, timeout=60)
if __name__ == '__main__': if __name__ == '__main__':

View File

@@ -28,11 +28,15 @@
#define PROGRESS_INTERVAL_MS 3500 #define PROGRESS_INTERVAL_MS 3500
#define TIMER_SIGNAL 1 #define TIMER_SIGNAL 1
#define PROGRESS_SIGNAL 2 #define PROGRESS_SIGNAL 2
/* Print the signals value a bit before 5 seconds, else, `select` would run again
* and the following print may happen 2 seconds (timeout value) later. */
#define PRINT_INTERVAL_MSEC 4990
static const char *TAG = "eventfd_example"; static const char *TAG = "eventfd_example";
int s_timer_fd; static int s_timer_fd;
int s_progress_fd; static int s_progress_fd;
static TaskHandle_t s_worker_handle;
static bool eventfd_timer_isr_callback(void *arg) static bool eventfd_timer_isr_callback(void *arg)
{ {
@@ -78,6 +82,9 @@ static void eventfd_timer_init(int timer_idx, double timer_interval_sec)
static void worker_task(void *arg) static void worker_task(void *arg)
{ {
/* Wait for the collector to be ready. */
ulTaskNotifyTake(true, portMAX_DELAY);
while (true) { while (true) {
vTaskDelay(pdMS_TO_TICKS(PROGRESS_INTERVAL_MS)); vTaskDelay(pdMS_TO_TICKS(PROGRESS_INTERVAL_MS));
uint64_t signal = PROGRESS_SIGNAL; uint64_t signal = PROGRESS_SIGNAL;
@@ -102,7 +109,12 @@ static void collector_task(void *arg)
int timer_trigger_count = 0; int timer_trigger_count = 0;
int progress_trigger_count = 0; int progress_trigger_count = 0;
for (size_t i = 0; ; i++) { /* Notify the worker we are ready to catch the signals */
assert( xTaskNotifyGive(s_worker_handle) == pdPASS );
uint64_t start = esp_timer_get_time();
uint64_t previous = start;
while (1) {
struct timeval timeout; struct timeval timeout;
uint64_t signal; uint64_t signal;
@@ -117,9 +129,7 @@ static void collector_task(void *arg)
int num_triggered = select(maxFd + 1, &readfds, NULL, NULL, &timeout); int num_triggered = select(maxFd + 1, &readfds, NULL, NULL, &timeout);
assert(num_triggered >= 0); assert(num_triggered >= 0);
uint64_t task_counter_value; ESP_LOGI(TAG, "Elapsed since test start: %lld ms", (esp_timer_get_time() - start) / 1000);
timer_get_counter_value(TIMER_GROUP_0, TIMER_0, &task_counter_value);
ESP_LOGI(TAG, "Time: %.2fs", (double)task_counter_value / TIMER_SCALE);
if (FD_ISSET(s_progress_fd, &readfds)) { if (FD_ISSET(s_progress_fd, &readfds)) {
ssize_t ret = read(s_progress_fd, &signal, sizeof(signal)); ssize_t ret = read(s_progress_fd, &signal, sizeof(signal));
@@ -140,13 +150,16 @@ static void collector_task(void *arg)
ESP_LOGI(TAG, "Select timeout"); ESP_LOGI(TAG, "Select timeout");
} }
if (i % 10 == 0) { /* Print information about received events every PRINT_INTERVAL_MSEC milliseconds. */
const uint64_t current = esp_timer_get_time();
const uint64_t elapsed = current - previous;
if (elapsed >= PRINT_INTERVAL_MSEC * 1000) {
ESP_LOGI(TAG, "================================="); ESP_LOGI(TAG, "=================================");
ESP_LOGI(TAG, "Select timeouted for %d times", select_timeout_count); ESP_LOGI(TAG, "Select timeouted for %d times", select_timeout_count);
ESP_LOGI(TAG, "Timer triggerred for %d times", timer_trigger_count); ESP_LOGI(TAG, "Timer triggerred for %d times", timer_trigger_count);
ESP_LOGI(TAG, "Progress triggerred for %d times", progress_trigger_count); ESP_LOGI(TAG, "Progress triggerred for %d times", progress_trigger_count);
ESP_LOGI(TAG, "================================="); ESP_LOGI(TAG, "=================================");
previous = current;
} }
} }
@@ -160,6 +173,7 @@ static void collector_task(void *arg)
void app_main(void) void app_main(void)
{ {
eventfd_timer_init(TIMER_0, TIMER_INTERVAL_SEC); eventfd_timer_init(TIMER_0, TIMER_INTERVAL_SEC);
xTaskCreate(worker_task, "worker_task", 4 * 1024, NULL, 5, NULL); /* Save the handle for this task as we will need to notify it */
xTaskCreate(worker_task, "worker_task", 4 * 1024, NULL, 5, &s_worker_handle);
xTaskCreate(collector_task, "collector_task", 4 * 1024, NULL, 5, NULL); xTaskCreate(collector_task, "collector_task", 4 * 1024, NULL, 5, NULL);
} }

View File

@@ -0,0 +1,657 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Do not edit this file with editors other than diagrams.net -->
<svg
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="4956px"
height="1456px"
viewBox="-0.5 -0.5 4956 1456"
content="&lt;mxfile host=&quot;app.diagrams.net&quot; modified=&quot;2021-11-03T11:27:57.253Z&quot; agent=&quot;5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36 OPR/72.0.3815.211&quot; etag=&quot;31FTqR3pTOimErZ8YlCm&quot; version=&quot;15.3.8&quot;&gt;&lt;diagram id=&quot;Ny-u50C1Y_O5pEz-cxN1&quot; name=&quot;Page-1&quot;&gt;7ZxRc6I6FMc/jY87AwQQH7du9/blbjvT3dnnFKIyi8QJoer99DcpQYVjlzamEal9qZ7AHz2/nJBzEhyh6XLzD8Orxb80IdnIc5LNCH0beeIvcsQ/adlWljAIK8OcpUllcveGx/Q/oozqvHmZJqRoHMgpzXi6ahpjmuck5g0bZoyum4fNaNa86grPCTA8xjiD1t9pwhfKGjrOvuGOpPOFuvSkblji+mBlKBY4oesDE7odoSmjlFevlpspyaTzar9U531/pXX3wRjJ+VtOuJ8+bO7u7le/+Pge/8hnt1EWfQlRJfOMs1J9Y/Vp+bZ2AaNlnhCp4o7QzXqRcvK4wrFsXQvowrbgy0w14yyd5+J1RmbiU90odcI42bz6ud2dN0Q3InRJONuKQ9QJY+W/bfPtek9jMlG2xQEIrzZi1QPmO+W9k8QL5ad3+OwNLiN58lV2PvEuznBRpHHTS9UJJAF9r9MpB187OPKtaxsjGebpc1P+mCfUFR5oKi6887nrNJ3uhkFToqAli4k667DTASHUocQxmxMOlF7I7L63Piz/XbBympMmqVmaZVOaUfZyLJpFMYklzIIz+occtDxFgS+8X7fUg4V/CbSjFqOxLu22UGAXdnAi7N6DaoelNqi20BtBCdfh7cFhK3lA8f5xZM+9UjTaC0KzIZ8EJEr8YyEfeU8oDC8y5D1TPQkIWQ756Aq7EzYyBRsIWYY9ucLuhO2bgg2ELMOuM8Ar7b/QDkzRBkK2abtX2p20wzakSJM2ELKclbnelXYn7bGp2AZCtmP7fRWTz0k7MlVyAUK+ZdqGSy6DpD0xFdtAyHZsn1pz+Qy0Xcdg4ebMvE3nYJhEs6MF1TCOyNPsInmL3MkMbiBkmbZnOgcbIm3UrnrrzsqBkOVZuWc6Bxsi7cAzFNtAyHZsm87Bhkg7DA3RBkK2aZvOwYZIG6ROuiN5ZzL30bRN52BDpD0xNUsDQrZjG87JgwLw5mTDm5CbMFUnOCSvTPWenlhwI8J+I/fzpDHOvqqGZZok8jJHNwfttw85ZjYEee1pUp2DHnQb/0i3qe+35jcEGc6BtTaZxCV73m3SogJByqV/AucCIrFz4qs9g7Zc+0LjHvSEvtP2TW03AkKWx11kuBaiRfvCQr1z5Ul7CctyqNd3mGuo/20Jy1SoAyHLoe4bLo0MknZkijYQsk3b8BbCQdJu7+0Uwnq0gZBjmbbhSdtQl7CakHRLI0DI9gMBpneMDrE00oaEXFO0J5Zpwyn6I8nkg2Kew9MloSUH9E8vlKiHn85bJnHdV4bVgy7kHX1y6qPqJAGcMv8UDJg8T1aWWLn6PDRCSMMuDDijfWB0zkhRyKHpmeSfh8Xk3Cy8E+9Jfb+fgAcHtJfINbP+1x9cMv4MGlxoc50BV+NBEe7c1fjg1LWvvgcT2KqvG0xAqH/BBFdWhryyFfYulk4thPQ9lsDWeN1YAkL9iyVY5vCGfGMCRcSzB9OplYe+BxPYi64bTECod8EU9mE9QIbqfXP578JWA0F5qF3o164zIbt1phBmcD/r8pKTU/7iKhwvxADnOU8kxmVBpKZsSGXCXQ9/nlOuRvI3jmRf2hacLOW7NP7zAQN1P5NxBIdphMyM0+Lt/veWKvT7X61Ct/8D&lt;/diagram&gt;&lt;/mxfile&gt;"
style="background-color: rgb(255, 255, 255);"
id="svg144"
sodipodi:docname="timeline.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)">
<metadata
id="metadata148">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="780"
inkscape:window-height="480"
id="namedview146"
showgrid="false"
inkscape:zoom="0.070016142"
inkscape:cx="2478"
inkscape:cy="728"
inkscape:window-x="72"
inkscape:window-y="27"
inkscape:window-maximized="0"
inkscape:current-layer="svg144" />
<defs
id="defs2" />
<g
id="g134">
<rect
x="0"
y="0"
width="4950"
height="1450"
rx="217.5"
ry="217.5"
fill="#ffffff"
stroke="#000000"
stroke-width="5"
pointer-events="all"
id="rect4" />
<path
d="M 150 475 L 4768.16 475"
fill="none"
stroke="#000000"
stroke-width="5"
stroke-miterlimit="10"
pointer-events="stroke"
id="path6" />
<path
d="M 4794.41 475 L 4759.41 492.5 L 4768.16 475 L 4759.41 457.5 Z"
fill="#000000"
stroke="#000000"
stroke-width="5"
stroke-miterlimit="10"
pointer-events="all"
id="path8" />
<path
d="M 550 525 L 550 425"
fill="none"
stroke="#b85450"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path10" />
<path
d="M 150 525 L 150 500 Q 150 475 150 450 L 150 425"
fill="none"
stroke="#000000"
stroke-width="5"
stroke-miterlimit="10"
pointer-events="stroke"
id="path12" />
<path
d="M 650 525 L 650 425"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path14" />
<path
d="M 1150 525 L 1150 425"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path16" />
<path
d="M 1650 525 L 1650 425"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path18" />
<path
d="M 2150 525 L 2150 425"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path20" />
<path
d="M 2650 575 L 2650 475"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path22" />
<path
d="M 3150 525 L 3150 425"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path24" />
<path
d="M 3650 475 L 3650 375"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path26" />
<path
d="M 4150 525 L 4150 425"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path28" />
<path
d="M 4650 525 L 4650 425"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path30" />
<path
d="M 850 525 L 850 425"
fill="none"
stroke="#6c8ebf"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path32" />
<path
d="M 1550 575 L 1550 475"
fill="none"
stroke="#6c8ebf"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path34" />
<path
d="M 2250 525 L 2250 425"
fill="none"
stroke="#6c8ebf"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path36" />
<path
d="M 2950 525 L 2950 425"
fill="none"
stroke="#6c8ebf"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path38" />
<path
d="M 3650 575 L 3650 475"
fill="none"
stroke="#6c8ebf"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path40" />
<path
d="M 4350 525 L 4350 425"
fill="none"
stroke="#6c8ebf"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path42" />
<rect
x="1050"
y="225"
width="200"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect44" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g50">
<switch
id="switch48">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 55px; margin-left: 211px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">5s</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="230"
y="59"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text46">5s</text>
</switch>
</g>
<path
d="M 1550 475 Q 1550 475 1550 375"
fill="none"
stroke="#b85450"
stroke-opacity="0.5"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path52" />
<path
d="M 2050 525 L 2050 425"
fill="none"
stroke="#b85450"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path54" />
<path
d="M 2650 475 L 2650 375"
fill="none"
stroke="#b85450"
stroke-opacity="0.5"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path56" />
<path
d="M 3550 525 L 3550 425"
fill="none"
stroke="#b85450"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path58" />
<path
d="M 4050 525 L 4050 425"
fill="none"
stroke="#b85450"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path60" />
<path
d="M 150 775 L 150 675"
fill="none"
stroke="#b85450"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path62" />
<path
d="M 150 1075 L 150 975"
fill="none"
stroke="#82b366"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path64" />
<path
d="M 150 1225 L 150 1125"
fill="none"
stroke="#6c8ebf"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path66" />
<rect
x="200"
y="675"
width="1450"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect68" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g74">
<switch
id="switch72">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 288px; height: 1px; padding-top: 145px; margin-left: 42px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: left;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Select timeout</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="42"
y="149"
fill="#000000"
font-family="Helvetica"
font-size="12px"
id="text70">Select timeout</text>
</switch>
</g>
<rect
x="200"
y="975"
width="450"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect76" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g82">
<switch
id="switch80">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 88px; height: 1px; padding-top: 205px; margin-left: 42px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: left;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Timer interrupt</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="42"
y="209"
fill="#000000"
font-family="Helvetica"
font-size="12px"
id="text78">Timer interrupt</text>
</switch>
</g>
<rect
x="200"
y="1125"
width="450"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect84" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g90">
<switch
id="switch88">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 88px; height: 1px; padding-top: 235px; margin-left: 42px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: left;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Progress event</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="42"
y="239"
fill="#000000"
font-family="Helvetica"
font-size="12px"
id="text86">Progress event</text>
</switch>
</g>
<path
d="M 1150 575 L 1150 375"
fill="none"
stroke="#000000"
stroke-width="5"
stroke-miterlimit="10"
pointer-events="stroke"
id="path92" />
<rect
x="2050"
y="225"
width="200"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect94" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g100">
<switch
id="switch98">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 55px; margin-left: 411px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">10s</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="430"
y="59"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text96">10s</text>
</switch>
</g>
<path
d="M 2150 575 L 2150 375"
fill="none"
stroke="#000000"
stroke-width="5"
stroke-miterlimit="10"
pointer-events="stroke"
id="path102" />
<rect
x="3050"
y="225"
width="200"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect104" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g110">
<switch
id="switch108">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 55px; margin-left: 611px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">15s</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="630"
y="59"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text106">15s</text>
</switch>
</g>
<path
d="M 3150 575 L 3150 375"
fill="none"
stroke="#000000"
stroke-width="5"
stroke-miterlimit="10"
pointer-events="stroke"
id="path112" />
<rect
x="4050"
y="225"
width="200"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect114" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g120">
<switch
id="switch118">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe center; width: 38px; height: 1px; padding-top: 55px; margin-left: 811px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: center;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">20s</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="830"
y="59"
fill="#000000"
font-family="Helvetica"
font-size="12px"
text-anchor="middle"
id="text116">20s</text>
</switch>
</g>
<path
d="M 4150 575 L 4150 375"
fill="none"
stroke="#000000"
stroke-width="5"
stroke-miterlimit="10"
pointer-events="stroke"
id="path122" />
<path
d="M 150 925 L 150 825"
fill="none"
stroke="#b85450"
stroke-opacity="0.5"
stroke-width="20"
stroke-miterlimit="10"
pointer-events="stroke"
id="path124" />
<rect
x="200"
y="825"
width="1650"
height="100"
fill="none"
stroke="none"
pointer-events="all"
id="rect126" />
<g
transform="translate(-0.5 -0.5)scale(5)"
id="g132">
<switch
id="switch130">
<foreignObject
pointer-events="none"
width="100%"
height="100%"
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
style="overflow: visible; text-align: left;">
<xhtml:div
style="display: flex; align-items: unsafe center; justify-content: unsafe flex-start; width: 328px; height: 1px; padding-top: 175px; margin-left: 42px;">
<xhtml:div
style="box-sizing: border-box; font-size: 0px; text-align: left;">
<xhtml:div
style="display: inline-block; font-size: 12px; font-family: Helvetica; color: rgb(0, 0, 0); line-height: 1.2; pointer-events: all; white-space: normal; overflow-wrap: normal;">Timeout not reached because it is rounded up to system tick</xhtml:div>
</xhtml:div>
</xhtml:div>
</foreignObject>
<text
x="42"
y="179"
fill="#000000"
font-family="Helvetica"
font-size="12px"
id="text128">Timeout not reached because it is rounded up to system tick</text>
</switch>
</g>
</g>
<switch
id="switch142">
<g
requiredFeatures="http://www.w3.org/TR/SVG11/feature#Extensibility"
id="g136" />
<a
transform="translate(0,-5)"
xlink:href="https://www.diagrams.net/doc/faq/svg-export-text-problems"
target="_blank"
id="a140">
<text
text-anchor="middle"
font-size="10px"
x="50%"
y="100%"
id="text138">Viewer does not support full SVG 1.1</text>
</a>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB