Remove an unneeded goto in the decompressor; it turns out that the
state of ip_ after decompression (or attempted decompresion) is completely irrelevant, so we don't need the trailer. Performance is, as expected, mostly flat -- there's a curious ~3-5% loss in the "lsp" test, but that test case is so short it is hard to say anything definitive about why (most likely, it's some sort of unrelated effect). R=jeff git-svn-id: https://snappy.googlecode.com/svn/trunk@39 03e5f5b5-db94-4691-08a0-1a8bf15f6143
This commit is contained in:
11
snappy.cc
11
snappy.cc
@@ -673,19 +673,19 @@ class SnappyDecompressor {
|
|||||||
uint32 avail = ip_limit_ - ip;
|
uint32 avail = ip_limit_ - ip;
|
||||||
while (avail < literal_length) {
|
while (avail < literal_length) {
|
||||||
bool allow_fast_path = (avail >= 16);
|
bool allow_fast_path = (avail >= 16);
|
||||||
if (!writer->Append(ip, avail, allow_fast_path)) goto end;
|
if (!writer->Append(ip, avail, allow_fast_path)) return;
|
||||||
literal_length -= avail;
|
literal_length -= avail;
|
||||||
reader_->Skip(peeked_);
|
reader_->Skip(peeked_);
|
||||||
size_t n;
|
size_t n;
|
||||||
ip = reader_->Peek(&n);
|
ip = reader_->Peek(&n);
|
||||||
avail = n;
|
avail = n;
|
||||||
peeked_ = avail;
|
peeked_ = avail;
|
||||||
if (avail == 0) goto end; // Premature end of input
|
if (avail == 0) return; // Premature end of input
|
||||||
ip_limit_ = ip + avail;
|
ip_limit_ = ip + avail;
|
||||||
}
|
}
|
||||||
bool allow_fast_path = (avail >= 16);
|
bool allow_fast_path = (avail >= 16);
|
||||||
if (!writer->Append(ip, literal_length, allow_fast_path)) {
|
if (!writer->Append(ip, literal_length, allow_fast_path)) {
|
||||||
goto end;
|
return;
|
||||||
}
|
}
|
||||||
ip += literal_length;
|
ip += literal_length;
|
||||||
} else {
|
} else {
|
||||||
@@ -694,13 +694,10 @@ class SnappyDecompressor {
|
|||||||
// bit 8).
|
// bit 8).
|
||||||
const uint32 copy_offset = entry & 0x700;
|
const uint32 copy_offset = entry & 0x700;
|
||||||
if (!writer->AppendFromSelf(copy_offset + trailer, length)) {
|
if (!writer->AppendFromSelf(copy_offset + trailer, length)) {
|
||||||
goto end;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
|
||||||
ip_ = ip;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user