mirror of
https://github.com/golang/go
synced 2024-11-25 02:07:58 -07:00
Optimize exp/draw/x11 flusher inner loop.
On my laptop, time to prepare and write 800x600 pixels over the socket falls from 125-ish ms to 80-ish ms. Thanks to Roger Peppe for the suggestion. R=r CC=golang-dev https://golang.org/cl/1228044
This commit is contained in:
parent
6a060200cc
commit
0c662f60a5
@ -91,18 +91,18 @@ func (c *conn) flusher() {
|
|||||||
close(c.flush)
|
close(c.flush)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
p := c.img.Pixel[y]
|
||||||
for x := 0; x < w; {
|
for x := 0; x < w; {
|
||||||
nx := w - x
|
nx := w - x
|
||||||
if nx > len(c.flushBuf1)/4 {
|
if nx > len(c.flushBuf1)/4 {
|
||||||
nx = len(c.flushBuf1) / 4
|
nx = len(c.flushBuf1) / 4
|
||||||
}
|
}
|
||||||
for i := 0; i < nx; i++ {
|
for i, rgba := range p[x : x+nx] {
|
||||||
r, g, b, _ := c.img.At(x, y).RGBA()
|
c.flushBuf1[4*i+0] = rgba.B
|
||||||
c.flushBuf1[4*i+0] = uint8(b >> 24)
|
c.flushBuf1[4*i+1] = rgba.G
|
||||||
c.flushBuf1[4*i+1] = uint8(g >> 24)
|
c.flushBuf1[4*i+2] = rgba.R
|
||||||
c.flushBuf1[4*i+2] = uint8(r >> 24)
|
|
||||||
x++
|
|
||||||
}
|
}
|
||||||
|
x += nx
|
||||||
_, err := c.w.Write(c.flushBuf1[0 : 4*nx])
|
_, err := c.w.Write(c.flushBuf1[0 : 4*nx])
|
||||||
if err != nil {
|
if err != nil {
|
||||||
close(c.flush)
|
close(c.flush)
|
||||||
|
Loading…
Reference in New Issue
Block a user