code wiki / _hdl_build / nx_drawfb_probe.nx

nx_drawfb_probe.nx source

↩ module page · 73 lines · 3823 B

1// nx_drawfb_probe.nx -- DIAGNOSTIC probe for the REAL painter (br_draw_fb, the one the browser window and 2// NishiOS use): reads _offc/nxhtml.html, lays it out, paints via br_draw_fb (cascade colors path), exports 3// _offc/nxdrawfb.bmp for palette measurement. NOT shipped -- a render-core measurement instrument. 4// license_tier: ORIGINAL 5import "nx_browser_render.nx" 6import "nx_fb.nx" 7const DP_MAGIC_262144: i64 = 262144 8 9func dp_puts(s: *u8) -> i64 { var n: i64=0; while s[n]!=(0 as u8){n=n+1} sys_write(1,s,n); return 0 } 10func dp_num(v: i64) -> i64 { let b: *u8=sys_mmap(28); var m: i64=v; if m<0{m=0-m;sys_write(1,"-" as *u8,1)} let t: *u8=sys_mmap(28); var k: i64=0; if m==0{t[0]=48 as u8;k=1} while m>0{t[k]=(48+(m%10)) as u8;m=m/10;k=k+1} var i: i64=0; while i<k{b[i]=t[k-1-i];i=i+1} sys_write(1,b,k); return 0 } 11 12const DP_W: i64 = 960 13const DP_H: i64 = 900 14 15func main() -> i64 { 16 let lp: *i64 = sys_mmap(16) as *i64 17 let html: *u8 = sys_read_file("_offc/nxhtml.html\x00" as *u8, lp) 18 if lp[0] <= 0 { dp_puts("drawfb_probe: no _offc/nxhtml.html\n" as *u8); return 1 } 19 // DIAG: how much author <style> is extracted + survives the media filter? 20 let dsty: *u8 = sys_mmap(DP_MAGIC_262144) 21 let dext: i64 = rh_extract_styles(html, lp[0], dsty, DP_MAGIC_262144) 22 let dfil: *u8 = sys_mmap(DP_MAGIC_262144) 23 let dfl: i64 = rh_filter_media(dsty, 0, dext, dfil, DP_MAGIC_262144, 1000) 24 dp_puts("author_style: extracted=" as *u8); dp_num(dext); dp_puts(" filtered=" as *u8); dp_num(dfl); dp_puts("\n" as *u8) 25 let page: *Page = sys_mmap(NX_PAGE_BYTES) as *Page 26 page.raw = html 27 page.raw_len = lp[0] 28 br_layout(page, DP_W/2) 29 if page.ok != 1 { dp_puts("drawfb_probe: layout failed\n" as *u8); return 2 } 30 dp_puts("boxes=" as *u8); dp_num(page.tree.count); dp_puts(" page_h=" as *u8); dp_num(page.page_h); dp_puts("\n" as *u8) 31 // DIAG: dump computed `color` decls (prop=="color") -- proves whether author colors reach the cascade 32 var ci2: i64 = 0 33 var ncol: i64 = 0 34 while ci2 < page.ncomp { 35 let cdp: *CssComputedDecl = ((page.computed as i64) + ci2 * NX_CSS_COMPUTED_DECL_BYTES) as *CssComputedDecl 36 if cdp.prop_len == 5 { 37 let sB: *u8 = page.buf 38 if sB[cdp.prop_off]==(99 as u8) { if sB[cdp.prop_off+1]==(111 as u8) { if sB[cdp.prop_off+2]==(108 as u8) { if sB[cdp.prop_off+3]==(111 as u8) { if sB[cdp.prop_off+4]==(114 as u8) { 39 ncol = ncol + 1 40 if ncol <= 10 { 41 dp_puts(" colordecl el=" as *u8); dp_num(cdp.element_idx) 42 dp_puts(" kind=" as *u8); dp_num(cdp.val_kind) 43 dp_puts(" val=" as *u8); sys_write(1, ((sB as i64)+cdp.val_off) as *u8, cdp.val_len) 44 dp_puts("\n" as *u8) 45 } 46 } } } } } 47 } 48 ci2 = ci2 + 1 49 } 50 dp_puts("computed_total=" as *u8); dp_num(page.ncomp); dp_puts(" color_decls=" as *u8); dp_num(ncol); dp_puts("\n" as *u8) 51 let bfb: *Framebuffer = sys_mmap(NX_FRAMEBUFFER_BYTES) as *Framebuffer 52 let bpx: *u8 = sys_mmap(DP_W*DP_H*4 + 64) 53 nx_framebuffer_init(bfb, bpx, DP_W, DP_H) 54 br_draw_fb(bfb, page, DP_W/2, "probe://drawfb\x00" as *u8, 0, 2) 55 // RGBA -> RGB 56 let desk: *u8 = sys_mmap(DP_W*DP_H*3 + 16) 57 var y: i64 = 0 58 while y < DP_H { 59 var x: i64 = 0 60 while x < DP_W { 61 let so: i64 = (y*DP_W + x)*4 62 let dofs: i64 = (y*DP_W + x)*3 63 desk[dofs] = bpx[so] 64 desk[dofs+1] = bpx[so+1] 65 desk[dofs+2] = bpx[so+2] 66 x = x + 1 67 } 68 y = y + 1 69 } 70 let sz: i64 = fb_bmp_save(desk, DP_W, DP_H, "_offc/nxdrawfb.bmp\x00" as *u8) 71 dp_puts("drawfb_probe: wrote _offc/nxdrawfb.bmp bytes=" as *u8); dp_num(sz); dp_puts("\n" as *u8) 72 return 0 73}