[LyX/2.4.1-devel] Do not compute metrics at each preview when loading file

Jean-Marc Lasgouttes lasgouttes at lyx.org
Thu Apr 18 16:21:39 UTC 2024


commit 15eef6a2c7cdca128a3476f2109371f35b372eba
Author: Jean-Marc Lasgouttes <lasgouttes at lyx.org>
Date:   Thu Dec 21 16:33:06 2023 +0100

    Do not compute metrics at each preview when loading file
    
    With the branch-test.lyx file from #12297, loading takes forever when
    previews are activated. This is because each preview element causes a
    full screen metrics recomputation.
    
    This commit just skips these calls and only does one when all previews
    have been obtained. As a result, computing the previews takes 1 second
    instead of 25 seconds on branch-test.lyx.
    
    Part of bug #12297.
    
    (cherry picked from commit 244969330108a89f4be93d3b2eb9024bdb756204)
---
 src/graphics/PreviewLoader.cpp | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/src/graphics/PreviewLoader.cpp b/src/graphics/PreviewLoader.cpp
index 4c37f7a8d0..004ced6d89 100644
--- a/src/graphics/PreviewLoader.cpp
+++ b/src/graphics/PreviewLoader.cpp
@@ -787,6 +787,16 @@ void PreviewLoader::Impl::finishedGenerating(pid_t pid, int retval)
 	// Remove the item from the list of still-executing processes.
 	in_progress_.erase(git);
 
+#if 0
+	/* FIXME : there is no need for all these calls, which recompute
+	 * all metrics for each and every preview. The single call at the
+	 * end of this method is sufficient.
+
+	 * It seems that this whole imageReady mechanism is actually not
+	 * needed. If it is the case, the whole updateFrontend/updateInset
+	 * bloat can go too.
+	 */
+
 	// Tell the outside world
 	list<PreviewImagePtr>::const_reverse_iterator
 		nit  = newimages.rbegin();
@@ -795,6 +805,8 @@ void PreviewLoader::Impl::finishedGenerating(pid_t pid, int retval)
 	for (; nit != nend; ++nit) {
 		imageReady(*nit->get());
 	}
+#endif
+
 	finished_generating_ = true;
 	buffer_.scheduleRedrawWorkAreas();
 }


More information about the lyx-cvs mailing list