summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Pena <npm@chromium.org>2018-05-08 19:13:28 +0000
committerChromium commit bot <commit-bot@chromium.org>2018-05-08 19:13:28 +0000
commit5de481e71bcde25d31452b23a017bb783163a204 (patch)
tree69a83cba07d67550f65ba27633ab1ad40e5035ae
parent12d61f16381da571c7f435c9c4f9bd51daa57222 (diff)
downloadpdfium-5de481e71bcde25d31452b23a017bb783163a204.tar.xz
Remove almost all usages of CFX_FixedBufGrow with std::vector
Tested by running safetynet_compare.py on this patch vs master. The results were 0 regressions and 0 improvements. The two remaining usages cannot be replaced because they would cause a regression. Bug: pdfium:177 Change-Id: I43eddf4ffaac2eb063f2004d6606bc3cd6e627ac Reviewed-on: https://pdfium-review.googlesource.com/32159 Reviewed-by: dsinclair <dsinclair@chromium.org> Reviewed-by: Tom Sepez <tsepez@chromium.org> Commit-Queue: Nicolás Peña Moreno <npm@chromium.org>
-rw-r--r--core/fpdfapi/page/cpdf_colorspace.cpp47
-rw-r--r--core/fpdfapi/render/cpdf_dibsource.cpp12
-rw-r--r--core/fpdfapi/render/cpdf_renderstatus.cpp56
-rw-r--r--core/fxcodec/codec/fx_codec_icc.cpp19
-rw-r--r--core/fxge/apple/fx_apple_platform.cpp17
5 files changed, 59 insertions, 92 deletions
diff --git a/core/fpdfapi/page/cpdf_colorspace.cpp b/core/fpdfapi/page/cpdf_colorspace.cpp
index 3cdc96a000..d7fb18edd7 100644
--- a/core/fpdfapi/page/cpdf_colorspace.cpp
+++ b/core/fpdfapi/page/cpdf_colorspace.cpp
@@ -31,7 +31,6 @@
#include "core/fpdfdoc/cpdf_action.h"
#include "core/fxcodec/codec/ccodec_iccmodule.h"
#include "core/fxcodec/fx_codec.h"
-#include "core/fxcrt/cfx_fixedbufgrow.h"
#include "core/fxcrt/fx_memory.h"
#include "core/fxcrt/maybe_owned.h"
#include "third_party/base/stl_util.h"
@@ -574,8 +573,7 @@ void CPDF_ColorSpace::TranslateImageLine(uint8_t* dest_buf,
int image_width,
int image_height,
bool bTransMask) const {
- CFX_FixedBufGrow<float, 16> srcbuf(m_nComponents);
- float* src = srcbuf;
+ std::vector<float> src(m_nComponents);
float R;
float G;
float B;
@@ -583,7 +581,7 @@ void CPDF_ColorSpace::TranslateImageLine(uint8_t* dest_buf,
for (int i = 0; i < pixels; i++) {
for (uint32_t j = 0; j < m_nComponents; j++)
src[j] = static_cast<float>(*src_buf++) / divisor;
- GetRGB(src, &R, &G, &B);
+ GetRGB(src.data(), &R, &G, &B);
*dest_buf++ = static_cast<int32_t>(B * 255);
*dest_buf++ = static_cast<int32_t>(G * 255);
*dest_buf++ = static_cast<int32_t>(R * 255);
@@ -1151,15 +1149,15 @@ bool CPDF_IndexedCS::GetRGB(const float* pBuf,
return false;
}
}
- CFX_FixedBufGrow<float, 16> Comps(m_nBaseComponents);
- float* comps = Comps;
+ std::vector<float> comps;
+ comps.reserve(m_nBaseComponents);
const uint8_t* pTable = m_Table.raw_str();
for (uint32_t i = 0; i < m_nBaseComponents; i++) {
- comps[i] =
- m_pCompMinMax[i * 2] +
- m_pCompMinMax[i * 2 + 1] * pTable[index * m_nBaseComponents + i] / 255;
+ comps.push_back(m_pCompMinMax[i * 2] +
+ m_pCompMinMax[i * 2 + 1] *
+ pTable[index * m_nBaseComponents + i] / 255);
}
- return m_pBaseCS->GetRGB(comps, R, G, B);
+ return m_pBaseCS->GetRGB(comps.data(), R, G, B);
}
void CPDF_IndexedCS::EnableStdConversion(bool bEnabled) {
@@ -1216,32 +1214,21 @@ bool CPDF_SeparationCS::GetRGB(const float* pBuf,
float* R,
float* G,
float* B) const {
- if (m_Type == None)
+ if (m_Type == None || !m_pAltCS)
return false;
if (!m_pFunc) {
- if (!m_pAltCS)
- return false;
-
int nComps = m_pAltCS->CountComponents();
- CFX_FixedBufGrow<float, 16> results(nComps);
- for (int i = 0; i < nComps; i++)
- results[i] = *pBuf;
- return m_pAltCS->GetRGB(results, R, G, B);
+ std::vector<float> results(nComps, *pBuf);
+ return m_pAltCS->GetRGB(results.data(), R, G, B);
}
- CFX_FixedBufGrow<float, 16> results(m_pFunc->CountOutputs());
+ std::vector<float> results2(m_pFunc->CountOutputs());
int nresults = 0;
- if (!m_pFunc->Call(pBuf, 1, results, &nresults) || nresults == 0)
+ if (!m_pFunc->Call(pBuf, 1, results2.data(), &nresults) || nresults == 0)
return false;
- if (m_pAltCS)
- return m_pAltCS->GetRGB(results, R, G, B);
-
- R = 0;
- G = 0;
- B = 0;
- return false;
+ return m_pAltCS->GetRGB(results2.data(), R, G, B);
}
void CPDF_SeparationCS::EnableStdConversion(bool bEnabled) {
@@ -1296,14 +1283,14 @@ bool CPDF_DeviceNCS::GetRGB(const float* pBuf,
if (!m_pFunc)
return false;
- CFX_FixedBufGrow<float, 16> results(m_pFunc->CountOutputs());
+ std::vector<float> results(m_pFunc->CountOutputs());
int nresults = 0;
- if (!m_pFunc->Call(pBuf, CountComponents(), results, &nresults) ||
+ if (!m_pFunc->Call(pBuf, CountComponents(), results.data(), &nresults) ||
nresults == 0) {
return false;
}
- return m_pAltCS->GetRGB(results, R, G, B);
+ return m_pAltCS->GetRGB(results.data(), R, G, B);
}
void CPDF_DeviceNCS::EnableStdConversion(bool bEnabled) {
diff --git a/core/fpdfapi/render/cpdf_dibsource.cpp b/core/fpdfapi/render/cpdf_dibsource.cpp
index 153491aa06..b8b91d2fe6 100644
--- a/core/fpdfapi/render/cpdf_dibsource.cpp
+++ b/core/fpdfapi/render/cpdf_dibsource.cpp
@@ -764,8 +764,7 @@ void CPDF_DIBSource::LoadPalette() {
}
int palette_count = 1 << (m_bpc * m_nComponents);
- CFX_FixedBufGrow<float, 16> color_values(m_nComponents);
- float* color_value = color_values;
+ std::vector<float> color_value(m_nComponents);
for (int i = 0; i < palette_count; i++) {
int color_data = i;
for (uint32_t j = 0; j < m_nComponents; j++) {
@@ -782,11 +781,11 @@ void CPDF_DIBSource::LoadPalette() {
int nComponents = m_pColorSpace->CountComponents();
std::vector<float> temp_buf(nComponents);
for (int k = 0; k < nComponents; k++) {
- temp_buf[k] = *color_value;
+ temp_buf[k] = color_value[0];
}
m_pColorSpace->GetRGB(temp_buf.data(), &R, &G, &B);
} else {
- m_pColorSpace->GetRGB(color_value, &R, &G, &B);
+ m_pColorSpace->GetRGB(color_value.data(), &R, &G, &B);
}
SetPaletteArgb(i, ArgbEncode(255, FXSYS_round(R * 255),
FXSYS_round(G * 255), FXSYS_round(B * 255)));
@@ -834,8 +833,7 @@ void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan,
if (TranslateScanline24bppDefaultDecode(dest_scan, src_scan))
return;
- CFX_FixedBufGrow<float, 16> color_values1(m_nComponents);
- float* color_values = color_values1;
+ std::vector<float> color_values(m_nComponents);
float R = 0.0f;
float G = 0.0f;
float B = 0.0f;
@@ -863,7 +861,7 @@ void CPDF_DIBSource::TranslateScanline24bpp(uint8_t* dest_scan,
G = (1.0f - color_values[1]) * k;
B = (1.0f - color_values[2]) * k;
} else if (m_Family != PDFCS_PATTERN) {
- m_pColorSpace->GetRGB(color_values, &R, &G, &B);
+ m_pColorSpace->GetRGB(color_values.data(), &R, &G, &B);
}
R = pdfium::clamp(R, 0.0f, 1.0f);
G = pdfium::clamp(G, 0.0f, 1.0f);
diff --git a/core/fpdfapi/render/cpdf_renderstatus.cpp b/core/fpdfapi/render/cpdf_renderstatus.cpp
index f9261570fe..708d7076c1 100644
--- a/core/fpdfapi/render/cpdf_renderstatus.cpp
+++ b/core/fpdfapi/render/cpdf_renderstatus.cpp
@@ -48,7 +48,6 @@
#include "core/fpdfapi/render/cpdf_type3cache.h"
#include "core/fpdfdoc/cpdf_occontext.h"
#include "core/fxcrt/autorestorer.h"
-#include "core/fxcrt/cfx_fixedbufgrow.h"
#include "core/fxcrt/fx_fallthrough.h"
#include "core/fxcrt/fx_safe_types.h"
#include "core/fxcrt/maybe_owned.h"
@@ -151,9 +150,7 @@ void DrawAxialShading(const RetainPtr<CFX_DIBitmap>& pBitmap,
float y_span = end_y - start_y;
float axis_len_square = (x_span * x_span) + (y_span * y_span);
- CFX_FixedBufGrow<float, 16> result_array(total_results);
- float* pResults = result_array;
- memset(pResults, 0, total_results * sizeof(float));
+ std::vector<float> results(total_results);
uint32_t rgb_array[kShadingSteps];
for (int i = 0; i < kShadingSteps; i++) {
float input = (t_max - t_min) * i / kShadingSteps + t_min;
@@ -161,14 +158,14 @@ void DrawAxialShading(const RetainPtr<CFX_DIBitmap>& pBitmap,
for (const auto& func : funcs) {
if (func) {
int nresults = 0;
- if (func->Call(&input, 1, pResults + offset, &nresults))
+ if (func->Call(&input, 1, results.data() + offset, &nresults))
offset += nresults;
}
}
float R = 0.0f;
float G = 0.0f;
float B = 0.0f;
- pCS->GetRGB(pResults, &R, &G, &B);
+ pCS->GetRGB(results.data(), &R, &G, &B);
rgb_array[i] =
FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255),
FXSYS_round(G * 255), FXSYS_round(B * 255)));
@@ -237,9 +234,7 @@ void DrawRadialShading(const RetainPtr<CFX_DIBitmap>& pBitmap,
bEndExtend = !!pArray->GetIntegerAt(1);
}
- CFX_FixedBufGrow<float, 16> result_array(total_results);
- float* pResults = result_array;
- memset(pResults, 0, total_results * sizeof(float));
+ std::vector<float> results(total_results);
uint32_t rgb_array[kShadingSteps];
for (int i = 0; i < kShadingSteps; i++) {
float input = (t_max - t_min) * i / kShadingSteps + t_min;
@@ -247,14 +242,14 @@ void DrawRadialShading(const RetainPtr<CFX_DIBitmap>& pBitmap,
for (const auto& func : funcs) {
if (func) {
int nresults;
- if (func->Call(&input, 1, pResults + offset, &nresults))
+ if (func->Call(&input, 1, results.data() + offset, &nresults))
offset += nresults;
}
}
float R = 0.0f;
float G = 0.0f;
float B = 0.0f;
- pCS->GetRGB(pResults, &R, &G, &B);
+ pCS->GetRGB(results.data(), &R, &G, &B);
rgb_array[i] =
FXARGB_TODIB(FXARGB_MAKE(alpha, FXSYS_round(R * 255),
FXSYS_round(G * 255), FXSYS_round(B * 255)));
@@ -366,9 +361,7 @@ void DrawFuncShading(const RetainPtr<CFX_DIBitmap>& pBitmap,
int height = pBitmap->GetHeight();
int pitch = pBitmap->GetPitch();
- CFX_FixedBufGrow<float, 16> result_array(total_results);
- float* pResults = result_array;
- memset(pResults, 0, total_results * sizeof(float));
+ std::vector<float> results(total_results);
for (int row = 0; row < height; row++) {
uint32_t* dib_buf = (uint32_t*)(pBitmap->GetBuffer() + row * pitch);
for (int column = 0; column < width; column++) {
@@ -382,7 +375,7 @@ void DrawFuncShading(const RetainPtr<CFX_DIBitmap>& pBitmap,
for (const auto& func : funcs) {
if (func) {
int nresults;
- if (func->Call(input, 2, pResults + offset, &nresults))
+ if (func->Call(input, 2, results.data() + offset, &nresults))
offset += nresults;
}
}
@@ -390,7 +383,7 @@ void DrawFuncShading(const RetainPtr<CFX_DIBitmap>& pBitmap,
float R = 0.0f;
float G = 0.0f;
float B = 0.0f;
- pCS->GetRGB(pResults, &R, &G, &B);
+ pCS->GetRGB(results.data(), &R, &G, &B);
dib_buf[column] = FXARGB_TODIB(FXARGB_MAKE(
alpha, (int32_t)(R * 255), (int32_t)(G * 255), (int32_t)(B * 255)));
}
@@ -2054,13 +2047,14 @@ void CPDF_RenderStatus::DrawShading(const CPDF_ShadingPattern* pPattern,
CPDF_Array* pBackColor = pDict->GetArrayFor("Background");
if (pBackColor &&
pBackColor->GetCount() >= pColorSpace->CountComponents()) {
- CFX_FixedBufGrow<float, 16> comps(pColorSpace->CountComponents());
+ std::vector<float> comps;
+ comps.reserve(pColorSpace->CountComponents());
for (uint32_t i = 0; i < pColorSpace->CountComponents(); i++)
- comps[i] = pBackColor->GetNumberAt(i);
+ comps.push_back(pBackColor->GetNumberAt(i));
float R = 0.0f;
float G = 0.0f;
float B = 0.0f;
- pColorSpace->GetRGB(comps, &R, &G, &B);
+ pColorSpace->GetRGB(comps.data(), &R, &G, &B);
background = ArgbEncode(255, (int32_t)(R * 255), (int32_t)(G * 255),
(int32_t)(B * 255));
}
@@ -2584,23 +2578,13 @@ RetainPtr<CFX_DIBitmap> CPDF_RenderStatus::LoadSMask(
color_space_family = pCS->GetFamily();
float R, G, B;
- uint32_t comps = 8;
- if (pCS->CountComponents() > comps) {
- comps = pCS->CountComponents();
- }
- CFX_FixedBufGrow<float, 8> float_array(comps);
- float* pFloats = float_array;
- FX_SAFE_UINT32 num_floats = comps;
- num_floats *= sizeof(float);
- if (!num_floats.IsValid()) {
- return nullptr;
- }
- memset(pFloats, 0, num_floats.ValueOrDie());
- size_t count = pBC->GetCount() > 8 ? 8 : pBC->GetCount();
+ uint32_t comps = std::max(8u, pCS->CountComponents());
+ std::vector<float> floats(comps);
+ size_t count = std::min<size_t>(8, pBC->GetCount());
for (size_t i = 0; i < count; i++) {
- pFloats[i] = pBC->GetNumberAt(i);
+ floats[i] = pBC->GetNumberAt(i);
}
- pCS->GetRGB(pFloats, &R, &G, &B);
+ pCS->GetRGB(floats.data(), &R, &G, &B);
back_color = 0xff000000 | ((int32_t)(R * 255) << 16) |
((int32_t)(G * 255) << 8) | (int32_t)(B * 255);
m_pContext->GetDocument()->GetPageData()->ReleaseColorSpace(pCSObj);
@@ -2633,11 +2617,11 @@ RetainPtr<CFX_DIBitmap> CPDF_RenderStatus::LoadSMask(
int src_pitch = bitmap.GetPitch();
std::vector<uint8_t> transfers(256);
if (pFunc) {
- CFX_FixedBufGrow<float, 16> results(pFunc->CountOutputs());
+ std::vector<float> results(pFunc->CountOutputs());
for (int i = 0; i < 256; i++) {
float input = (float)i / 255.0f;
int nresult;
- pFunc->Call(&input, 1, results, &nresult);
+ pFunc->Call(&input, 1, results.data(), &nresult);
transfers[i] = FXSYS_round(results[0] * 255);
}
} else {
diff --git a/core/fxcodec/codec/fx_codec_icc.cpp b/core/fxcodec/codec/fx_codec_icc.cpp
index 29b37d19ac..458816e77e 100644
--- a/core/fxcodec/codec/fx_codec_icc.cpp
+++ b/core/fxcodec/codec/fx_codec_icc.cpp
@@ -5,10 +5,10 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include <memory>
+#include <vector>
#include "core/fxcodec/codec/ccodec_iccmodule.h"
#include "core/fxcodec/codec/codec_int.h"
-#include "core/fxcrt/cfx_fixedbufgrow.h"
namespace {
@@ -124,19 +124,16 @@ void CCodec_IccModule::Translate(CLcmsCmm* pTransform,
uint32_t nSrcComponents = m_nComponents;
uint8_t output[4];
if (pTransform->m_bLab) {
- CFX_FixedBufGrow<double, 16> inputs(nSrcComponents);
- double* input = inputs;
- for (uint32_t i = 0; i < nSrcComponents; ++i)
- input[i] = pSrcValues[i];
- cmsDoTransform(pTransform->m_hTransform, input, output, 1);
+ std::vector<double> input(pSrcValues, pSrcValues + nSrcComponents);
+ cmsDoTransform(pTransform->m_hTransform, input.data(), output, 1);
} else {
- CFX_FixedBufGrow<uint8_t, 16> inputs(nSrcComponents);
- uint8_t* input = inputs;
+ std::vector<uint8_t> input;
+ input.reserve(nSrcComponents);
for (uint32_t i = 0; i < nSrcComponents; ++i) {
- input[i] =
- pdfium::clamp(static_cast<int>(pSrcValues[i] * 255.0f), 0, 255);
+ input.push_back(
+ pdfium::clamp(static_cast<int>(pSrcValues[i] * 255.0f), 0, 255));
}
- cmsDoTransform(pTransform->m_hTransform, input, output, 1);
+ cmsDoTransform(pTransform->m_hTransform, input.data(), output, 1);
}
pDestValues[0] = output[2] / 255.0f;
pDestValues[1] = output[1] / 255.0f;
diff --git a/core/fxge/apple/fx_apple_platform.cpp b/core/fxge/apple/fx_apple_platform.cpp
index 1801814e66..013be8f414 100644
--- a/core/fxge/apple/fx_apple_platform.cpp
+++ b/core/fxge/apple/fx_apple_platform.cpp
@@ -5,8 +5,8 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include <memory>
+#include <vector>
-#include "core/fxcrt/cfx_fixedbufgrow.h"
#include "core/fxcrt/fx_system.h"
#ifndef _SKIA_SUPPORT_
@@ -57,11 +57,12 @@ bool CGDrawGlyphRun(CGContextRef pContext,
if (!pFont->GetPlatformFont())
return false;
}
- CFX_FixedBufGrow<uint16_t, 32> glyph_indices(nChars);
- CFX_FixedBufGrow<CGPoint, 32> glyph_positions(nChars);
+ std::vector<uint16_t> glyph_indices;
+ glyph_indices.reserve(nChars);
+ std::vector<CGPoint> glyph_positions(nChars);
for (int i = 0; i < nChars; i++) {
- glyph_indices[i] =
- pCharPos[i].m_ExtGID ? pCharPos[i].m_ExtGID : pCharPos[i].m_GlyphIndex;
+ glyph_indices.push_back(pCharPos[i].m_ExtGID ? pCharPos[i].m_ExtGID
+ : pCharPos[i].m_GlyphIndex);
if (bNegSize)
glyph_positions[i].x = -pCharPos[i].m_Origin.x;
else
@@ -76,9 +77,9 @@ bool CGDrawGlyphRun(CGContextRef pContext,
new_matrix.d = -new_matrix.d;
}
quartz2d.setGraphicsTextMatrix(pContext, &new_matrix);
- return quartz2d.drawGraphicsString(pContext, pFont->GetPlatformFont(),
- font_size, glyph_indices, glyph_positions,
- nChars, argb, nullptr);
+ return quartz2d.drawGraphicsString(
+ pContext, pFont->GetPlatformFont(), font_size, glyph_indices.data(),
+ glyph_positions.data(), nChars, argb, nullptr);
}
} // namespace