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

Constructor & Destructor Documentation

◆ PerformanceTab()

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

Definition at line 1902 of file kis_dlg_preferences.cc.

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

2021{
2022 qDeleteAll(m_syncs);
2023}

References m_syncs.

Member Function Documentation

◆ load()

void PerformanceTab::load ( bool requestDefault)

Definition at line 2025 of file kis_dlg_preferences.cc.

2026{
2027 KisImageConfig cfg(true);
2028
2029 sliderMemoryLimit->setValue(cfg.memoryHardLimitPercent(requestDefault));
2030 sliderPoolLimit->setValue(cfg.memoryPoolLimitPercent(requestDefault));
2031 sliderUndoLimit->setValue(cfg.memorySoftLimitPercent(requestDefault));
2032
2033 chkPerformanceLogging->setChecked(cfg.enablePerfLog(requestDefault));
2034 chkProgressReporting->setChecked(cfg.enableProgressReporting(requestDefault));
2035
2036 sliderSwapSize->setValue(cfg.maxSwapSize(requestDefault) / 1024);
2037 swapFileLocation->setFileName(cfg.swapDir(requestDefault));
2038
2039 m_lastUsedThreadsLimit = cfg.maxNumberOfThreads(requestDefault);
2040 m_lastUsedClonesLimit = cfg.frameRenderingClones(requestDefault);
2041
2042 sliderThreadsLimit->setValue(m_lastUsedThreadsLimit);
2043 sliderFrameClonesLimit->setValue(m_lastUsedClonesLimit);
2044
2045#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
2046 m_frameRateModel->data.set(std::make_tuple(cfg.detectFpsLimit(requestDefault), cfg.fpsLimit(requestDefault)));
2047#else
2048 m_frameRateModel->data.set(std::make_tuple(false, cfg.fpsLimit(requestDefault)));
2049 chkDetectFps->setVisible(false);
2050#endif
2051 {
2052 KisConfig cfg2(true);
2053 chkOpenGLFramerateLogging->setChecked(cfg2.enableOpenGLFramerateLogging(requestDefault));
2054 chkBrushSpeedLogging->setChecked(cfg2.enableBrushSpeedLogging(requestDefault));
2055 chkDisableVectorOptimizations->setChecked(cfg2.disableVectorOptimizations(requestDefault));
2056#ifdef Q_OS_WIN
2057 chkDisableAVXOptimizations->setChecked(cfg2.disableAVXOptimizations(requestDefault));
2058#endif
2059 chkBackgroundCacheGeneration->setChecked(cfg2.calculateAnimationCacheInBackground(requestDefault));
2060 }
2061
2062 if (cfg.useOnDiskAnimationCacheSwapping(requestDefault)) {
2063 optOnDisk->setChecked(true);
2064 } else {
2065 optInMemory->setChecked(true);
2066 }
2067
2068 chkCachedFramesSizeLimit->setChecked(cfg.useAnimationCacheFrameSizeLimit(requestDefault));
2069 intCachedFramesSizeLimit->setValue(cfg.animationCacheFrameSizeLimit(requestDefault));
2070 intCachedFramesSizeLimit->setEnabled(chkCachedFramesSizeLimit->isChecked());
2071
2072 chkUseRegionOfInterest->setChecked(cfg.useAnimationCacheRegionOfInterest(requestDefault));
2073 intRegionOfInterestMargin->setValue(cfg.animationCacheRegionOfInterestMargin(requestDefault) * 100.0);
2074 intRegionOfInterestMargin->setEnabled(chkUseRegionOfInterest->isChecked());
2075
2076 {
2077 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
2078 chkTransformToolUseInStackPreview->setChecked(!group.readEntry("useOverlayPreviewStyle", false));
2079 chkTransformToolForceLodMode->setChecked(group.readEntry("forceLodMode", true));
2080 chkTransformToolForceLodMode->setEnabled(chkTransformToolUseInStackPreview->isChecked());
2081 }
2082
2083 {
2084 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
2085 chkMoveToolForceLodMode->setChecked(group.readEntry("forceLodMode", false));
2086 }
2087
2088 {
2089 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
2090 chkFiltersForceLodMode->setChecked(group.readEntry("forceLodMode", true));
2091 }
2092}

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

1898{
1899 return intMemoryLimit->value() - intPoolLimit->value();
1900}

◆ save()

void PerformanceTab::save ( )

Definition at line 2094 of file kis_dlg_preferences.cc.

2095{
2096 KisImageConfig cfg(false);
2097
2098 cfg.setMemoryHardLimitPercent(sliderMemoryLimit->value());
2099 cfg.setMemorySoftLimitPercent(sliderUndoLimit->value());
2100 cfg.setMemoryPoolLimitPercent(sliderPoolLimit->value());
2101
2102 cfg.setEnablePerfLog(chkPerformanceLogging->isChecked());
2103 cfg.setEnableProgressReporting(chkProgressReporting->isChecked());
2104
2105 cfg.setMaxSwapSize(sliderSwapSize->value() * 1024);
2106
2107 cfg.setSwapDir(swapFileLocation->fileName());
2108
2109 cfg.setMaxNumberOfThreads(sliderThreadsLimit->value());
2110 cfg.setFrameRenderingClones(sliderFrameClonesLimit->value());
2111 cfg.setFrameRenderingTimeout(sliderFrameTimeout->value() * 1000);
2112 cfg.setFpsLimit(std::get<int>(*m_frameRateModel->data));
2113#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
2114 cfg.setDetectFpsLimit(std::get<bool>(*m_frameRateModel->data));
2115#endif
2116
2117 {
2118 KisConfig cfg2(true);
2119 cfg2.setEnableOpenGLFramerateLogging(chkOpenGLFramerateLogging->isChecked());
2120 cfg2.setEnableBrushSpeedLogging(chkBrushSpeedLogging->isChecked());
2121 cfg2.setDisableVectorOptimizations(chkDisableVectorOptimizations->isChecked());
2122#ifdef Q_OS_WIN
2123 cfg2.setDisableAVXOptimizations(chkDisableAVXOptimizations->isChecked());
2124#endif
2125 cfg2.setCalculateAnimationCacheInBackground(chkBackgroundCacheGeneration->isChecked());
2126 }
2127
2128 cfg.setUseOnDiskAnimationCacheSwapping(optOnDisk->isChecked());
2129
2130 cfg.setUseAnimationCacheFrameSizeLimit(chkCachedFramesSizeLimit->isChecked());
2131 cfg.setAnimationCacheFrameSizeLimit(intCachedFramesSizeLimit->value());
2132
2133 cfg.setUseAnimationCacheRegionOfInterest(chkUseRegionOfInterest->isChecked());
2134 cfg.setAnimationCacheRegionOfInterestMargin(intRegionOfInterestMargin->value() / 100.0);
2135
2136 {
2137 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
2138 group.writeEntry("useOverlayPreviewStyle", !chkTransformToolUseInStackPreview->isChecked());
2139 group.writeEntry("forceLodMode", chkTransformToolForceLodMode->isChecked());
2140 }
2141
2142 {
2143 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
2144 group.writeEntry("forceLodMode", chkMoveToolForceLodMode->isChecked());
2145 }
2146
2147 {
2148 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
2149 group.writeEntry("forceLodMode", chkFiltersForceLodMode->isChecked());
2150 }
2151
2152}

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

2162{
2163 KisSignalsBlocker b(sliderThreadsLimit);
2164 sliderThreadsLimit->setValue(qMax(m_lastUsedThreadsLimit, value));
2166}
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 2154 of file kis_dlg_preferences.cc.

2155{
2156 KisSignalsBlocker b(sliderFrameClonesLimit);
2157 sliderFrameClonesLimit->setValue(qMin(m_lastUsedClonesLimit, value));
2159}

References m_lastUsedClonesLimit, m_lastUsedThreadsLimit, and value().

Member Data Documentation

◆ m_frameRateModel

QScopedPointer<KisFrameRateLimitModel> PerformanceTab::m_frameRateModel
private

Definition at line 310 of file kis_dlg_preferences.h.

◆ m_lastUsedClonesLimit

int PerformanceTab::m_lastUsedClonesLimit
private

Definition at line 309 of file kis_dlg_preferences.h.

◆ m_lastUsedThreadsLimit

int PerformanceTab::m_lastUsedThreadsLimit
private

Definition at line 308 of file kis_dlg_preferences.h.

◆ m_syncs

QVector<SliderAndSpinBoxSync*> PerformanceTab::m_syncs
private

Definition at line 307 of file kis_dlg_preferences.h.


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