mirror of
https://invent.kde.org/graphics/okular
synced 2024-07-05 00:58:46 +00:00
Add greedy preloading option
Based on a patch by Sebastian Rose <s.rose@semkath.de> REVIEW: 103129 BUGS: 184196
This commit is contained in:
parent
3e3a504d3c
commit
4d8ba36488
|
@ -48,7 +48,9 @@ void DlgPerformance::radioGroup_changed( int which )
|
|||
case 2:
|
||||
m_dlg->descLabel->setText( i18n("Keeps everything in memory. Preload next pages. Boost searches. (For systems with more than 512MB of memory.)") );
|
||||
break;
|
||||
|
||||
case 3:
|
||||
m_dlg->descLabel->setText( i18n("Loads and keeps everything in memory. Preload all pages. (Will use at maximum 50% of your total memory or your free memory, whatever is bigger.)"));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,59 +1,60 @@
|
|||
<ui version="4.0" >
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>DlgPerformanceBase</class>
|
||||
<widget class="QWidget" name="DlgPerformanceBase" >
|
||||
<property name="geometry" >
|
||||
<widget class="QWidget" name="DlgPerformanceBase">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>303</width>
|
||||
<height>256</height>
|
||||
<width>316</width>
|
||||
<height>289</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox" >
|
||||
<property name="title" >
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string>CPU Usage</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QHBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="kcfg_EnableCompositing" >
|
||||
<property name="text" >
|
||||
<widget class="QCheckBox" name="kcfg_EnableCompositing">
|
||||
<property name="text">
|
||||
<string>Enable &transparency effects</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCheckBox" name="kcfg_EnableThreading" >
|
||||
<property name="text" >
|
||||
<widget class="QCheckBox" name="kcfg_EnableThreading">
|
||||
<property name="text">
|
||||
<string>Enable &background generation</string>
|
||||
</property>
|
||||
</widget>
|
||||
|
@ -61,19 +62,17 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="cpuLabel" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy>
|
||||
<hsizetype>0</hsizetype>
|
||||
<vsizetype>0</vsizetype>
|
||||
<widget class="QLabel" name="cpuLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
|
@ -82,13 +81,13 @@
|
|||
</item>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation" >
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType" >
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Minimum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" >
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>21</width>
|
||||
<height>1</height>
|
||||
|
@ -104,70 +103,75 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="KButtonGroup" name="kcfg_MemoryLevel" >
|
||||
<property name="title" >
|
||||
<widget class="KButtonGroup" name="kcfg_MemoryLevel">
|
||||
<property name="title">
|
||||
<string>Memory Usage</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>9</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>9</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QHBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="lowRadio" >
|
||||
<property name="text" >
|
||||
<widget class="QRadioButton" name="lowRadio">
|
||||
<property name="text">
|
||||
<string>&Low</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="normalRadio" >
|
||||
<property name="text" >
|
||||
<widget class="QRadioButton" name="normalRadio">
|
||||
<property name="text">
|
||||
<string>&Normal (default)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="aggressiveRadio" >
|
||||
<property name="text" >
|
||||
<widget class="QRadioButton" name="aggressiveRadio">
|
||||
<property name="text">
|
||||
<string>&Aggressive</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="greedyRadio">
|
||||
<property name="text">
|
||||
<string>&Greedy</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QVBoxLayout" >
|
||||
<property name="margin" >
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing" >
|
||||
<layout class="QVBoxLayout">
|
||||
<property name="spacing">
|
||||
<number>6</number>
|
||||
</property>
|
||||
<property name="margin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item>
|
||||
<widget class="QLabel" name="memoryLabel" >
|
||||
<property name="sizePolicy" >
|
||||
<sizepolicy>
|
||||
<hsizetype>0</hsizetype>
|
||||
<vsizetype>0</vsizetype>
|
||||
<widget class="QLabel" name="memoryLabel">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
|
@ -176,13 +180,13 @@
|
|||
</item>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation" >
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType" >
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Minimum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" >
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>21</width>
|
||||
<height>1</height>
|
||||
|
@ -195,17 +199,17 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="descLabel" >
|
||||
<property name="text" >
|
||||
<widget class="QLabel" name="descLabel">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="textFormat" >
|
||||
<property name="textFormat">
|
||||
<enum>Qt::PlainText</enum>
|
||||
</property>
|
||||
<property name="alignment" >
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignVCenter</set>
|
||||
</property>
|
||||
<property name="wordWrap" >
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
|
@ -215,13 +219,13 @@
|
|||
</item>
|
||||
<item>
|
||||
<spacer>
|
||||
<property name="orientation" >
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType" >
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Expanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" >
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>4</height>
|
||||
|
@ -237,11 +241,10 @@
|
|||
<extends>QGroupBox</extends>
|
||||
<header>kbuttongroup.h</header>
|
||||
<container>1</container>
|
||||
<pixmap></pixmap>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<includes>
|
||||
<include location="global" >kiconloader.h</include>
|
||||
<include location="global">kiconloader.h</include>
|
||||
</includes>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
|
|
@ -59,6 +59,7 @@
|
|||
<choice name="Low" />
|
||||
<choice name="Normal" />
|
||||
<choice name="Aggressive" />
|
||||
<choice name="Greedy" />
|
||||
</choices>
|
||||
</entry>
|
||||
<entry key="EnableCompositing" type="Bool" >
|
||||
|
|
|
@ -199,6 +199,12 @@ void DocumentPrivate::cleanupPixmapMemory( qulonglong /*sure? bytesOffset*/ )
|
|||
if (m_allocatedPixmapsTotalMemory > freeMemory) clipValue = (m_allocatedPixmapsTotalMemory - freeMemory) / 2;
|
||||
}
|
||||
break;
|
||||
case Settings::EnumMemoryLevel::Greedy:
|
||||
{
|
||||
const qulonglong memoryLimit = qMax(getFreeMemory(), getTotalMemory() / 2);
|
||||
if (m_allocatedPixmapsTotalMemory > memoryLimit) clipValue = (m_allocatedPixmapsTotalMemory - memoryLimit) / 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if ( clipValue > memoryToFree )
|
||||
|
@ -3589,6 +3595,10 @@ void DocumentPrivate::calculateMaxTextPages()
|
|||
case Settings::EnumMemoryLevel::Aggressive:
|
||||
m_maxAllocatedTextPages = multipliers * 250;
|
||||
break;
|
||||
|
||||
case Settings::EnumMemoryLevel::Greedy:
|
||||
m_maxAllocatedTextPages = multipliers * 1250;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1209,7 +1209,8 @@ void PageView::notifyZoom( int factor )
|
|||
|
||||
bool PageView::canUnloadPixmap( int pageNumber ) const
|
||||
{
|
||||
if ( Okular::Settings::memoryLevel() != Okular::Settings::EnumMemoryLevel::Aggressive )
|
||||
if ( Okular::Settings::memoryLevel() == Okular::Settings::EnumMemoryLevel::Low ||
|
||||
Okular::Settings::memoryLevel() == Okular::Settings::EnumMemoryLevel::Normal )
|
||||
{
|
||||
// if the item is visible, forbid unloading
|
||||
QLinkedList< PageViewItem * >::const_iterator vIt = d->visibleItems.constBegin(), vEnd = d->visibleItems.constEnd();
|
||||
|
@ -3945,6 +3946,11 @@ void PageView::slotRequestVisiblePixmaps( int newValue )
|
|||
// request first the next page and then the previous
|
||||
|
||||
int pagesToPreload = viewColumns();
|
||||
|
||||
// if the greedy option is set, preload all pages
|
||||
if (Okular::Settings::memoryLevel() == Okular::Settings::EnumMemoryLevel::Greedy)
|
||||
pagesToPreload = d->items.count();
|
||||
|
||||
for( int j = 1; j <= pagesToPreload; j++ )
|
||||
{
|
||||
// add the page after the 'visible series' in preload
|
||||
|
|
|
@ -356,7 +356,8 @@ void PresentationWidget::notifyPageChanged( int pageNumber, int changedFlags )
|
|||
|
||||
bool PresentationWidget::canUnloadPixmap( int pageNumber ) const
|
||||
{
|
||||
if ( Okular::Settings::memoryLevel() != Okular::Settings::EnumMemoryLevel::Aggressive )
|
||||
if ( Okular::Settings::memoryLevel() == Okular::Settings::EnumMemoryLevel::Low ||
|
||||
Okular::Settings::memoryLevel() == Okular::Settings::EnumMemoryLevel::Normal )
|
||||
{
|
||||
// can unload all pixmaps except for the currently visible one
|
||||
return pageNumber != m_frameIndex;
|
||||
|
@ -1162,6 +1163,19 @@ void PresentationWidget::requestPixmaps()
|
|||
if ( !prevFrame->page->hasPixmap( PRESENTATION_ID, pixW, pixH ) )
|
||||
requests.push_back( new Okular::PixmapRequest( PRESENTATION_ID, m_frameIndex - 1, pixW, pixH, PRESENTATION_PRELOAD_PRIO, true ) );
|
||||
}
|
||||
|
||||
// If greedy, preload everything
|
||||
if (Okular::Settings::memoryLevel() == Okular::Settings::EnumMemoryLevel::Greedy)
|
||||
{
|
||||
for(int i = 0; i < (int)m_document->pages(); ++i)
|
||||
{
|
||||
PresentationFrame *loopFrame = m_frames[ i ];
|
||||
pixW = loopFrame->geometry.width();
|
||||
pixH = loopFrame->geometry.height();
|
||||
if ( !loopFrame->page->hasPixmap( PRESENTATION_ID, pixW, pixH ))
|
||||
requests.push_back( new Okular::PixmapRequest( PRESENTATION_ID, i, pixW, pixH, PRESENTATION_PRELOAD_PRIO, true ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
m_document->requestPixmaps( requests );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user