sumatrapdf
sumatrapdf copied to clipboard
Avoid always rendering first page
Related to #4584.
Even when load a pdf with remembered page, we always render page 1 which slows down showing the actual page.
Callstacks when rendering page 1:
SumatraPDF.exe;RenderCache::RequestRendering() Ln 426;7FF6AAD19D26
SumatraPDF.exe;ControllerCallbackHandler::RequestRendering();7FF6AAD39891
SumatraPDF.exe;DisplayModel::RenderVisibleParts();7FF6AAC7381D
SumatraPDF.exe;DisplayModel::GoToPage();7FF6AAC7470D
SumatraPDF.exe;DisplayModel::GoToPage();7FF6AAC6D4D1
SumatraPDF.exe;DisplayModel::SetScrollState();7FF6AAC721DC
SumatraPDF.exe;DisplayModel::SetViewPortSize();7FF6AAC6E38C
SumatraPDF.exe;MainWindow::UpdateCanvasSize();7FF6AACF531B
SumatraPDF.exe;WndProcCanvas();7FF6AAC4AE9C
...
SumatraPDF.exe;WndProcCanvasFixedPageUI();7FF6AAC50B3B
SumatraPDF.exe;WndProcCanvas();7FF6AAC4AF7B
...
SumatraPDF.exe;WndProcCanvasFixedPageUI();7FF6AAC50B1E
SumatraPDF.exe;WndProcCanvas();7FF6AAC4AF7B
...
SumatraPDF.exe;DeferWinPosHelper::End();7FF6AB17CE62
SumatraPDF.exe;RelayoutFrame();7FF6AAD404A0
SumatraPDF.exe;SetSidebarVisibility();7FF6AAD336E6
SumatraPDF.exe;ReplaceDocumentInCurrentTab();7FF6AAD3B403
SumatraPDF.exe;LoadDocumentFinish();7FF6AAD350D4
SumatraPDF.exe;LoadDocument();7FF6AAD34E57
SumatraPDF.exe;ReloadDocument();7FF6AAD33DD6
SumatraPDF.exe;WinMain();7FF6AAD51762
Followed by rendering of restored page from last time:
SumatraPDF.exe;RenderCache::RequestRendering() Ln 426;7FF7DAC39D26
SumatraPDF.exe;ControllerCallbackHandler::RequestRendering();7FF7DAC59891
SumatraPDF.exe;DisplayModel::RenderVisibleParts();7FF7DAB9381D
SumatraPDF.exe;DisplayModel::GoToPage();7FF7DAB9470D
SumatraPDF.exe;DisplayModel::GoToPage();7FF7DAB8D4D1
SumatraPDF.exe;DisplayModel::SetScrollState();7FF7DAB921DC
SumatraPDF.exe;ReplaceDocumentInCurrentTab();7FF7DAC5B451
SumatraPDF.exe;LoadDocumentFinish();7FF7DAC550D4
SumatraPDF.exe;LoadDocument();7FF7DAC54E57
SumatraPDF.exe;ReloadDocument();7FF7DAC53DD6
SumatraPDF.exe;WinMain();7FF7DAC71762
Maybe:
diff --git a/src/SumatraPDF.cpp b/src/SumatraPDF.cpp
index be3ef650a..261e2abf8 100644
--- a/src/SumatraPDF.cpp
+++ b/src/SumatraPDF.cpp
@@ -1286,10 +1286,16 @@ static void ReplaceDocumentInCurrentTab(LoadArgs* args, DocController* ctrl, Fil
// cf. https://code.google.com/p/sumatrapdf/issues/detail?id=2541
// ReportIf(win->IsDocLoaded() && args->showWin && win->canvasRc.IsEmpty() && !win->AsChm());
- SetSidebarVisibility(win, showToc, gGlobalPrefs->showFavorites);
- // restore scroll state after the canvas size has been restored
- if ((args->showWin || ss.page != 1) && win->AsFixed()) {
+ DisplayModel* dm = win->AsFixed();
+ bool restoreScroll = (args->showWin || ss.page != 1) && dm;
+ if (restoreScroll) {
+ dm->pauseRendering = true;
+ SetSidebarVisibility(win, showToc, gGlobalPrefs->showFavorites);
+ dm->pauseRendering = false;
+ // restore scroll state after the canvas size has been restored
win->AsFixed()->SetScrollState(ss);
+ } else {
+ SetSidebarVisibility(win, showToc, gGlobalPrefs->showFavorites);
}
win->RedrawAll(true);