skip to content
==> tests/load_text.c <==
1/* The text of an empty sample, and of a machine and a wasm program with figures, against what load.rs prints. */
2#define _XOPEN_SOURCE 700 /* sexc compiles tests without the package's cflags (reported) */
3#include "mesh/abi.h"
4#include "mesh/check.h"
5#include "mesh/load_text.h"
6#include "mesh/manifest.h"
7#include "mesh/manifest_encode.h"
8#include "mesh/prog_table.h"
9
10#include <stdlib.h>
11#include <string.h>
12
13int main(void) {
14    static _Atomic bool quit;
15    mesh_mailbox mb = mesh_mailbox_test();
16    mesh_shared *sh = mesh_shared_new(mb, "/tmp", false, 0, 1, &quit);
17    mesh_buf t = MESH_BUF_INIT;
18    mesh_load_text(sh, &t);
19    CHECK_S(mesh_buf_str(&t),
20            "load samples 0 age_ms - sample_us 0\n"
21            "gpu share - share10 - slice_us - gap_us - max_gap_us 0 gaps_s 0.0 observed 0.00 inflate - queue_us 0.0 util_ext -\n"
22            "cpu util 0.000 big 0.000 little 0.000 iowait 0.000 cpus 0 big 0 little 0 loadavg 0.00 0.00 0.00\n"
23            "cores \n"
24            "psi -\n"
25            "mem total_mb 0 avail_mb 0 free 0.000 swap_mb 0/0 swap_out_s 0.0 compressed_mb 0 level -\n"
26            "meshd cpu 0.000 rss_mb 0.0 threads 0 log_dropped 0\n"
27            "exec cpu 0.000 rss_mb 0.0 wasm_lanes 0 workers 0 spawns 0 crashes 0\n"
28            "disk free_mb 0 total_mb 0\n"
29            "thermal - temp_c -\n");
30    /* Two cores, PSI, a wasm program with latencies. */
31    mesh_host_block_set_u32(&sh->host, MESH_S_LOAD_FLAGS, MESH_LF_GPU | MESH_LF_PSI | MESH_LF_CLASSES);
32    mesh_host_block_set_f32(&sh->host, MESH_S_GPU_SHARE, 0.478f);
33    mesh_host_block_set_f32(&sh->host, MESH_S_GPU_INFLATE, 2.0833f);
34    mesh_host_block_set_u32(&sh->host, MESH_S_CPUS, 2);
35    uint8_t cores[4] = {50, 0xff, 1, 2};
36    mesh_host_field fl[2] = {{MESH_S_CORE_UTIL, cores, 2}, {MESH_S_CORE_CLASS, cores + 2, 2}};
37    mesh_host_block_set_many(&sh->host, fl, 2);
38    mesh_host_block_set_f32(&sh->host, MESH_S_PSI_CPU, 0.3f);
39    mesh_manifest m;
40    char *err = NULL;
41    const char *mt = "name = \"pipesink\"\nabi = 6\nbackends = [\"wasm\"]";
42    CHECK(mesh_manifest_parse(mt, strlen(mt), &m, &err));
43    mesh_image im;
44    memset(&im, 0, sizeof im);
45    uint8_t e[MESH_PT_BYTES], x[MESH_PX_BYTES];
46    mesh_manifest_encode_entry(&m, &im, e);
47    mesh_manifest_encode_ext(&m, x);
48    x[MESH_PX_EXEC] = MESH_BACKEND_WASM;
49    mesh_pt_write_entry(mb, 2, e, x, MESH_ST_RUNNING);
50    size_t p = mesh_pload(2);
51    mesh_host_block_set_u32(&sh->host, p + MESH_PL_FLAGS, MESH_PLF_LOADED | MESH_PLF_LAT | MESH_PLF_HOST);
52    mesh_host_block_set_f32(&sh->host, p + MESH_PL_P50_US, 1500.0f);
53    mesh_host_block_set_u32(&sh->host, p + MESH_PL_LAT_N, 10);
54    mesh_host_block_set_u64(&sh->host, p + MESH_PL_RSS, 3u << 20);
55    mesh_host_block_set_u32(&sh->host, p + MESH_PL_UNITS, 2);
56    mesh_buf_clear(&t);
57    mesh_load_text(sh, &t);
58    const char *s = mesh_buf_str(&t);
59    CHECK(strstr(s, "gpu share 0.478 share10 0.000 slice_us 0 gap_us 0 max_gap_us 0 gaps_s 0.0 observed 0.00 inflate 2.08 ") != NULL);
60    CHECK(strstr(s, "cores B50 L-\n") != NULL);
61    CHECK(strstr(s, "psi cpu 0.3000 mem 0.0000 mem_full 0.0000 io 0.0000 io_full 0.0000 avg10 cpu 0.0000 mem 0.0000 io 0.0000\n") != NULL);
62    CHECK(strstr(s, "program pipesink slot 2 share - share10 - slice_us - gap_us - max_gap_us 0 observed 0.000 p50_us 1500.0 p90_us 0.0 p99_us 0.0 "
63                    "max_us 0.0 lat_n 10 task_us - tasks_s 0.0 busy 0.000 queue_us 0.0 exec wasm cpu 0.000 cpu10 0.000 cpu_task_us 0.0 cpu_ms 0 "
64                    "rss_mb 3.0 units 2\n") != NULL);
65    mesh_manifest_free(&m);
66    mesh_buf_free(&t);
67    mesh_shared_free(sh);
68    free(mb.base);
69    return mesh_check_done();
70}