code wiki / _hdl_build / nx_vecpaint_test.nx
nx_vecpaint_test.nx source
↩ module page · 47 lines · 2675 B
1// nx_vecpaint_test.nx -- verify vector typography is now FAST for the GUI: render a 720px VIEWPORT (not the
2// full page) with vec_headings=2 via br_draw_fb_at, at scroll=0 and scrolled, timed. With viewport culling
3// this should be a few ms (only visible boxes rastered) instead of ~108s (all 2990 boxes).
4import "nx_syscalls.nx"
5import "nx_browser_render.nx"
6
7func pw(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 }
8func pn(v: i64) -> i64 {
9 if v==0 { pw("0" as *u8); return 0 }
10 var m: i64=v; if m<0 { pw("-" as *u8); m=0-m }
11 let b: *u8=sys_mmap(24); var k: i64=0
12 while m>0 { b[k]=(48+(m%10)) as u8; m=m/10; k=k+1 }
13 var i: i64=k-1; while i>=0 { sys_write(1,((b as i64)+i) as *u8,1); i=i-1 }
14 return 0
15}
16
17func main(argc: i64, argv: *i64) -> i64 {
18 let lenp: *i64 = sys_mmap(8) as *i64
19 let buf: *u8 = sys_read_file("/tmp/wb.html\x00" as *u8, lenp)
20 if (buf as i64)==0 { pw("READ FAIL\n" as *u8); return 1 }
21 let page: *Page = sys_mmap(NX_PAGE_BYTES) as *Page
22 page.raw = buf; page.raw_len = lenp[0]; page.dark_mode = 0
23 br_layout(page, 1024)
24 pw("page_h=" as *u8); pn(page.page_h); pw("\n" as *u8)
25 let fb2: *u8 = sys_mmap(1024*720*4)
26 let fbs: *Framebuffer = sys_mmap(NX_FRAMEBUFFER_BYTES) as *Framebuffer
27 nx_framebuffer_init(fbs, fb2, 1024, 720)
28 // bitmap baseline
29 page.vec_headings = 0; br_set_fast_vec(0)
30 let t0: i64 = sys_now_us(); br_draw_fb_at(fbs, page, 1024, "http://x\x00" as *u8, 8, 1, 0); let t1: i64 = sys_now_us()
31 pw("bitmap VIEWPORT paint_ms=" as *u8); pn((t1-t0)/1000); pw("\n" as *u8)
32 // ATLAS body-vector: first render builds the glyph cache, second is fully warm (= steady-state scroll cost)
33 page.vec_headings = 2; br_set_fast_vec(1)
34 let t2: i64 = sys_now_us(); br_draw_fb_at(fbs, page, 1024, "http://x\x00" as *u8, 8, 1, 0); let t3: i64 = sys_now_us()
35 pw("ATLAS body-vec (cold) VIEWPORT paint_ms=" as *u8); pn((t3-t2)/1000); pw("\n" as *u8)
36 let t4: i64 = sys_now_us(); br_draw_fb_at(fbs, page, 1024, "http://x\x00" as *u8, 8, 1, 200); let t5: i64 = sys_now_us()
37 pw("ATLAS body-vec (warm) VIEWPORT paint_ms=" as *u8); pn((t5-t4)/1000); pw("\n" as *u8)
38 // dump the atlas render @scroll=0 to a PNG to eyeball quality
39 br_draw_fb_at(fbs, page, 1024, "http://x\x00" as *u8, 8, 1, 0)
40 let rgb: *u8 = sys_mmap(1024*720*3 + 64)
41 var p: i64 = 0
42 while p < 1024*720 { rgb[p*3]=fb2[p*4]; rgb[p*3+1]=fb2[p*4+1]; rgb[p*3+2]=fb2[p*4+2]; p=p+1 }
43 nx_png_write_rgb("/tmp/atlas_view.png\x00" as *u8, rgb, 1024, 720)
44 pw("wrote /tmp/atlas_view.png\n" as *u8)
45 pw("OK\n" as *u8)
46 return 0
47}