[Libreoffice-commits] core.git: Branch 'distro/collabora/co-2021' - vcl/headless vcl/inc

Luboš Luňák (via logerrit) logerrit at kemper.freedesktop.org
Thu Jun 10 10:58:51 UTC 2021


 vcl/headless/svpframe.cxx     |   26 +++++++++++++++-----------
 vcl/inc/headless/svpframe.hxx |    2 ++
 2 files changed, 17 insertions(+), 11 deletions(-)

New commits:
commit 48fbc6eaa09db1993752ecf27396131700f11656
Author:     Luboš Luňák <l.lunak at collabora.com>
AuthorDate: Thu May 27 20:22:51 2021 +0200
Commit:     Michael Meeks <michael.meeks at collabora.com>
CommitDate: Thu Jun 10 12:58:18 2021 +0200

    avoid possible repeated cairo surface creation
    
    Doing the frame size adjustments only after the if condition meant
    that in headless mode the surface could be destroyed and created
    again for the same size. Also AcquireGraphics() passed different
    frame size to SetGraphics() than SetPosSize().
    
    Change-Id: I9d6884a3917dfbd7b2cfe4fcd4e350c8bc9f4305
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116272
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lunak at collabora.com>
    (cherry picked from commit 11925224a53a46837d3a32b126ff2be55c96fb13)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/116902
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoffice at gmail.com>
    Reviewed-by: Michael Meeks <michael.meeks at collabora.com>

diff --git a/vcl/headless/svpframe.cxx b/vcl/headless/svpframe.cxx
index 3f79ead63783..fb7a81d08b7a 100644
--- a/vcl/headless/svpframe.cxx
+++ b/vcl/headless/svpframe.cxx
@@ -141,11 +141,24 @@ void SvpSalFrame::LoseFocus()
     }
 }
 
+basegfx::B2IVector SvpSalFrame::GetSurfaceFrameSize() const
+{
+    basegfx::B2IVector aFrameSize( maGeometry.nWidth, maGeometry.nHeight );
+    if( aFrameSize.getX() == 0 )
+        aFrameSize.setX( 1 );
+    if( aFrameSize.getY() == 0 )
+        aFrameSize.setY( 1 );
+    // Creating backing surfaces for invisible windows costs a big chunk of RAM.
+    if (Application::IsHeadlessModeEnabled())
+         aFrameSize = basegfx::B2IVector( 1, 1 );
+    return aFrameSize;
+}
+
 SalGraphics* SvpSalFrame::AcquireGraphics()
 {
     SvpSalGraphics* pGraphics = new SvpSalGraphics();
 #ifndef IOS
-    pGraphics->setSurface(m_pSurface, basegfx::B2IVector(maGeometry.nWidth, maGeometry.nHeight));
+    pGraphics->setSurface(m_pSurface, GetSurfaceFrameSize());
 #endif
     m_aGraphics.push_back( pGraphics );
     return pGraphics;
@@ -252,22 +265,13 @@ void SvpSalFrame::SetPosSize( tools::Long nX, tools::Long nY, tools::Long nWidth
             maGeometry.nHeight = m_nMinHeight;
     }
 #ifndef IOS
-    basegfx::B2IVector aFrameSize( maGeometry.nWidth, maGeometry.nHeight );
+    basegfx::B2IVector aFrameSize = GetSurfaceFrameSize();
     if (!m_pSurface || cairo_image_surface_get_width(m_pSurface) != aFrameSize.getX() ||
                        cairo_image_surface_get_height(m_pSurface) != aFrameSize.getY() )
     {
-        if( aFrameSize.getX() == 0 )
-            aFrameSize.setX( 1 );
-        if( aFrameSize.getY() == 0 )
-            aFrameSize.setY( 1 );
-
         if (m_pSurface)
             cairo_surface_destroy(m_pSurface);
 
-        // Creating backing surfaces for invisible windows costs a big chunk of RAM.
-        if (Application::IsHeadlessModeEnabled())
-             aFrameSize = basegfx::B2IVector( 1, 1 );
-
         m_pSurface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,
                                                 aFrameSize.getX(),
                                                 aFrameSize.getY());
diff --git a/vcl/inc/headless/svpframe.hxx b/vcl/inc/headless/svpframe.hxx
index 6d003d545398..1d8622d586b9 100644
--- a/vcl/inc/headless/svpframe.hxx
+++ b/vcl/inc/headless/svpframe.hxx
@@ -116,6 +116,8 @@ public:
     virtual void                SetScreenNumber( unsigned int ) override {}
     virtual void                SetApplicationID(const OUString &) override {}
 
+private:
+    basegfx::B2IVector GetSurfaceFrameSize() const;
 };
 
 #endif // INCLUDED_VCL_INC_HEADLESS_SVPFRAME_HXX


More information about the Libreoffice-commits mailing list