Krita Source Code Documentation
Loading...
Searching...
No Matches
PerformanceTab Class Reference

#include <kis_dlg_preferences.h>

+ Inheritance diagram for PerformanceTab:

Public Member Functions

void load (bool requestDefault)
 
 PerformanceTab (QWidget *parent=0, const char *name=0)
 
void save ()
 
 ~PerformanceTab () override
 
- Public Member Functions inherited from WdgPerformanceSettings
 WdgPerformanceSettings (QWidget *parent, const char *name)
 

Private Slots

void slotFrameClonesLimitChanged (int value)
 
void slotThreadsLimitChanged (int value)
 

Private Member Functions

int realTilesRAM ()
 

Private Attributes

QScopedPointer< KisFrameRateLimitModelm_frameRateModel
 
int m_lastUsedClonesLimit
 
int m_lastUsedThreadsLimit
 
QVector< SliderAndSpinBoxSync * > m_syncs
 

Detailed Description

Definition at line 269 of file kis_dlg_preferences.h.

Constructor & Destructor Documentation

◆ PerformanceTab()

PerformanceTab::PerformanceTab ( QWidget * parent = 0,
const char * name = 0 )

Definition at line 1750 of file kis_dlg_preferences.cc.

1751 : WdgPerformanceSettings(parent, name)
1753{
1754 KisImageConfig cfg(true);
1755 const double totalRAM = cfg.totalRAM();
1756 lblTotalMemory->setText(KFormat().formatByteSize(totalRAM * 1024 * 1024, 0, KFormat::IECBinaryDialect, KFormat::UnitMegaByte));
1757
1758 KisSpinBoxI18nHelper::setText(sliderMemoryLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1759 sliderMemoryLimit->setRange(1, 100, 2);
1760 sliderMemoryLimit->setSingleStep(0.01);
1761
1762 KisSpinBoxI18nHelper::setText(sliderPoolLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1763 sliderPoolLimit->setRange(0, 20, 2);
1764 sliderPoolLimit->setSingleStep(0.01);
1765
1766 KisSpinBoxI18nHelper::setText(sliderUndoLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1767 sliderUndoLimit->setRange(0, 50, 2);
1768 sliderUndoLimit->setSingleStep(0.01);
1769
1770 intMemoryLimit->setMinimumWidth(80);
1771 intPoolLimit->setMinimumWidth(80);
1772 intUndoLimit->setMinimumWidth(80);
1773
1774 {
1775 formLayout->takeRow(2);
1776 label_5->setVisible(false);
1777 intPoolLimit->setVisible(false);
1778 sliderPoolLimit->setVisible(false);
1779 }
1780
1781 SliderAndSpinBoxSync *sync1 =
1782 new SliderAndSpinBoxSync(sliderMemoryLimit,
1783 intMemoryLimit,
1784 getTotalRAM);
1785
1786 sync1->slotParentValueChanged();
1787 m_syncs << sync1;
1788
1789 SliderAndSpinBoxSync *sync2 =
1790 new SliderAndSpinBoxSync(sliderPoolLimit,
1791 intPoolLimit,
1792 std::bind(&KisIntParseSpinBox::value,
1793 intMemoryLimit));
1794
1795
1796 connect(intMemoryLimit, SIGNAL(valueChanged(int)), sync2, SLOT(slotParentValueChanged()));
1797 sync2->slotParentValueChanged();
1798 m_syncs << sync2;
1799
1800 SliderAndSpinBoxSync *sync3 =
1801 new SliderAndSpinBoxSync(sliderUndoLimit,
1802 intUndoLimit,
1804 this));
1805
1806
1807 connect(intPoolLimit, SIGNAL(valueChanged(int)), sync3, SLOT(slotParentValueChanged()));
1808 connect(intMemoryLimit, SIGNAL(valueChanged(int)), sync3, SLOT(slotParentValueChanged()));
1809 sync3->slotParentValueChanged();
1810 m_syncs << sync3;
1811
1812 sliderSwapSize->setSuffix(i18n(" GiB"));
1813 sliderSwapSize->setRange(1, 64);
1814 intSwapSize->setRange(1, 64);
1815
1816
1817 KisAcyclicSignalConnector *swapSizeConnector = new KisAcyclicSignalConnector(this);
1818
1819 swapSizeConnector->connectForwardInt(sliderSwapSize, SIGNAL(valueChanged(int)),
1820 intSwapSize, SLOT(setValue(int)));
1821
1822 swapSizeConnector->connectBackwardInt(intSwapSize, SIGNAL(valueChanged(int)),
1823 sliderSwapSize, SLOT(setValue(int)));
1824
1825 swapFileLocation->setMode(KoFileDialog::OpenDirectory);
1826 swapFileLocation->setConfigurationName("swapfile_location");
1827 swapFileLocation->setFileName(cfg.swapDir());
1828
1829 sliderThreadsLimit->setRange(1, QThread::idealThreadCount());
1830 sliderFrameClonesLimit->setRange(1, QThread::idealThreadCount());
1831
1832 sliderFrameTimeout->setRange(5, 600);
1833 sliderFrameTimeout->setSuffix(i18nc("suffix for \"seconds\"", " sec"));
1834 sliderFrameTimeout->setValue(cfg.frameRenderingTimeout() / 1000);
1835
1836 sliderFpsLimit->setSuffix(i18n(" fps"));
1837
1838 KisWidgetConnectionUtils::connectControlState(sliderFpsLimit, m_frameRateModel.data(), "frameRateState", "frameRate");
1839 KisWidgetConnectionUtils::connectControl(chkDetectFps, m_frameRateModel.data(), "detectFrameRate");
1840
1841 connect(sliderThreadsLimit, SIGNAL(valueChanged(int)), SLOT(slotThreadsLimitChanged(int)));
1842 connect(sliderFrameClonesLimit, SIGNAL(valueChanged(int)), SLOT(slotFrameClonesLimitChanged(int)));
1843
1844 intCachedFramesSizeLimit->setRange(256, 10000);
1845 intCachedFramesSizeLimit->setSuffix(i18n(" px"));
1846 intCachedFramesSizeLimit->setSingleStep(1);
1847 intCachedFramesSizeLimit->setPageStep(1000);
1848
1849 intRegionOfInterestMargin->setRange(1, 100);
1850 KisSpinBoxI18nHelper::setText(intRegionOfInterestMargin,
1851 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1852 intRegionOfInterestMargin->setSingleStep(1);
1853 intRegionOfInterestMargin->setPageStep(10);
1854
1855 connect(chkCachedFramesSizeLimit, SIGNAL(toggled(bool)), intCachedFramesSizeLimit, SLOT(setEnabled(bool)));
1856 connect(chkUseRegionOfInterest, SIGNAL(toggled(bool)), intRegionOfInterestMargin, SLOT(setEnabled(bool)));
1857
1858 connect(chkTransformToolUseInStackPreview, SIGNAL(toggled(bool)), chkTransformToolForceLodMode, SLOT(setEnabled(bool)));
1859
1860#ifndef Q_OS_WIN
1861 // AVX workaround is needed on Windows+GCC only
1862 chkDisableAVXOptimizations->setVisible(false);
1863#endif
1864
1865 load(false);
1866}
void connectBackwardInt(QObject *sender, const char *signal, QObject *receiver, const char *method)
void connectForwardInt(QObject *sender, const char *signal, QObject *receiver, const char *method)
void load(bool requestDefault)
QScopedPointer< KisFrameRateLimitModel > m_frameRateModel
void slotThreadsLimitChanged(int value)
QVector< SliderAndSpinBoxSync * > m_syncs
void slotFrameClonesLimitChanged(int value)
WdgPerformanceSettings(QWidget *parent, const char *name)
int getTotalRAM()
void setText(QSpinBox *spinBox, const QStringView textTemplate)
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)
void connectControlState(QSpinBox *spinBox, QObject *source, const char *readStateProperty, const char *writeProperty)

References KisAcyclicSignalConnector::connectBackwardInt(), KisWidgetConnectionUtils::connectControl(), KisWidgetConnectionUtils::connectControlState(), KisAcyclicSignalConnector::connectForwardInt(), KisImageConfig::frameRenderingTimeout(), getTotalRAM(), load(), m_frameRateModel, m_syncs, KoFileDialog::OpenDirectory, realTilesRAM(), KisSpinBoxI18nHelper::setText(), slotFrameClonesLimitChanged(), SliderAndSpinBoxSync::slotParentValueChanged(), slotThreadsLimitChanged(), KisImageConfig::swapDir(), and KisImageConfig::totalRAM().

◆ ~PerformanceTab()

PerformanceTab::~PerformanceTab ( )
override

Definition at line 1868 of file kis_dlg_preferences.cc.

1869{
1870 qDeleteAll(m_syncs);
1871}

References m_syncs.

Member Function Documentation

◆ load()

void PerformanceTab::load ( bool requestDefault)

Definition at line 1873 of file kis_dlg_preferences.cc.

1874{
1875 KisImageConfig cfg(true);
1876
1877 sliderMemoryLimit->setValue(cfg.memoryHardLimitPercent(requestDefault));
1878 sliderPoolLimit->setValue(cfg.memoryPoolLimitPercent(requestDefault));
1879 sliderUndoLimit->setValue(cfg.memorySoftLimitPercent(requestDefault));
1880
1881 chkPerformanceLogging->setChecked(cfg.enablePerfLog(requestDefault));
1882 chkProgressReporting->setChecked(cfg.enableProgressReporting(requestDefault));
1883
1884 sliderSwapSize->setValue(cfg.maxSwapSize(requestDefault) / 1024);
1885 swapFileLocation->setFileName(cfg.swapDir(requestDefault));
1886
1887 m_lastUsedThreadsLimit = cfg.maxNumberOfThreads(requestDefault);
1888 m_lastUsedClonesLimit = cfg.frameRenderingClones(requestDefault);
1889
1890 sliderThreadsLimit->setValue(m_lastUsedThreadsLimit);
1891 sliderFrameClonesLimit->setValue(m_lastUsedClonesLimit);
1892
1893#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
1894 m_frameRateModel->data.set(std::make_tuple(cfg.detectFpsLimit(requestDefault), cfg.fpsLimit(requestDefault)));
1895#else
1896 m_frameRateModel->data.set(std::make_tuple(false, cfg.fpsLimit(requestDefault)));
1897 chkDetectFps->setVisible(false);
1898#endif
1899 {
1900 KisConfig cfg2(true);
1901 chkOpenGLFramerateLogging->setChecked(cfg2.enableOpenGLFramerateLogging(requestDefault));
1902 chkBrushSpeedLogging->setChecked(cfg2.enableBrushSpeedLogging(requestDefault));
1903 chkDisableVectorOptimizations->setChecked(cfg2.disableVectorOptimizations(requestDefault));
1904#ifdef Q_OS_WIN
1905 chkDisableAVXOptimizations->setChecked(cfg2.disableAVXOptimizations(requestDefault));
1906#endif
1907 chkBackgroundCacheGeneration->setChecked(cfg2.calculateAnimationCacheInBackground(requestDefault));
1908 }
1909
1910 if (cfg.useOnDiskAnimationCacheSwapping(requestDefault)) {
1911 optOnDisk->setChecked(true);
1912 } else {
1913 optInMemory->setChecked(true);
1914 }
1915
1916 chkCachedFramesSizeLimit->setChecked(cfg.useAnimationCacheFrameSizeLimit(requestDefault));
1917 intCachedFramesSizeLimit->setValue(cfg.animationCacheFrameSizeLimit(requestDefault));
1918 intCachedFramesSizeLimit->setEnabled(chkCachedFramesSizeLimit->isChecked());
1919
1920 chkUseRegionOfInterest->setChecked(cfg.useAnimationCacheRegionOfInterest(requestDefault));
1921 intRegionOfInterestMargin->setValue(cfg.animationCacheRegionOfInterestMargin(requestDefault) * 100.0);
1922 intRegionOfInterestMargin->setEnabled(chkUseRegionOfInterest->isChecked());
1923
1924 {
1925 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
1926 chkTransformToolUseInStackPreview->setChecked(!group.readEntry("useOverlayPreviewStyle", false));
1927 chkTransformToolForceLodMode->setChecked(group.readEntry("forceLodMode", true));
1928 chkTransformToolForceLodMode->setEnabled(chkTransformToolUseInStackPreview->isChecked());
1929 }
1930
1931 {
1932 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
1933 chkMoveToolForceLodMode->setChecked(group.readEntry("forceLodMode", false));
1934 }
1935
1936 {
1937 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
1938 chkFiltersForceLodMode->setChecked(group.readEntry("forceLodMode", true));
1939 }
1940}

References KisImageConfig::animationCacheFrameSizeLimit(), KisImageConfig::animationCacheRegionOfInterestMargin(), KisConfig::calculateAnimationCacheInBackground(), KisImageConfig::detectFpsLimit(), KisConfig::disableAVXOptimizations(), KisConfig::disableVectorOptimizations(), KisConfig::enableBrushSpeedLogging(), KisConfig::enableOpenGLFramerateLogging(), KisImageConfig::enablePerfLog(), KisImageConfig::enableProgressReporting(), KisImageConfig::fpsLimit(), KisImageConfig::frameRenderingClones(), m_frameRateModel, m_lastUsedClonesLimit, m_lastUsedThreadsLimit, KisImageConfig::maxNumberOfThreads(), KisImageConfig::maxSwapSize(), KisImageConfig::memoryHardLimitPercent(), KisImageConfig::memoryPoolLimitPercent(), KisImageConfig::memorySoftLimitPercent(), KisImageConfig::swapDir(), KisImageConfig::useAnimationCacheFrameSizeLimit(), KisImageConfig::useAnimationCacheRegionOfInterest(), and KisImageConfig::useOnDiskAnimationCacheSwapping().

◆ realTilesRAM()

int PerformanceTab::realTilesRAM ( )
private

Definition at line 1745 of file kis_dlg_preferences.cc.

1746{
1747 return intMemoryLimit->value() - intPoolLimit->value();
1748}

◆ save()

void PerformanceTab::save ( )

Definition at line 1942 of file kis_dlg_preferences.cc.

1943{
1944 KisImageConfig cfg(false);
1945
1946 cfg.setMemoryHardLimitPercent(sliderMemoryLimit->value());
1947 cfg.setMemorySoftLimitPercent(sliderUndoLimit->value());
1948 cfg.setMemoryPoolLimitPercent(sliderPoolLimit->value());
1949
1950 cfg.setEnablePerfLog(chkPerformanceLogging->isChecked());
1951 cfg.setEnableProgressReporting(chkProgressReporting->isChecked());
1952
1953 cfg.setMaxSwapSize(sliderSwapSize->value() * 1024);
1954
1955 cfg.setSwapDir(swapFileLocation->fileName());
1956
1957 cfg.setMaxNumberOfThreads(sliderThreadsLimit->value());
1958 cfg.setFrameRenderingClones(sliderFrameClonesLimit->value());
1959 cfg.setFrameRenderingTimeout(sliderFrameTimeout->value() * 1000);
1960 cfg.setFpsLimit(std::get<int>(*m_frameRateModel->data));
1961#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
1962 cfg.setDetectFpsLimit(std::get<bool>(*m_frameRateModel->data));
1963#endif
1964
1965 {
1966 KisConfig cfg2(true);
1967 cfg2.setEnableOpenGLFramerateLogging(chkOpenGLFramerateLogging->isChecked());
1968 cfg2.setEnableBrushSpeedLogging(chkBrushSpeedLogging->isChecked());
1969 cfg2.setDisableVectorOptimizations(chkDisableVectorOptimizations->isChecked());
1970#ifdef Q_OS_WIN
1971 cfg2.setDisableAVXOptimizations(chkDisableAVXOptimizations->isChecked());
1972#endif
1973 cfg2.setCalculateAnimationCacheInBackground(chkBackgroundCacheGeneration->isChecked());
1974 }
1975
1976 cfg.setUseOnDiskAnimationCacheSwapping(optOnDisk->isChecked());
1977
1978 cfg.setUseAnimationCacheFrameSizeLimit(chkCachedFramesSizeLimit->isChecked());
1979 cfg.setAnimationCacheFrameSizeLimit(intCachedFramesSizeLimit->value());
1980
1981 cfg.setUseAnimationCacheRegionOfInterest(chkUseRegionOfInterest->isChecked());
1982 cfg.setAnimationCacheRegionOfInterestMargin(intRegionOfInterestMargin->value() / 100.0);
1983
1984 {
1985 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
1986 group.writeEntry("useOverlayPreviewStyle", !chkTransformToolUseInStackPreview->isChecked());
1987 group.writeEntry("forceLodMode", chkTransformToolForceLodMode->isChecked());
1988 }
1989
1990 {
1991 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
1992 group.writeEntry("forceLodMode", chkMoveToolForceLodMode->isChecked());
1993 }
1994
1995 {
1996 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
1997 group.writeEntry("forceLodMode", chkFiltersForceLodMode->isChecked());
1998 }
1999
2000}

References m_frameRateModel, KisImageConfig::setAnimationCacheFrameSizeLimit(), KisImageConfig::setAnimationCacheRegionOfInterestMargin(), KisConfig::setCalculateAnimationCacheInBackground(), KisImageConfig::setDetectFpsLimit(), KisConfig::setDisableAVXOptimizations(), KisConfig::setDisableVectorOptimizations(), KisConfig::setEnableBrushSpeedLogging(), KisConfig::setEnableOpenGLFramerateLogging(), KisImageConfig::setEnablePerfLog(), KisImageConfig::setEnableProgressReporting(), KisImageConfig::setFpsLimit(), KisImageConfig::setFrameRenderingClones(), KisImageConfig::setFrameRenderingTimeout(), KisImageConfig::setMaxNumberOfThreads(), KisImageConfig::setMaxSwapSize(), KisImageConfig::setMemoryHardLimitPercent(), KisImageConfig::setMemoryPoolLimitPercent(), KisImageConfig::setMemorySoftLimitPercent(), KisImageConfig::setSwapDir(), KisImageConfig::setUseAnimationCacheFrameSizeLimit(), KisImageConfig::setUseAnimationCacheRegionOfInterest(), and KisImageConfig::setUseOnDiskAnimationCacheSwapping().

◆ slotFrameClonesLimitChanged

void PerformanceTab::slotFrameClonesLimitChanged ( int value)
privateslot

Definition at line 2009 of file kis_dlg_preferences.cc.

2010{
2011 KisSignalsBlocker b(sliderThreadsLimit);
2012 sliderThreadsLimit->setValue(qMax(m_lastUsedThreadsLimit, value));
2014}
float value(const T *src, size_t ch)

References m_lastUsedClonesLimit, m_lastUsedThreadsLimit, and value().

◆ slotThreadsLimitChanged

void PerformanceTab::slotThreadsLimitChanged ( int value)
privateslot

Definition at line 2002 of file kis_dlg_preferences.cc.

2003{
2004 KisSignalsBlocker b(sliderFrameClonesLimit);
2005 sliderFrameClonesLimit->setValue(qMin(m_lastUsedClonesLimit, value));
2007}

References m_lastUsedClonesLimit, m_lastUsedThreadsLimit, and value().

Member Data Documentation

◆ m_frameRateModel

QScopedPointer<KisFrameRateLimitModel> PerformanceTab::m_frameRateModel
private

Definition at line 292 of file kis_dlg_preferences.h.

◆ m_lastUsedClonesLimit

int PerformanceTab::m_lastUsedClonesLimit
private

Definition at line 291 of file kis_dlg_preferences.h.

◆ m_lastUsedThreadsLimit

int PerformanceTab::m_lastUsedThreadsLimit
private

Definition at line 290 of file kis_dlg_preferences.h.

◆ m_syncs

QVector<SliderAndSpinBoxSync*> PerformanceTab::m_syncs
private

Definition at line 289 of file kis_dlg_preferences.h.


The documentation for this class was generated from the following files: