> Date: Mon, 18 Mar 2019 14:49:48 +0100 > From: Frederic Cambus <f...@statdns.com> > > Hi tech@, > > Now that efifb(4) supports remapping the framebuffer in write combining > mode, it's on par with inteldrm regarding display performance as for as > rasops(9) is concerned. > > Therefore, I'm proposing reverting changes which were introduced in > rasops32_putchar() in revision 1.8 [1] as they are now also slowing > things down on efifb(4). > > I used a 6.3M text file for testing display performance: > ftp https://norvig.com/big.txt > > The inteldrm and efifb tests were done on the same machine, the > radeondrm ones were done on another (faster) machine. > > Screen size: 1920x1080 > Font size: 16x32 > > Here are the results (3 runs each) of running: time cat big.txt > > inteldrm: > > 2m39.52s real 0m00.00s user 2m39.52s system > 2m39.74s real 0m00.00s user 2m39.84s system > 2m39.74s real 0m00.00s user 2m39.77s system > > inteldrm (with revert diff applied): > > 1m37m76s real 0m00.00s user 1m37m60s system > 1m37m80s real 0m00.00s user 1m37m56s system > 1m37m43s real 0m00.00s user 1m37m47s system > > efifb: > > 2m40.46s real 0m00.00s user 2m39.43s system > 2m39.49s real 0m00.00s user 2m39.52s system > 2m39.45s real 0m00.00s user 2m39.48s system > > efifb (with revert diff applied): > > 1m37m66s real 0m00.00s user 1m37m19s system > 1m37m17s real 0m00.00s user 1m37m22s system > 1m37m15s real 0m00.00s user 1m37m20s system > > radeondrm: > > 4m40.75s real 0m00.00s user 4m39m75s system > 4m39.84s real 0m00.00s user 4m39m85s system > 4m39.68s real 0m00.00s user 4m39m71s system > > radeondrm (with revert diff applied): > > 0m21.08s real 0m00.00s user 0m21.08s system > 0m21.15s real 0m00.00s user 0m21.05s system > 0m21.10s real 0m00.00s user 0m21.06s system > > [1] > http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/sys/dev/rasops/rasops32.c.diff?r1=1.7&r2=1.8 > > Comments? OK?
Those differences are significant! So yes, let's give this a try and commit this. ok kettenis@ > Index: sys/dev/rasops/rasops32.c > =================================================================== > RCS file: /cvs/src/sys/dev/rasops/rasops32.c,v > retrieving revision 1.8 > diff -u -p -r1.8 rasops32.c > --- sys/dev/rasops/rasops32.c 20 Feb 2017 15:35:05 -0000 1.8 > +++ sys/dev/rasops/rasops32.c 18 Mar 2019 08:15:18 -0000 > @@ -69,7 +69,6 @@ rasops32_putchar(void *cookie, int row, > struct rasops_info *ri; > int32_t *dp, *rp; > u_char *fr; > - uint32_t buffer[64]; > > ri = (struct rasops_info *)cookie; > > @@ -91,13 +90,12 @@ rasops32_putchar(void *cookie, int row, > clr[1] = ri->ri_devcmap[(attr >> 24) & 0xf]; > > if (uc == ' ') { > - for (cnt = 0; cnt < width; cnt++) > - buffer[cnt] = clr[0]; > while (height--) { > dp = rp; > DELTA(rp, ri->ri_stride, int32_t *); > > - memcpy(dp, buffer, width << 2); > + for (cnt = width; cnt; cnt--) > + *dp++ = clr[0]; > } > } else { > uc -= ri->ri_font->firstchar; > @@ -111,11 +109,10 @@ rasops32_putchar(void *cookie, int row, > fr += fs; > DELTA(rp, ri->ri_stride, int32_t *); > > - for (cnt = 0; cnt < width; cnt++) { > - buffer[cnt] = clr[(fb >> 31) & 1]; > + for (cnt = width; cnt; cnt--) { > + *dp++ = clr[(fb >> 31) & 1]; > fb <<= 1; > } > - memcpy(dp, buffer, width << 2); > } > } > > >