==> 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}