[Libreoffice-commits] core.git: Branch 'distro/collabora/co-2021' - 6 commits - framework/source sc/source sfx2/source
Michael Meeks (via logerrit)
logerrit at kemper.freedesktop.org
Mon Apr 5 19:27:27 UTC 2021
framework/source/layoutmanager/helpers.cxx | 6 ++++++
sc/source/core/data/table2.cxx | 23 ++++++++++++++++++-----
sc/source/ui/view/viewdata.cxx | 7 ++++++-
sfx2/source/sidebar/DeckLayouter.cxx | 7 ++++++-
sfx2/source/sidebar/SidebarController.cxx | 9 +++++++--
sfx2/source/sidebar/TabBar.cxx | 5 +++++
sfx2/source/view/lokhelper.cxx | 3 +++
7 files changed, 51 insertions(+), 9 deletions(-)
New commits:
commit 129a42fd08850226eb3eed0dce2fb923b4d48697
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Fri Jan 22 21:10:49 2021 +0000
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon Apr 5 20:26:56 2021 +0100
lok: avoid expensive fetching of a property.
--doc_setView
SfxLokHelper::setView
SfxViewFrame::MakeActive_Impl
SfxApplication::SetViewFrame_Impl
|
--SfxDispatcher::Update_Impl
|
--SfxWorkWindow::UpdateObjectBars_Impl
SfxWorkWindow::UpdateObjectBars_Impl2
|
--framework::LayoutManager::requestElement
framework::LayoutManager::createElement
|
--11.97%--framework::implts_isPreviewModel
We re-calculate the calc print-area on every setView via this
code-path; pointlessly expensive.
Change-Id: I36dbdc60a789fac4e2a82825b145725a4a4d6439
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109805
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/framework/source/layoutmanager/helpers.cxx b/framework/source/layoutmanager/helpers.cxx
index 7c620b699fcd..f5fe1fc48f44 100644
--- a/framework/source/layoutmanager/helpers.cxx
+++ b/framework/source/layoutmanager/helpers.cxx
@@ -28,6 +28,7 @@
#include <com/sun/star/awt/XWindowListener.hpp>
#include <com/sun/star/ui/XUIElement.hpp>
+#include <comphelper/lok.hxx>
#include <unotools/mediadescriptor.hxx>
#include <vcl/svapp.hxx>
#include <toolkit/helper/vclunohelper.hxx>
@@ -261,6 +262,11 @@ uno::Reference< frame::XModel > impl_getModelFromFrame( const uno::Reference< fr
bool implts_isPreviewModel( const uno::Reference< frame::XModel >& xModel )
{
+ // the cost in calc of calling getArgs for this property
+ // includes measuring the entire sheet - which is extremely slow.
+ if (comphelper::LibreOfficeKit::isActive())
+ return false;
+
if ( xModel.is() )
{
utl::MediaDescriptor aDesc( xModel->getArgs() );
commit 2519a7d1392ecec9bd8027117bb02b08fb7bcfa8
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Fri Jan 22 21:17:25 2021 +0000
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon Apr 5 20:26:56 2021 +0100
sc: GetRowForHeight performance improvement.
Instead of just skipping hidden rows, either skip or interpolate
into visible ones.
This method, and it's single caller look rather unusual to me. It is
unclear why we would want to return the results we do, and why the
one caller subtracts a row.
Some surprising proportion of tile rendering was exercising this code
path extremely slowly.
--5.94%--ScDocument::GetPrintArea
|
|--5.04%--ScDrawLayer::GetPrintArea
| ScTable::GetRowForHeight
| |
| --4.58%--ScFlatBoolRowSegments::getRangeData
| |
| --2.46%--ScFlatSegmentsImpl<bool, bool>::getRangeData
Change-Id: I75418d6af59a33b99e8bb0c374139e1a4ee6ef87
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109837
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Tested-by: Michael Meeks <michael.meeks at collabora.com>
Reviewed-by: Ashod Nakashian <ash at collabora.com>
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109848
Tested-by: Jenkins
diff --git a/sc/source/core/data/table2.cxx b/sc/source/core/data/table2.cxx
index 02a9ad19cbaf..33ca0d85128f 100644
--- a/sc/source/core/data/table2.cxx
+++ b/sc/source/core/data/table2.cxx
@@ -3998,16 +3998,25 @@ SCROW ScTable::GetRowForHeight(sal_uLong nHeight) const
break;
}
- nSum += aRowHeightRange.mnValue;
+ // find the last common row between hidden & height spans
+ SCROW nLastCommon = std::min(aData.mnRow2, aRowHeightRange.mnRow2);
+ assert (nLastCommon >= nRow);
+ SCROW nCommon = nLastCommon - nRow + 1;
- if (nSum > nHeight)
+ // how much further to go ?
+ sal_uLong nPixelsLeft = nHeight - nSum;
+ sal_uLong nCommonPixels = aRowHeightRange.mnValue * nCommon;
+
+ // are we in the zone ?
+ if (nCommonPixels > nPixelsLeft)
{
+ nRow += (nPixelsLeft + aRowHeightRange.mnValue - 1) / aRowHeightRange.mnValue;
+
+ // FIXME: finding this next row is far from elegant,
+ // we have a single caller, which subtracts one as well(!?)
if (nRow >= rDocument.MaxRow())
return rDocument.MaxRow();
- // Find the next visible row.
- ++nRow;
-
if (!mpHiddenRows->getRangeData(nRow, aData))
// Failed to fetch the range data for whatever reason.
break;
@@ -4018,6 +4027,10 @@ SCROW ScTable::GetRowForHeight(sal_uLong nHeight) const
return nRow <= rDocument.MaxRow() ? nRow : rDocument.MaxRow();
}
+
+ // skip the range and keep hunting
+ nSum += nCommonPixels;
+ nRow = nLastCommon;
}
return -1;
}
commit 4f5d9dab387217ea57f299c8ba596857f3af074e
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Sun Jan 24 04:10:41 2021 +0000
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon Apr 5 20:26:56 2021 +0100
lok: avoid a set of invalidations per view on re-size.
Unfortunate to have N^2 invalidations in the number of views on
resize - particularly for calc, when you re-size/wrap-text on a
row during editing.
Change-Id: I93f75c4543ad072684e5575a2cbe0e8abcab0d80
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109913
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/112094
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx
index f86b69a8af29..295bc59a70dd 100644
--- a/sfx2/source/view/lokhelper.cxx
+++ b/sfx2/source/view/lokhelper.cxx
@@ -530,7 +530,10 @@ void SfxLokHelper::notifyDocumentSizeChangedAllViews(vcl::ITiledRenderable* pDoc
// Should we then do this for all views of all open documents
// or not?
if (pCurrentViewShell == nullptr || pViewShell->GetDocId() == pCurrentViewShell-> GetDocId())
+ {
SfxLokHelper::notifyDocumentSizeChanged(pViewShell, "", pDoc, bInvalidateAll);
+ bInvalidateAll = false; // we direct invalidations to all views anyway.
+ }
pViewShell = SfxViewShell::GetNext(*pViewShell);
}
}
commit 442d510afaeb16d9745d7a8e138e8c9aed953df1
Author: Szymon Kłos <szymon.klos at collabora.com>
AuthorDate: Wed Mar 24 15:38:59 2021 +0100
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon Apr 5 20:26:56 2021 +0100
Avoid infinite loop in AddPixelsWhile when removing Sheet
When 2 sessions in online were used:
A was in chart editing mode in the last sheet
B removed last sheet
infinite loop occured as GetRowHeight returned 0 due
to invalid tab number.
Change-Id: If5c4ba583dfb1154ff44e0bf651a098fa78bafda
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113044
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/sc/source/ui/view/viewdata.cxx b/sc/source/ui/view/viewdata.cxx
index c389c6d34f2b..0ad17c2ace93 100644
--- a/sc/source/ui/view/viewdata.cxx
+++ b/sc/source/ui/view/viewdata.cxx
@@ -4030,7 +4030,12 @@ void ScViewData::AddPixelsWhile( tools::Long & rScrY, tools::Long nEndPixels, SC
if (nHeightEndRow > nEndRow)
nHeightEndRow = nEndRow;
if (!nHeight)
- nRow = nHeightEndRow + 1;
+ {
+ if (ValidTab(nTabNo) && nTabNo <= pDoc->GetMaxTableNumber())
+ nRow = nHeightEndRow + 1;
+ else
+ break;
+ }
else
{
SCROW nRows = nHeightEndRow - nRow + 1;
commit 28d4b28501a3ec5e0429f82dd894c0d57f29f279
Author: Henry Castro <hcastro at collabora.com>
AuthorDate: Mon Mar 29 09:18:07 2021 -0400
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon Apr 5 20:26:56 2021 +0100
lok: fix nullptr de-reference
Change-Id: I8a9a7444d66e5e6449a0215bde174253a41f09b3
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113317
Tested-by: Jenkins
Reviewed-by: Henry Castro <hcastro at collabora.com>
(cherry picked from commit 949085b12a8a57b2257f4e59cc597e4c59b42f76)
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113285
Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
Reviewed-by: Jan Holesovsky <kendy at collabora.com>
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index 39900e95b216..636c63a3ef22 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -244,7 +244,8 @@ void SidebarController::disposeDecks()
(hide + "=false").c_str());
}
- mpParentWindow->ReleaseLOKNotifier();
+ if (mpParentWindow)
+ mpParentWindow->ReleaseLOKNotifier();
}
mpCurrentDeck.clear();
commit 12d54a3e952bbe53c1f404074e2538ca753286ae
Author: Michael Meeks <michael.meeks at collabora.com>
AuthorDate: Sat Jan 16 17:56:34 2021 +0000
Commit: Michael Meeks <michael.meeks at collabora.com>
CommitDate: Mon Apr 5 20:26:56 2021 +0100
sidebar: avoid invalidation thrash with LOK.
Avoids complete sidebar invalidate when entering text into a cell
and hitting enter.
Change-Id: I88ee3792589a1c0a16ae555da77ed7c12ca5f296
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/109403
Tested-by: Jenkins
Reviewed-by: Michael Meeks <michael.meeks at collabora.com>
diff --git a/sfx2/source/sidebar/DeckLayouter.cxx b/sfx2/source/sidebar/DeckLayouter.cxx
index c4c9cd4b9a81..f90ec176b2d0 100644
--- a/sfx2/source/sidebar/DeckLayouter.cxx
+++ b/sfx2/source/sidebar/DeckLayouter.cxx
@@ -613,7 +613,12 @@ void UpdateFiller (
vcl::Window& rFiller,
const tools::Rectangle& rBox)
{
- if (rBox.GetHeight() > 0)
+ if (comphelper::LibreOfficeKit::isActive())
+ {
+ // Not shown on LOK, and causes invalidation thrash
+ rFiller.Hide();
+ }
+ else if (rBox.GetHeight() > 0)
{
// Show the filler.
rFiller.SetBackground(Theme::GetColor(Theme::Color_PanelBackground));
diff --git a/sfx2/source/sidebar/SidebarController.cxx b/sfx2/source/sidebar/SidebarController.cxx
index b78e8e41d0ae..39900e95b216 100644
--- a/sfx2/source/sidebar/SidebarController.cxx
+++ b/sfx2/source/sidebar/SidebarController.cxx
@@ -807,7 +807,11 @@ void SidebarController::SwitchToDeck (
msCurrentDeckId = rDeckDescriptor.msId;
}
- mpTabBar->Invalidate();
+
+ // invisible with LOK, so avoid invalidations
+ if (!comphelper::LibreOfficeKit::isActive())
+ mpTabBar->Invalidate();
+
mpTabBar->HighlightDeck(msCurrentDeckId);
// Determine the panels to display in the deck.
diff --git a/sfx2/source/sidebar/TabBar.cxx b/sfx2/source/sidebar/TabBar.cxx
index 8164c3e34884..d7f52741fd6e 100644
--- a/sfx2/source/sidebar/TabBar.cxx
+++ b/sfx2/source/sidebar/TabBar.cxx
@@ -27,6 +27,7 @@
#include <sfx2/sfxresid.hxx>
+#include <comphelper/lok.hxx>
#include <comphelper/processfactory.hxx>
#include <o3tl/safeint.hxx>
#include <vcl/commandevent.hxx>
@@ -108,6 +109,10 @@ sal_Int32 TabBar::GetDefaultWidth()
void TabBar::SetDecks(const ResourceManager::DeckContextDescriptorContainer& rDecks)
{
+ // invisible with LOK, so keep empty to avoid invalidations
+ if (comphelper::LibreOfficeKit::isActive())
+ return;
+
// Remove the current buttons.
maItems.clear();
for (auto const& deck : rDecks)
More information about the Libreoffice-commits
mailing list