sc/inc/fillinfo.hxx | 5 +++-- sc/source/core/data/fillinfo.cxx | 17 ++++++++--------- sc/source/ui/view/gridwin4.cxx | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-)
New commits: commit bdb112ea8bcf6f6f80483c31af05fefb2a40e026 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> Date: Sat May 21 23:10:35 2016 -0400 sc lok bccu#1610 - Tiles not rendering in large spreadsheets Variable max info rows instead of hard-coded allows for collecting info on more rows. FillInfo, however, is extremely slow for large row count (a few thousand) and needs improving. Reviewed-on: https://gerrit.libreoffice.org/25293 Reviewed-by: Ashod Nakashian <ashnak...@gmail.com> Tested-by: Ashod Nakashian <ashnak...@gmail.com> (cherry picked from commit 4c338a328d6be0450bfdcb08876abfd149cb80ca) Change-Id: Ib0e475513bc3ba98fff66a5b9d405aeba1057331 Reviewed-on: https://gerrit.libreoffice.org/25423 Tested-by: Jenkins <c...@libreoffice.org> Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> diff --git a/sc/inc/fillinfo.hxx b/sc/inc/fillinfo.hxx index d35bb8e..3b42dff 100644 --- a/sc/inc/fillinfo.hxx +++ b/sc/inc/fillinfo.hxx @@ -195,10 +195,11 @@ struct ScTableInfo { svx::frame::Array maArray; RowInfo* mpRowInfo; - sal_uInt16 mnArrCount; + SCSIZE mnArrCount; + SCSIZE mnArrCapacity; bool mbPageMode; - explicit ScTableInfo(); + explicit ScTableInfo(const SCSIZE capacity = 1024); ~ScTableInfo(); ScTableInfo(const ScTableInfo&) = delete; const ScTableInfo& operator=(const ScTableInfo&) = delete; diff --git a/sc/source/core/data/fillinfo.cxx b/sc/source/core/data/fillinfo.cxx index 8cd7534..6f71550 100644 --- a/sc/source/core/data/fillinfo.cxx +++ b/sc/source/core/data/fillinfo.cxx @@ -46,8 +46,6 @@ #include <memory> #include <o3tl/make_unique.hxx> -const sal_uInt16 ROWINFO_MAX = 1024; - enum FillInfoLinePos { FILP_TOP, @@ -209,7 +207,7 @@ bool isRotateItemUsed(ScDocumentPool *pPool) return false; } -void initRowInfo(ScDocument* pDoc, RowInfo* pRowInfo, +void initRowInfo(ScDocument* pDoc, RowInfo* pRowInfo, const SCSIZE nMaxRow, double fRowScale, SCROW nRow1, SCTAB nTab, SCROW& rYExtra, SCSIZE& rArrRow, SCROW& rRow2) { sal_uInt16 nDocHeight = ScGlobal::nStdRowHeight; @@ -249,7 +247,7 @@ void initRowInfo(ScDocument* pDoc, RowInfo* pRowInfo, pThisRowInfo->nRotMaxCol = SC_ROTMAX_NONE; ++rArrRow; - if (rArrRow >= ROWINFO_MAX) + if (rArrRow >= nMaxRow) { OSL_FAIL("FillInfo: Range too big" ); rYExtra = nSignedY; // End @@ -434,7 +432,7 @@ void ScDocument::FillInfo( nArrRow=0; SCROW nYExtra = nRow2+1; - initRowInfo(this, pRowInfo, fRowScale, nRow1, + initRowInfo(this, pRowInfo, rTabInfo.mnArrCapacity, fRowScale, nRow1, nTab, nYExtra, nArrRow, nRow2); nArrCount = nArrRow; // incl. Dummys @@ -1124,17 +1122,18 @@ void ScDocument::FillInfo( rArray.MirrorSelfX(); } -ScTableInfo::ScTableInfo() - : mpRowInfo(new RowInfo[ROWINFO_MAX]) +ScTableInfo::ScTableInfo(const SCSIZE capacity) + : mpRowInfo(new RowInfo[capacity]) , mnArrCount(0) + , mnArrCapacity(capacity) , mbPageMode(false) { - memset(mpRowInfo, 0, ROWINFO_MAX*sizeof(RowInfo)); + memset(mpRowInfo, 0, mnArrCapacity * sizeof(RowInfo)); } ScTableInfo::~ScTableInfo() { - for( sal_uInt16 nIdx = 0; nIdx < ROWINFO_MAX; ++nIdx ) + for( SCSIZE nIdx = 0; nIdx < mnArrCapacity; ++nIdx ) delete [] mpRowInfo[ nIdx ].pCellInfo; delete [] mpRowInfo; } diff --git a/sc/source/ui/view/gridwin4.cxx b/sc/source/ui/view/gridwin4.cxx index 3da00b5..e698066 100644 --- a/sc/source/ui/view/gridwin4.cxx +++ b/sc/source/ui/view/gridwin4.cxx @@ -986,7 +986,7 @@ void ScGridWindow::PaintTile( VirtualDevice& rDevice, double fPPTX = pViewData->GetPPTX(); double fPPTY = pViewData->GetPPTY(); - ScTableInfo aTabInfo; + ScTableInfo aTabInfo(nEndRow + 2); pDoc->FillInfo(aTabInfo, nStartCol, nStartRow, nEndCol, nEndRow, nTab, fPPTX, fPPTY, false, false); ScOutputData aOutputData(&rDevice, OUTTYPE_WINDOW, aTabInfo, pDoc, nTab, _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits