aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLasse Collin <lasse.collin@tukaani.org>2013-10-22 19:51:55 +0300
committerLasse Collin <lasse.collin@tukaani.org>2013-10-22 19:51:55 +0300
commitba413da1d5bb3324287cf3174922acd921165971 (patch)
tree2cf0bff915d531e97eed46fdc065f281a52a622b
parentliblzma: Support LZMA_FULL_FLUSH and _BARRIER in threaded encoder. (diff)
downloadxz-ba413da1d5bb3324287cf3174922acd921165971.tar.xz
xz: Take advantage of LZMA_FULL_BARRIER with --block-list.
Now if --block-list is used in threaded mode, the encoder won't need to flush at each Block boundary specified via --block-list. This improves performance a lot, making threading helpful with --block-list. The flush timer was reset after LZMA_FULL_FLUSH but since LZMA_FULL_BARRIER doesn't flush, resetting the timer is no longer done.
-rw-r--r--src/xz/coder.c32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/xz/coder.c b/src/xz/coder.c
index 2e76b087..61aa1f40 100644
--- a/src/xz/coder.c
+++ b/src/xz/coder.c
@@ -584,7 +584,7 @@ coder_normal(file_pair *pair)
// opt_block_size bytes of input.
block_remaining -= strm.avail_in;
if (block_remaining == 0)
- action = LZMA_FULL_FLUSH;
+ action = LZMA_FULL_BARRIER;
}
if (action == LZMA_RUN && flush_needed)
@@ -605,21 +605,22 @@ coder_normal(file_pair *pair)
}
if (ret == LZMA_STREAM_END && (action == LZMA_SYNC_FLUSH
- || action == LZMA_FULL_FLUSH)) {
- // Flushing completed. Write the pending data out
- // immediatelly so that the reading side can
- // decompress everything compressed so far. Do this
- // also with LZMA_FULL_FLUSH because if it is combined
- // with timed LZMA_SYNC_FLUSH the same flushing
- // timer can be used.
- if (io_write(pair, &out_buf, IO_BUFFER_SIZE
- - strm.avail_out))
- break;
+ || action == LZMA_FULL_BARRIER)) {
+ if (action == LZMA_SYNC_FLUSH) {
+ // Flushing completed. Write the pending data
+ // out immediatelly so that the reading side
+ // can decompress everything compressed so far.
+ if (io_write(pair, &out_buf, IO_BUFFER_SIZE
+ - strm.avail_out))
+ break;
- strm.next_out = out_buf.u8;
- strm.avail_out = IO_BUFFER_SIZE;
+ strm.next_out = out_buf.u8;
+ strm.avail_out = IO_BUFFER_SIZE;
- if (action == LZMA_FULL_FLUSH) {
+ // Set the time of the most recent flushing.
+ mytime_set_flush_time();
+ } else {
+ // Start a new Block after LZMA_FULL_BARRIER.
if (opt_block_list == NULL) {
block_remaining = opt_block_size;
} else {
@@ -633,9 +634,6 @@ coder_normal(file_pair *pair)
}
}
- // Set the time of the most recent flushing.
- mytime_set_flush_time();
-
// Start a new Block after LZMA_FULL_FLUSH or continue
// the same block after LZMA_SYNC_FLUSH.
action = LZMA_RUN;