vcl/source/filter/graphicfilter.cxx |    7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

New commits:
commit 85d072442f7445d13dfbbacd7985f6e1df38f57e
Author:     Luboš Luňák <l.lu...@collabora.com>
AuthorDate: Tue Jan 5 16:41:22 2021 +0100
Commit:     Luboš Luňák <l.lu...@collabora.com>
CommitDate: Thu Jan 7 16:28:04 2021 +0100

    do not process ImpGraphic twice
    
    Graphic objects share those, and it's ImpGraphic that actually does
    all the work, so it's enough to process each one once.
    
    Change-Id: I771a68e04bf5e1d866ae32973a3096e8d4a82445
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/108813
    Tested-by: Jenkins
    Reviewed-by: Luboš Luňák <l.lu...@collabora.com>

diff --git a/vcl/source/filter/graphicfilter.cxx 
b/vcl/source/filter/graphicfilter.cxx
index 684bb9c02731..635fc88e4627 100644
--- a/vcl/source/filter/graphicfilter.cxx
+++ b/vcl/source/filter/graphicfilter.cxx
@@ -1160,7 +1160,12 @@ void 
GraphicFilter::MakeGraphicsAvailableThreaded(std::vector<Graphic*>& graphic
         if(!graphic->isAvailable() && graphic->IsGfxLink()
             && graphic->GetSharedGfxLink()->GetType() == GfxLinkType::NativeJpg
             && graphic->GetSharedGfxLink()->GetDataSize() != 0 )
-            toLoad.push_back( graphic );
+        {
+            // Graphic objects share internal ImpGraphic, do not process any 
of those twice.
+            const auto predicate = [graphic](Graphic* item) { return 
item->ImplGetImpGraphic() == graphic->ImplGetImpGraphic(); };
+            if( std::find_if(toLoad.begin(), toLoad.end(), predicate ) == 
toLoad.end())
+                toLoad.push_back( graphic );
+        }
     }
     if( toLoad.empty())
         return;
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to