comphelper/source/misc/asyncnotification.cxx | 10 ++--- vcl/skia/gdiimpl.cxx | 48 ++++++++++----------------- 2 files changed, 24 insertions(+), 34 deletions(-)
New commits: commit f30c3ff66a24d5031c077be0cb839f5f249c188e Author: Noel Grandin <[email protected]> AuthorDate: Sun Aug 22 14:55:58 2021 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Sun Aug 22 16:22:57 2021 +0200 speedup SkiaSalGraphicsImpl::drawPolyLine no need to convert the line to a polypoly and then unwrap the polypoly, just go straight to a poly Change-Id: I3f0ccfb7ce557dc4c6cd67e6e66a0562609ce736 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120843 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index fa1e43f0533c..ef4809bc0288 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -1075,12 +1075,11 @@ bool SkiaSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDev fLineWidth = (rObjectToDevice * basegfx::B2DVector(fLineWidth, 0)).getLength(); // Transform to DeviceCoordinates, get DeviceLineWidth, execute PixelSnapHairline - basegfx::B2DPolyPolygon aPolyPolygonLine; - aPolyPolygonLine.append(rPolyLine); - aPolyPolygonLine.transform(rObjectToDevice); + basegfx::B2DPolygon aPolyLine(rPolyLine); + aPolyLine.transform(rObjectToDevice); if (bPixelSnapHairline) { - aPolyPolygonLine = basegfx::utils::snapPointsOfHorizontalOrVerticalEdges(aPolyPolygonLine); + aPolyLine = basegfx::utils::snapPointsOfHorizontalOrVerticalEdges(aPolyLine); } // Setup Line Join @@ -1143,39 +1142,30 @@ bool SkiaSalGraphicsImpl::drawPolyLine(const basegfx::B2DHomMatrix& rObjectToDev if (eLineJoin != basegfx::B2DLineJoin::NONE || fLineWidth <= 1.0) { SkPath aPath; - sal_uInt32 nPointCount = 0; - for (const auto& rPolygon : std::as_const(aPolyPolygonLine)) - nPointCount += (rPolygon.count() + 1); - aPath.incReserve(nPointCount + 2); - + aPath.incReserve(aPolyLine.count() + 2); aPath.setFillType(SkPathFillType::kEvenOdd); - for (const auto& rPolygon : std::as_const(aPolyPolygonLine)) - addPolygonToPath(rPolygon, aPath); + addPolygonToPath(aPolyLine, aPath); aPath.offset(toSkX(0) + posFix, toSkY(0) + posFix, nullptr); addUpdateRegion(aPath.getBounds()); getDrawCanvas()->drawPath(aPath, aPaint); } else { - for (sal_uInt32 i = 0; i < aPolyPolygonLine.count(); ++i) + sal_uInt32 nPoints = aPolyLine.count(); + bool bClosed = aPolyLine.isClosed(); + for (sal_uInt32 j = 0; j < (bClosed ? nPoints : nPoints - 1); ++j) { - const basegfx::B2DPolygon& rPolygon = aPolyPolygonLine.getB2DPolygon(i); - sal_uInt32 nPoints = rPolygon.count(); - bool bClosed = rPolygon.isClosed(); - for (sal_uInt32 j = 0; j < (bClosed ? nPoints : nPoints - 1); ++j) - { - sal_uInt32 index1 = (j + 0) % nPoints; - sal_uInt32 index2 = (j + 1) % nPoints; - SkPath aPath; - aPath.moveTo(rPolygon.getB2DPoint(index1).getX(), - rPolygon.getB2DPoint(index1).getY()); - aPath.lineTo(rPolygon.getB2DPoint(index2).getX(), - rPolygon.getB2DPoint(index2).getY()); - - aPath.offset(toSkX(0) + posFix, toSkY(0) + posFix, nullptr); - addUpdateRegion(aPath.getBounds()); - getDrawCanvas()->drawPath(aPath, aPaint); - } + sal_uInt32 index1 = (j + 0) % nPoints; + sal_uInt32 index2 = (j + 1) % nPoints; + SkPath aPath; + aPath.moveTo(aPolyLine.getB2DPoint(index1).getX(), + aPolyLine.getB2DPoint(index1).getY()); + aPath.lineTo(aPolyLine.getB2DPoint(index2).getX(), + aPolyLine.getB2DPoint(index2).getY()); + + aPath.offset(toSkX(0) + posFix, toSkY(0) + posFix, nullptr); + addUpdateRegion(aPath.getBounds()); + getDrawCanvas()->drawPath(aPath, aPaint); } } commit 1706dba109533cce01eb982ef7cdedee5a20a1e0 Author: Noel Grandin <[email protected]> AuthorDate: Fri Aug 20 21:13:27 2021 +0200 Commit: Noel Grandin <[email protected]> CommitDate: Sun Aug 22 16:22:49 2021 +0200 osl::Mutex->std::mutex Change-Id: Id3c0660dae6dd5c6c026a26ec2ca39ccd6db210f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120845 Tested-by: Jenkins Reviewed-by: Noel Grandin <[email protected]> diff --git a/comphelper/source/misc/asyncnotification.cxx b/comphelper/source/misc/asyncnotification.cxx index 0fd0c338af53..e498ce23ba44 100644 --- a/comphelper/source/misc/asyncnotification.cxx +++ b/comphelper/source/misc/asyncnotification.cxx @@ -163,9 +163,9 @@ namespace comphelper namespace { - osl::Mutex& GetTheNotifiersMutex() + std::mutex& GetTheNotifiersMutex() { - static osl::Mutex MUTEX; + static std::mutex MUTEX; return MUTEX; } @@ -177,7 +177,7 @@ namespace comphelper { std::vector<std::weak_ptr<AsyncEventNotifierAutoJoin>> notifiers; { - ::osl::MutexGuard g(GetTheNotifiersMutex()); + std::scoped_lock g(GetTheNotifiersMutex()); notifiers = g_Notifiers; } for (std::weak_ptr<AsyncEventNotifierAutoJoin> const& wNotifier : notifiers) @@ -201,7 +201,7 @@ namespace comphelper AsyncEventNotifierAutoJoin::~AsyncEventNotifierAutoJoin() { - ::osl::MutexGuard g(GetTheNotifiersMutex()); + std::scoped_lock g(GetTheNotifiersMutex()); // note: this doesn't happen atomically with the refcount // hence it's possible this deletes > 1 or 0 elements g_Notifiers.erase( @@ -217,7 +217,7 @@ namespace comphelper { std::shared_ptr<AsyncEventNotifierAutoJoin> const ret( new AsyncEventNotifierAutoJoin(name)); - ::osl::MutexGuard g(GetTheNotifiersMutex()); + std::scoped_lock g(GetTheNotifiersMutex()); g_Notifiers.push_back(ret); return ret; }
