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 281 of file kis_dlg_preferences.h.

Constructor & Destructor Documentation

◆ PerformanceTab()

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

Definition at line 1875 of file kis_dlg_preferences.cc.

1876 : WdgPerformanceSettings(parent, name)
1878{
1879 KisImageConfig cfg(true);
1880 const double totalRAM = cfg.totalRAM();
1881 lblTotalMemory->setText(KFormat().formatByteSize(totalRAM * 1024 * 1024, 0, KFormat::IECBinaryDialect, KFormat::UnitMegaByte));
1882
1883 KisSpinBoxI18nHelper::setText(sliderMemoryLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1884 sliderMemoryLimit->setRange(1, 100, 2);
1885 sliderMemoryLimit->setSingleStep(0.01);
1886
1887 KisSpinBoxI18nHelper::setText(sliderPoolLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1888 sliderPoolLimit->setRange(0, 20, 2);
1889 sliderPoolLimit->setSingleStep(0.01);
1890
1891 KisSpinBoxI18nHelper::setText(sliderUndoLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1892 sliderUndoLimit->setRange(0, 50, 2);
1893 sliderUndoLimit->setSingleStep(0.01);
1894
1895 intMemoryLimit->setMinimumWidth(80);
1896 intPoolLimit->setMinimumWidth(80);
1897 intUndoLimit->setMinimumWidth(80);
1898
1899 {
1900 formLayout->takeRow(2);
1901 label_5->setVisible(false);
1902 intPoolLimit->setVisible(false);
1903 sliderPoolLimit->setVisible(false);
1904 }
1905
1906 SliderAndSpinBoxSync *sync1 =
1907 new SliderAndSpinBoxSync(sliderMemoryLimit,
1908 intMemoryLimit,
1909 getTotalRAM);
1910
1911 sync1->slotParentValueChanged();
1912 m_syncs << sync1;
1913
1914 SliderAndSpinBoxSync *sync2 =
1915 new SliderAndSpinBoxSync(sliderPoolLimit,
1916 intPoolLimit,
1917 std::bind(&KisIntParseSpinBox::value,
1918 intMemoryLimit));
1919
1920
1921 connect(intMemoryLimit, SIGNAL(valueChanged(int)), sync2, SLOT(slotParentValueChanged()));
1922 sync2->slotParentValueChanged();
1923 m_syncs << sync2;
1924
1925 SliderAndSpinBoxSync *sync3 =
1926 new SliderAndSpinBoxSync(sliderUndoLimit,
1927 intUndoLimit,
1929 this));
1930
1931
1932 connect(intPoolLimit, SIGNAL(valueChanged(int)), sync3, SLOT(slotParentValueChanged()));
1933 connect(intMemoryLimit, SIGNAL(valueChanged(int)), sync3, SLOT(slotParentValueChanged()));
1934 sync3->slotParentValueChanged();
1935 m_syncs << sync3;
1936
1937 sliderSwapSize->setSuffix(i18n(" GiB"));
1938 sliderSwapSize->setRange(1, 64);
1939 intSwapSize->setRange(1, 64);
1940
1941
1942 KisAcyclicSignalConnector *swapSizeConnector = new KisAcyclicSignalConnector(this);
1943
1944 swapSizeConnector->connectForwardInt(sliderSwapSize, SIGNAL(valueChanged(int)),
1945 intSwapSize, SLOT(setValue(int)));
1946
1947 swapSizeConnector->connectBackwardInt(intSwapSize, SIGNAL(valueChanged(int)),
1948 sliderSwapSize, SLOT(setValue(int)));
1949
1950 swapFileLocation->setMode(KoFileDialog::OpenDirectory);
1951 swapFileLocation->setConfigurationName("swapfile_location");
1952 swapFileLocation->setFileName(cfg.swapDir());
1953
1954 sliderThreadsLimit->setRange(1, QThread::idealThreadCount());
1955 sliderFrameClonesLimit->setRange(1, QThread::idealThreadCount());
1956
1957 sliderFrameTimeout->setRange(5, 600);
1958 sliderFrameTimeout->setSuffix(i18nc("suffix for \"seconds\"", " sec"));
1959 sliderFrameTimeout->setValue(cfg.frameRenderingTimeout() / 1000);
1960
1961 sliderFpsLimit->setSuffix(i18n(" fps"));
1962
1963 KisWidgetConnectionUtils::connectControlState(sliderFpsLimit, m_frameRateModel.data(), "frameRateState", "frameRate");
1964 KisWidgetConnectionUtils::connectControl(chkDetectFps, m_frameRateModel.data(), "detectFrameRate");
1965
1966 connect(sliderThreadsLimit, SIGNAL(valueChanged(int)), SLOT(slotThreadsLimitChanged(int)));
1967 connect(sliderFrameClonesLimit, SIGNAL(valueChanged(int)), SLOT(slotFrameClonesLimitChanged(int)));
1968
1969 intCachedFramesSizeLimit->setRange(256, 10000);
1970 intCachedFramesSizeLimit->setSuffix(i18n(" px"));
1971 intCachedFramesSizeLimit->setSingleStep(1);
1972 intCachedFramesSizeLimit->setPageStep(1000);
1973
1974 intRegionOfInterestMargin->setRange(1, 100);
1975 KisSpinBoxI18nHelper::setText(intRegionOfInterestMargin,
1976 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1977 intRegionOfInterestMargin->setSingleStep(1);
1978 intRegionOfInterestMargin->setPageStep(10);
1979
1980 connect(chkCachedFramesSizeLimit, SIGNAL(toggled(bool)), intCachedFramesSizeLimit, SLOT(setEnabled(bool)));
1981 connect(chkUseRegionOfInterest, SIGNAL(toggled(bool)), intRegionOfInterestMargin, SLOT(setEnabled(bool)));
1982
1983 connect(chkTransformToolUseInStackPreview, SIGNAL(toggled(bool)), chkTransformToolForceLodMode, SLOT(setEnabled(bool)));
1984
1985#ifndef Q_OS_WIN
1986 // AVX workaround is needed on Windows+GCC only
1987 chkDisableAVXOptimizations->setVisible(false);
1988#endif
1989
1990 load(false);
1991}
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 1993 of file kis_dlg_preferences.cc.

1994{
1995 qDeleteAll(m_syncs);
1996}

References m_syncs.

Member Function Documentation

◆ load()

void PerformanceTab::load ( bool requestDefault)

Definition at line 1998 of file kis_dlg_preferences.cc.

1999{
2000 KisImageConfig cfg(true);
2001
2002 sliderMemoryLimit->setValue(cfg.memoryHardLimitPercent(requestDefault));
2003 sliderPoolLimit->setValue(cfg.memoryPoolLimitPercent(requestDefault));
2004 sliderUndoLimit->setValue(cfg.memorySoftLimitPercent(requestDefault));
2005
2006 chkPerformanceLogging->setChecked(cfg.enablePerfLog(requestDefault));
2007 chkProgressReporting->setChecked(cfg.enableProgressReporting(requestDefault));
2008
2009 sliderSwapSize->setValue(cfg.maxSwapSize(requestDefault) / 1024);
2010 swapFileLocation->setFileName(cfg.swapDir(requestDefault));
2011
2012 m_lastUsedThreadsLimit = cfg.maxNumberOfThreads(requestDefault);
2013 m_lastUsedClonesLimit = cfg.frameRenderingClones(requestDefault);
2014
2015 sliderThreadsLimit->setValue(m_lastUsedThreadsLimit);
2016 sliderFrameClonesLimit->setValue(m_lastUsedClonesLimit);
2017
2018#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
2019 m_frameRateModel->data.set(std::make_tuple(cfg.detectFpsLimit(requestDefault), cfg.fpsLimit(requestDefault)));
2020#else
2021 m_frameRateModel->data.set(std::make_tuple(false, cfg.fpsLimit(requestDefault)));
2022 chkDetectFps->setVisible(false);
2023#endif
2024 {
2025 KisConfig cfg2(true);
2026 chkOpenGLFramerateLogging->setChecked(cfg2.enableOpenGLFramerateLogging(requestDefault));
2027 chkBrushSpeedLogging->setChecked(cfg2.enableBrushSpeedLogging(requestDefault));
2028 chkDisableVectorOptimizations->setChecked(cfg2.disableVectorOptimizations(requestDefault));
2029#ifdef Q_OS_WIN
2030 chkDisableAVXOptimizations->setChecked(cfg2.disableAVXOptimizations(requestDefault));
2031#endif
2032 chkBackgroundCacheGeneration->setChecked(cfg2.calculateAnimationCacheInBackground(requestDefault));
2033 }
2034
2035 if (cfg.useOnDiskAnimationCacheSwapping(requestDefault)) {
2036 optOnDisk->setChecked(true);
2037 } else {
2038 optInMemory->setChecked(true);
2039 }
2040
2041 chkCachedFramesSizeLimit->setChecked(cfg.useAnimationCacheFrameSizeLimit(requestDefault));
2042 intCachedFramesSizeLimit->setValue(cfg.animationCacheFrameSizeLimit(requestDefault));
2043 intCachedFramesSizeLimit->setEnabled(chkCachedFramesSizeLimit->isChecked());
2044
2045 chkUseRegionOfInterest->setChecked(cfg.useAnimationCacheRegionOfInterest(requestDefault));
2046 intRegionOfInterestMargin->setValue(cfg.animationCacheRegionOfInterestMargin(requestDefault) * 100.0);
2047 intRegionOfInterestMargin->setEnabled(chkUseRegionOfInterest->isChecked());
2048
2049 {
2050 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
2051 chkTransformToolUseInStackPreview->setChecked(!group.readEntry("useOverlayPreviewStyle", false));
2052 chkTransformToolForceLodMode->setChecked(group.readEntry("forceLodMode", true));
2053 chkTransformToolForceLodMode->setEnabled(chkTransformToolUseInStackPreview->isChecked());
2054 }
2055
2056 {
2057 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
2058 chkMoveToolForceLodMode->setChecked(group.readEntry("forceLodMode", false));
2059 }
2060
2061 {
2062 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
2063 chkFiltersForceLodMode->setChecked(group.readEntry("forceLodMode", true));
2064 }
2065}

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

1871{
1872 return intMemoryLimit->value() - intPoolLimit->value();
1873}

◆ save()

void PerformanceTab::save ( )

Definition at line 2067 of file kis_dlg_preferences.cc.

2068{
2069 KisImageConfig cfg(false);
2070
2071 cfg.setMemoryHardLimitPercent(sliderMemoryLimit->value());
2072 cfg.setMemorySoftLimitPercent(sliderUndoLimit->value());
2073 cfg.setMemoryPoolLimitPercent(sliderPoolLimit->value());
2074
2075 cfg.setEnablePerfLog(chkPerformanceLogging->isChecked());
2076 cfg.setEnableProgressReporting(chkProgressReporting->isChecked());
2077
2078 cfg.setMaxSwapSize(sliderSwapSize->value() * 1024);
2079
2080 cfg.setSwapDir(swapFileLocation->fileName());
2081
2082 cfg.setMaxNumberOfThreads(sliderThreadsLimit->value());
2083 cfg.setFrameRenderingClones(sliderFrameClonesLimit->value());
2084 cfg.setFrameRenderingTimeout(sliderFrameTimeout->value() * 1000);
2085 cfg.setFpsLimit(std::get<int>(*m_frameRateModel->data));
2086#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
2087 cfg.setDetectFpsLimit(std::get<bool>(*m_frameRateModel->data));
2088#endif
2089
2090 {
2091 KisConfig cfg2(true);
2092 cfg2.setEnableOpenGLFramerateLogging(chkOpenGLFramerateLogging->isChecked());
2093 cfg2.setEnableBrushSpeedLogging(chkBrushSpeedLogging->isChecked());
2094 cfg2.setDisableVectorOptimizations(chkDisableVectorOptimizations->isChecked());
2095#ifdef Q_OS_WIN
2096 cfg2.setDisableAVXOptimizations(chkDisableAVXOptimizations->isChecked());
2097#endif
2098 cfg2.setCalculateAnimationCacheInBackground(chkBackgroundCacheGeneration->isChecked());
2099 }
2100
2101 cfg.setUseOnDiskAnimationCacheSwapping(optOnDisk->isChecked());
2102
2103 cfg.setUseAnimationCacheFrameSizeLimit(chkCachedFramesSizeLimit->isChecked());
2104 cfg.setAnimationCacheFrameSizeLimit(intCachedFramesSizeLimit->value());
2105
2106 cfg.setUseAnimationCacheRegionOfInterest(chkUseRegionOfInterest->isChecked());
2107 cfg.setAnimationCacheRegionOfInterestMargin(intRegionOfInterestMargin->value() / 100.0);
2108
2109 {
2110 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
2111 group.writeEntry("useOverlayPreviewStyle", !chkTransformToolUseInStackPreview->isChecked());
2112 group.writeEntry("forceLodMode", chkTransformToolForceLodMode->isChecked());
2113 }
2114
2115 {
2116 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
2117 group.writeEntry("forceLodMode", chkMoveToolForceLodMode->isChecked());
2118 }
2119
2120 {
2121 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
2122 group.writeEntry("forceLodMode", chkFiltersForceLodMode->isChecked());
2123 }
2124
2125}

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

2135{
2136 KisSignalsBlocker b(sliderThreadsLimit);
2137 sliderThreadsLimit->setValue(qMax(m_lastUsedThreadsLimit, value));
2139}
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 2127 of file kis_dlg_preferences.cc.

2128{
2129 KisSignalsBlocker b(sliderFrameClonesLimit);
2130 sliderFrameClonesLimit->setValue(qMin(m_lastUsedClonesLimit, value));
2132}

References m_lastUsedClonesLimit, m_lastUsedThreadsLimit, and value().

Member Data Documentation

◆ m_frameRateModel

QScopedPointer<KisFrameRateLimitModel> PerformanceTab::m_frameRateModel
private

Definition at line 304 of file kis_dlg_preferences.h.

◆ m_lastUsedClonesLimit

int PerformanceTab::m_lastUsedClonesLimit
private

Definition at line 303 of file kis_dlg_preferences.h.

◆ m_lastUsedThreadsLimit

int PerformanceTab::m_lastUsedThreadsLimit
private

Definition at line 302 of file kis_dlg_preferences.h.

◆ m_syncs

QVector<SliderAndSpinBoxSync*> PerformanceTab::m_syncs
private

Definition at line 301 of file kis_dlg_preferences.h.


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