Avoid some unnecessary copying in CPDF_TextPage.
Use const-ref or other means as appropriate to avoid unnecessarily
copying PAGECHAR_INFO/CFX_FloatRect objects.
Change-Id: Iabb81f38ae9afba282f3ee289df9259a820587e7
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/60650
Reviewed-by: dsinclair <dsinclair@chromium.org>
Commit-Queue: dsinclair <dsinclair@chromium.org>
diff --git a/core/fpdftext/cpdf_textpage.cpp b/core/fpdftext/cpdf_textpage.cpp
index 4c99247..82cbae0 100644
--- a/core/fpdftext/cpdf_textpage.cpp
+++ b/core/fpdftext/cpdf_textpage.cpp
@@ -337,7 +337,7 @@
int curPos = start;
bool bFlagNewRect = true;
while (nCount--) {
- PAGECHAR_INFO info_curchar = m_CharList[curPos++];
+ const PAGECHAR_INFO& info_curchar = m_CharList[curPos++];
if (info_curchar.m_Flag == FPDFTEXT_CHAR_GENERATED)
continue;
if (info_curchar.m_CharBox.Width() < kSizeEpsilon ||
@@ -357,11 +357,7 @@
rect.Normalize();
continue;
}
- info_curchar.m_CharBox.Normalize();
- rect.left = std::min(rect.left, info_curchar.m_CharBox.left);
- rect.right = std::max(rect.right, info_curchar.m_CharBox.right);
- rect.top = std::max(rect.top, info_curchar.m_CharBox.top);
- rect.bottom = std::min(rect.bottom, info_curchar.m_CharBox.bottom);
+ rect.Union(info_curchar.m_CharBox);
}
rects.push_back(rect);
return rects;
@@ -378,21 +374,20 @@
double ydif = 5000;
const int nCount = CountChars();
for (pos = 0; pos < nCount; ++pos) {
- PAGECHAR_INFO charinfo = m_CharList[pos];
- CFX_FloatRect charrect = charinfo.m_CharBox;
- if (charrect.Contains(point))
+ const CFX_FloatRect& orig_charrect = m_CharList[pos].m_CharBox;
+ if (orig_charrect.Contains(point))
break;
if (tolerance.width <= 0 && tolerance.height <= 0)
continue;
- CFX_FloatRect charRectExt;
+ CFX_FloatRect charrect = orig_charrect;
charrect.Normalize();
- charRectExt.left = charrect.left - tolerance.width / 2;
- charRectExt.right = charrect.right + tolerance.width / 2;
- charRectExt.top = charrect.top + tolerance.height / 2;
- charRectExt.bottom = charrect.bottom - tolerance.height / 2;
- if (!charRectExt.Contains(point))
+ CFX_FloatRect char_rect_ext(charrect.left - tolerance.width / 2,
+ charrect.bottom - tolerance.height / 2,
+ charrect.right + tolerance.width / 2,
+ charrect.top + tolerance.height / 2);
+ if (!char_rect_ext.Contains(point))
continue;
double curXdif =
@@ -1354,8 +1349,7 @@
float dbXdif = fabs(rcPreObj.left - rcCurObj.left);
size_t nCount = m_CharList.size();
if (nCount >= 2) {
- PAGECHAR_INFO perCharTemp = m_CharList[nCount - 2];
- float dbSpace = perCharTemp.m_CharBox.Width();
+ float dbSpace = m_CharList[nCount - 2].m_CharBox.Width();
if (dbXdif > dbSpace)
return false;
}