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}