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 1762 of file kis_dlg_preferences.cc.

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

1881{
1882 qDeleteAll(m_syncs);
1883}

References m_syncs.

Member Function Documentation

◆ load()

void PerformanceTab::load ( bool requestDefault)

Definition at line 1885 of file kis_dlg_preferences.cc.

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

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 1757 of file kis_dlg_preferences.cc.

1758{
1759 return intMemoryLimit->value() - intPoolLimit->value();
1760}

◆ save()

void PerformanceTab::save ( )

Definition at line 1954 of file kis_dlg_preferences.cc.

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

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 2021 of file kis_dlg_preferences.cc.

2022{
2023 KisSignalsBlocker b(sliderThreadsLimit);
2024 sliderThreadsLimit->setValue(qMax(m_lastUsedThreadsLimit, value));
2026}
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 2014 of file kis_dlg_preferences.cc.

2015{
2016 KisSignalsBlocker b(sliderFrameClonesLimit);
2017 sliderFrameClonesLimit->setValue(qMin(m_lastUsedClonesLimit, value));
2019}

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: