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 cf21312d8d
commit e91fd5ece9
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).
```
I (4310) eventfd_example: Time: 1.99s
I (4310) eventfd_example: Select timeout
I (4310) eventfd_example: =================================
I (4310) eventfd_example: Select timeouted for 1 times
I (4320) eventfd_example: Timer triggerred for 0 times
I (4320) eventfd_example: Progress triggerred for 0 times
I (4330) eventfd_example: =================================
I (4810) eventfd_example: Time: 2.50s
I (4810) eventfd_example: TimerEvent fd event triggered
I (5810) eventfd_example: Time: 3.49s
I (5810) eventfd_example: Progress fd event triggered
I (7310) eventfd_example: Time: 5.00s
I (7310) eventfd_example: TimerEvent fd event triggered
I (9310) eventfd_example: Time: 6.99s
I (9310) eventfd_example: Select timeout
I (9310) eventfd_example: Time: 6.99s
I (9310) eventfd_example: Progress fd event triggered
I (9810) eventfd_example: Time: 7.50s
I (9810) eventfd_example: TimerEvent fd event triggered
I (11810) eventfd_example: Time: 9.49s
I (11810) eventfd_example: Select timeout
I (12310) eventfd_example: Time: 10.00s
I (12310) eventfd_example: TimerEvent fd event triggered
I (12810) eventfd_example: Time: 10.49s
I (12810) eventfd_example: Progress fd event triggered
I (14810) eventfd_example: Time: 12.49s
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: =================================
I (4340) eventfd_example: Elapsed since test start: 2003 ms
I (4340) eventfd_example: Select timeout
I (4830) eventfd_example: Elapsed since test start: 2499 ms
I (4830) eventfd_example: TimerEvent fd event triggered
I (5830) eventfd_example: Elapsed since test start: 3493 ms
I (5830) eventfd_example: Progress fd event triggered
I (7330) eventfd_example: Elapsed since test start: 4999 ms
I (7330) eventfd_example: TimerEvent fd event triggered
I (7330) eventfd_example: =================================
I (7340) eventfd_example: Select timeouted for 1 times
I (7340) eventfd_example: Timer triggerred for 2 times
I (7350) eventfd_example: Progress triggerred for 1 times
I (7360) eventfd_example: =================================
I (9330) eventfd_example: Elapsed since test start: 6993 ms
I (9330) eventfd_example: Progress fd event triggered
I (9830) eventfd_example: Elapsed since test start: 7499 ms
I (9830) eventfd_example: TimerEvent fd event triggered
I (11840) eventfd_example: Elapsed since test start: 9503 ms
I (11840) eventfd_example: Select timeout
I (12330) eventfd_example: Elapsed since test start: 9999 ms
I (12330) eventfd_example: TimerEvent fd event triggered
I (12330) eventfd_example: =================================
I (12340) eventfd_example: Select timeouted for 2 times
I (12340) eventfd_example: Timer triggerred for 4 times
I (12350) eventfd_example: Progress triggerred for 2 times
I (12360) 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)
exp_list = [
'eventfd_example: Select timeouted for 4 times',
'eventfd_example: Timer triggerred for 4 times',
'eventfd_example: Progress triggerred for 3 times',
exp_list_5seconds = [
'eventfd_example: Select timeouted for 1 times',
'eventfd_example: Timer triggerred for 2 times',
'eventfd_example: Progress triggerred for 1 times',
]
Utility.console_log('Expecting:{}{}'.format(os.linesep, os.linesep.join(exp_list)))
dut.expect_all(*exp_list, timeout=60)
exp_list_10seconds = [
'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__':

View File

@ -28,11 +28,15 @@
#define PROGRESS_INTERVAL_MS 3500
#define TIMER_SIGNAL 1
#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";
int s_timer_fd;
int s_progress_fd;
static int s_timer_fd;
static int s_progress_fd;
static TaskHandle_t s_worker_handle;
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)
{
/* Wait for the collector to be ready. */
ulTaskNotifyTake(true, portMAX_DELAY);
while (true) {
vTaskDelay(pdMS_TO_TICKS(PROGRESS_INTERVAL_MS));
uint64_t signal = PROGRESS_SIGNAL;
@ -102,7 +109,12 @@ static void collector_task(void *arg)
int timer_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;
uint64_t signal;
@ -117,9 +129,7 @@ static void collector_task(void *arg)
int num_triggered = select(maxFd + 1, &readfds, NULL, NULL, &timeout);
assert(num_triggered >= 0);
uint64_t task_counter_value;
timer_get_counter_value(TIMER_GROUP_0, TIMER_0, &task_counter_value);
ESP_LOGI(TAG, "Time: %.2fs", (double)task_counter_value / TIMER_SCALE);
ESP_LOGI(TAG, "Elapsed since test start: %lld ms", (esp_timer_get_time() - start) / 1000);
if (FD_ISSET(s_progress_fd, &readfds)) {
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");
}
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, "Select timeouted for %d times", select_timeout_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, "=================================");
previous = current;
}
}
@ -160,6 +173,7 @@ static void collector_task(void *arg)
void app_main(void)
{
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);
}

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