summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan Harrison <rharrison@chromium.org>2018-04-23 21:09:33 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-04-23 21:09:33 +0000
commit1e95aeadd33fc4a13f5579501f81b6d5edc7cc05 (patch)
tree3a59f03455222b98d0123bb74fee44f3fb69b328
parent4e4147eccd25e66a5c61712121c30c8d5f2ba56c (diff)
downloadpdfium-1e95aeadd33fc4a13f5579501f81b6d5edc7cc05.tar.xz
Pre-allocate more string buffers in barcode code
Another couple of examples where the slow down in the barcode code can be fixed by reserving and thus pre-allocating the buffer that backs the Widestring. Doing += in a tight loop caused reallocation thrashing. BUG=chromium:834630 Change-Id: I48a802225351bcaf992c324732fddf81639b4898 Reviewed-on: https://pdfium-review.googlesource.com/31230 Commit-Queue: Ryan Harrison <rharrison@chromium.org> Reviewed-by: Henrique Nakashima <hnakashima@chromium.org>
-rw-r--r--fxbarcode/datamatrix/BC_Base256Encoder.cpp1
-rw-r--r--fxbarcode/datamatrix/BC_EncoderContext.cpp3
2 files changed, 3 insertions, 1 deletions
diff --git a/fxbarcode/datamatrix/BC_Base256Encoder.cpp b/fxbarcode/datamatrix/BC_Base256Encoder.cpp
index b7dd69c0f7..1010cfe32c 100644
--- a/fxbarcode/datamatrix/BC_Base256Encoder.cpp
+++ b/fxbarcode/datamatrix/BC_Base256Encoder.cpp
@@ -35,6 +35,7 @@ int32_t CBC_Base256Encoder::getEncodingMode() {
}
void CBC_Base256Encoder::Encode(CBC_EncoderContext& context, int32_t& e) {
WideString buffer;
+ buffer.Reserve(context.getRemainingCharacters() + 1);
buffer += L'\0';
while (context.hasMoreCharacters()) {
wchar_t c = context.getCurrentChar();
diff --git a/fxbarcode/datamatrix/BC_EncoderContext.cpp b/fxbarcode/datamatrix/BC_EncoderContext.cpp
index fe0a497d58..d9823bffe2 100644
--- a/fxbarcode/datamatrix/BC_EncoderContext.cpp
+++ b/fxbarcode/datamatrix/BC_EncoderContext.cpp
@@ -33,8 +33,9 @@ CBC_EncoderContext::CBC_EncoderContext(const WideString& msg,
int32_t& e) {
ByteString dststr;
CBC_UtilCodingConvert::UnicodeToUTF8(msg, dststr);
- WideString sb;
size_t c = dststr.GetLength();
+ WideString sb;
+ sb.Reserve(c);
for (size_t i = 0; i < c; i++) {
wchar_t ch = static_cast<wchar_t>(dststr[i] & 0xff);
if (ch == '?' && dststr[i] != '?') {