ACK On Mon, Sep 24, 2012 at 10:49:18AM -0500, Aric Stewart wrote: > eliminates a function call and many object references for performance > > > Signed-off-by: Aric Stewart <aric@xxxxxxxxxxxxxxx> > --- > quic.js | 134 ++++++++++++++++++++++++++++++++++---------------------------- > 1 files changed, 73 insertions(+), 61 deletions(-) > > diff --git a/quic.js b/quic.js > index 0bae57e..0e33610 100644 > --- a/quic.js > +++ b/quic.js > @@ -748,16 +748,12 @@ QuicEncoder.prototype.quic_rgb32_uncompress_row_seg = function( prev_row, cur_ro > var waitmask = bppmask[this.rgb_state.wmidx]; > > var a; > - var b = { > - i: i, > - run_index: 0, > - stopidx: 0, > - run_end: 0, > - end : end > - }; > + var run_index = 0; > + var stopidx = 0; > + var run_end = 0; > var c; > > - if (!b.i) > + if (!i) > { > cur_row[rgb32_pixel_pad] = 0; > > @@ -778,25 +774,45 @@ QuicEncoder.prototype.quic_rgb32_uncompress_row_seg = function( prev_row, cur_ro > this.channels[c].find_bucket_8bpc(this.channels[c].correlate_row.zero).update_model_8bpc(this.rgb_state, this.channels[c].correlate_row.row[0], bpc); > } while (++c < n_channels); > } > - b.stopidx = ++b.i + this.rgb_state.waitcnt; > + stopidx = ++i + this.rgb_state.waitcnt; > } else { > - b.stopidx = b.i + this.rgb_state.waitcnt; > + stopidx = i + this.rgb_state.waitcnt; > } > for (;;) { > - b.rc = 0; > - while (b.stopidx < b.end && !b.rc) { > - for (; b.i <= b.stopidx && !b.rc; b.i++) { > - var pixel = b.i * rgb32_pixel_size; > - var pixelm1 = (b.i-1) * rgb32_pixel_size; > - var pixelm2 = (b.i-2) * rgb32_pixel_size; > + rc = 0; > + while (stopidx < end && !rc) { > + for (; i <= stopidx && !rc; i++) { > + var pixel = i * rgb32_pixel_size; > + var pixelm1 = (i-1) * rgb32_pixel_size; > + var pixelm2 = (i-2) * rgb32_pixel_size; > > if ( prev_row[pixelm1+rgb32_pixel_r] == prev_row[pixel+rgb32_pixel_r] && prev_row[pixelm1+rgb32_pixel_g] == prev_row[pixel+rgb32_pixel_g] && prev_row[pixelm1 + rgb32_pixel_b] == prev_row[pixel+rgb32_pixel_b]) > { > - if (b.run_index != b.i && b.i > 2 && (cur_row[pixelm1+rgb32_pixel_r] == cur_row[pixelm2+rgb32_pixel_r] && cur_row[pixelm1+rgb32_pixel_g] == cur_row[pixelm2+rgb32_pixel_g] && cur_row[pixelm1+rgb32_pixel_b] == cur_row[pixelm2+rgb32_pixel_b])) > + if (run_index != i && i > 2 && (cur_row[pixelm1+rgb32_pixel_r] == cur_row[pixelm2+rgb32_pixel_r] && cur_row[pixelm1+rgb32_pixel_g] == cur_row[pixelm2+rgb32_pixel_g] && cur_row[pixelm1+rgb32_pixel_b] == cur_row[pixelm2+rgb32_pixel_b])) > { > - this.do_run(b, cur_row); > - if (b.rc === 2) return; > - else break; > + /* do run */ > + this.rgb_state.waitcnt = stopidx - i; > + run_index = i; > + run_end = i + this.decode_run(); > + > + for (; i < run_end; i++) { > + var pixel = i * rgb32_pixel_size; > + var pixelm1 = (i-1) * rgb32_pixel_size; > + cur_row[pixel+rgb32_pixel_pad] = 0; > + cur_row[pixel+rgb32_pixel_r] = cur_row[pixelm1+rgb32_pixel_r]; > + cur_row[pixel+rgb32_pixel_g] = cur_row[pixelm1+rgb32_pixel_g]; > + cur_row[pixel+rgb32_pixel_b] = cur_row[pixelm1+rgb32_pixel_b]; > + } > + > + if (i == end) { > + return; > + } > + else > + { > + stopidx = i + this.rgb_state.waitcnt; > + rc = 1; > + break; > + } > } > } > > @@ -806,35 +822,55 @@ QuicEncoder.prototype.quic_rgb32_uncompress_row_seg = function( prev_row, cur_ro > var cc = this.channels[c]; > var cr = cc.correlate_row; > > - a = golomb_decoding_8bpc(cc.find_bucket_8bpc(cr.row[b.i-1]).bestcode, this.io_word); > - cr.row[b.i] = a.rc; > + a = golomb_decoding_8bpc(cc.find_bucket_8bpc(cr.row[i-1]).bestcode, this.io_word); > + cr.row[i] = a.rc; > cur_row[pixel+(2-c)] = (family_8bpc.xlatL2U[a.rc] + ((cur_row[pixelm1+(2-c)] + prev_row[pixel+(2-c)]) >> 1)) & bpc_mask; > this.decode_eatbits(a.codewordlen); > } while (++c < n_channels); > } > - if (b.rc) > + if (rc) > break; > > c = 0; > do { > - this.channels[c].find_bucket_8bpc(this.channels[c].correlate_row.row[b.stopidx - 1]).update_model_8bpc(this.rgb_state, this.channels[c].correlate_row.row[b.stopidx], bpc); > + this.channels[c].find_bucket_8bpc(this.channels[c].correlate_row.row[stopidx - 1]).update_model_8bpc(this.rgb_state, this.channels[c].correlate_row.row[stopidx], bpc); > } while (++c < n_channels); > > - b.stopidx = b.i + (this.rgb_state.tabrand() & waitmask); > + stopidx = i + (this.rgb_state.tabrand() & waitmask); > } > > - for (; b.i < b.end && !b.rc; b.i++) { > - var pixel = b.i * rgb32_pixel_size; > - var pixelm1 = (b.i-1) * rgb32_pixel_size; > - var pixelm2 = (b.i-2) * rgb32_pixel_size; > + for (; i < end && !rc; i++) { > + var pixel = i * rgb32_pixel_size; > + var pixelm1 = (i-1) * rgb32_pixel_size; > + var pixelm2 = (i-2) * rgb32_pixel_size; > > if (prev_row[pixelm1+rgb32_pixel_r] == prev_row[pixel+rgb32_pixel_r] && prev_row[pixelm1+rgb32_pixel_g] == prev_row[pixel+rgb32_pixel_g] && prev_row[pixelm1+rgb32_pixel_b] == prev_row[pixel+rgb32_pixel_b]) > { > - if (b.run_index != b.i && b.i > 2 && (cur_row[pixelm1+rgb32_pixel_r] == cur_row[pixelm2+rgb32_pixel_r] && cur_row[pixelm1+rgb32_pixel_g] == cur_row[pixelm2+rgb32_pixel_g] && cur_row[pixelm1+rgb32_pixel_b] == cur_row[pixelm2+rgb32_pixel_b])) > + if (run_index != i && i > 2 && (cur_row[pixelm1+rgb32_pixel_r] == cur_row[pixelm2+rgb32_pixel_r] && cur_row[pixelm1+rgb32_pixel_g] == cur_row[pixelm2+rgb32_pixel_g] && cur_row[pixelm1+rgb32_pixel_b] == cur_row[pixelm2+rgb32_pixel_b])) > { > - this.do_run(b, cur_row); > - if (b.rc==2) return; > - else break; > + /* do run */ > + this.rgb_state.waitcnt = stopidx - i; > + run_index = i; > + run_end = i + this.decode_run(); > + > + for (; i < run_end; i++) { > + var pixel = i * rgb32_pixel_size; > + var pixelm1 = (i-1) * rgb32_pixel_size; > + cur_row[pixel+rgb32_pixel_pad] = 0; > + cur_row[pixel+rgb32_pixel_r] = cur_row[pixelm1+rgb32_pixel_r]; > + cur_row[pixel+rgb32_pixel_g] = cur_row[pixelm1+rgb32_pixel_g]; > + cur_row[pixel+rgb32_pixel_b] = cur_row[pixelm1+rgb32_pixel_b]; > + } > + > + if (i == end) { > + return; > + } > + else > + { > + stopidx = i + this.rgb_state.waitcnt; > + rc = 1; > + break; > + } > } > } > > @@ -842,16 +878,16 @@ QuicEncoder.prototype.quic_rgb32_uncompress_row_seg = function( prev_row, cur_ro > c = 0; > do > { > - a = golomb_decoding_8bpc(this.channels[c].find_bucket_8bpc(this.channels[c].correlate_row.row[b.i-1]).bestcode, this.io_word); > - this.channels[c].correlate_row.row[b.i] = a.rc; > + a = golomb_decoding_8bpc(this.channels[c].find_bucket_8bpc(this.channels[c].correlate_row.row[i-1]).bestcode, this.io_word); > + this.channels[c].correlate_row.row[i] = a.rc; > cur_row[pixel+(2-c)] = (family_8bpc.xlatL2U[a.rc] + ((cur_row[pixelm1+(2-c)] + prev_row[pixel+(2-c)]) >> 1)) & bpc_mask; > this.decode_eatbits(a.codewordlen); > } while (++c < n_channels); > } > > - if (!b.rc) > + if (!rc) > { > - this.rgb_state.waitcnt = b.stopidx - b.end; > + this.rgb_state.waitcnt = stopidx - end; > return; > } > } > @@ -897,30 +933,6 @@ QuicEncoder.prototype.decode_run = function() > return runlen; > } > > -QuicEncoder.prototype.do_run = function(b, cur_row) > -{ > - this.rgb_state.waitcnt = b.stopidx - b.i; > - b.run_index = b.i; > - b.run_end = b.i + this.decode_run(); > - > - for (; b.i < b.run_end; b.i++) { > - var pixel = b.i * rgb32_pixel_size; > - var pixelm1 = (b.i-1) * rgb32_pixel_size; > - cur_row[pixel+rgb32_pixel_pad] = 0; > - cur_row[pixel+rgb32_pixel_r] = cur_row[pixelm1+rgb32_pixel_r]; > - cur_row[pixel+rgb32_pixel_g] = cur_row[pixelm1+rgb32_pixel_g]; > - cur_row[pixel+rgb32_pixel_b] = cur_row[pixelm1+rgb32_pixel_b]; > - } > - > - if (b.i == b.end) { > - b.rc = 2; > - return; > - } > - > - b.stopidx = b.i + this.rgb_state.waitcnt; > - b.rc = 1; > -} > - > QuicEncoder.prototype.quic_rgb32_uncompress_row = function (prev_row, cur_row) > { > var bpc = 8; > -- > 1.7.7.5 (Apple Git-26) > > > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel
Attachment:
pgpfA50mK0d0T.pgp
Description: PGP signature
_______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel