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

Constructor & Destructor Documentation

◆ PerformanceTab()

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

Definition at line 1617 of file kis_dlg_preferences.cc.

1618 : WdgPerformanceSettings(parent, name)
1620{
1621 KisImageConfig cfg(true);
1622 const double totalRAM = cfg.totalRAM();
1623 lblTotalMemory->setText(KFormat().formatByteSize(totalRAM * 1024 * 1024, 0, KFormat::IECBinaryDialect, KFormat::UnitMegaByte));
1624
1625 KisSpinBoxI18nHelper::setText(sliderMemoryLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1626 sliderMemoryLimit->setRange(1, 100, 2);
1627 sliderMemoryLimit->setSingleStep(0.01);
1628
1629 KisSpinBoxI18nHelper::setText(sliderPoolLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1630 sliderPoolLimit->setRange(0, 20, 2);
1631 sliderPoolLimit->setSingleStep(0.01);
1632
1633 KisSpinBoxI18nHelper::setText(sliderUndoLimit, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1634 sliderUndoLimit->setRange(0, 50, 2);
1635 sliderUndoLimit->setSingleStep(0.01);
1636
1637 intMemoryLimit->setMinimumWidth(80);
1638 intPoolLimit->setMinimumWidth(80);
1639 intUndoLimit->setMinimumWidth(80);
1640
1641 {
1642 formLayout->takeRow(2);
1643 label_5->setVisible(false);
1644 intPoolLimit->setVisible(false);
1645 sliderPoolLimit->setVisible(false);
1646 }
1647
1648 SliderAndSpinBoxSync *sync1 =
1649 new SliderAndSpinBoxSync(sliderMemoryLimit,
1650 intMemoryLimit,
1651 getTotalRAM);
1652
1653 sync1->slotParentValueChanged();
1654 m_syncs << sync1;
1655
1656 SliderAndSpinBoxSync *sync2 =
1657 new SliderAndSpinBoxSync(sliderPoolLimit,
1658 intPoolLimit,
1659 std::bind(&KisIntParseSpinBox::value,
1660 intMemoryLimit));
1661
1662
1663 connect(intMemoryLimit, SIGNAL(valueChanged(int)), sync2, SLOT(slotParentValueChanged()));
1664 sync2->slotParentValueChanged();
1665 m_syncs << sync2;
1666
1667 SliderAndSpinBoxSync *sync3 =
1668 new SliderAndSpinBoxSync(sliderUndoLimit,
1669 intUndoLimit,
1671 this));
1672
1673
1674 connect(intPoolLimit, SIGNAL(valueChanged(int)), sync3, SLOT(slotParentValueChanged()));
1675 connect(intMemoryLimit, SIGNAL(valueChanged(int)), sync3, SLOT(slotParentValueChanged()));
1676 sync3->slotParentValueChanged();
1677 m_syncs << sync3;
1678
1679 sliderSwapSize->setSuffix(i18n(" GiB"));
1680 sliderSwapSize->setRange(1, 64);
1681 intSwapSize->setRange(1, 64);
1682
1683
1684 KisAcyclicSignalConnector *swapSizeConnector = new KisAcyclicSignalConnector(this);
1685
1686 swapSizeConnector->connectForwardInt(sliderSwapSize, SIGNAL(valueChanged(int)),
1687 intSwapSize, SLOT(setValue(int)));
1688
1689 swapSizeConnector->connectBackwardInt(intSwapSize, SIGNAL(valueChanged(int)),
1690 sliderSwapSize, SLOT(setValue(int)));
1691
1692 swapFileLocation->setMode(KoFileDialog::OpenDirectory);
1693 swapFileLocation->setConfigurationName("swapfile_location");
1694 swapFileLocation->setFileName(cfg.swapDir());
1695
1696 sliderThreadsLimit->setRange(1, QThread::idealThreadCount());
1697 sliderFrameClonesLimit->setRange(1, QThread::idealThreadCount());
1698
1699 sliderFrameTimeout->setRange(5, 600);
1700 sliderFrameTimeout->setSuffix(i18nc("suffix for \"seconds\"", " sec"));
1701 sliderFrameTimeout->setValue(cfg.frameRenderingTimeout() / 1000);
1702
1703 sliderFpsLimit->setSuffix(i18n(" fps"));
1704
1705 KisWidgetConnectionUtils::connectControlState(sliderFpsLimit, m_frameRateModel.data(), "frameRateState", "frameRate");
1706 KisWidgetConnectionUtils::connectControl(chkDetectFps, m_frameRateModel.data(), "detectFrameRate");
1707
1708 connect(sliderThreadsLimit, SIGNAL(valueChanged(int)), SLOT(slotThreadsLimitChanged(int)));
1709 connect(sliderFrameClonesLimit, SIGNAL(valueChanged(int)), SLOT(slotFrameClonesLimitChanged(int)));
1710
1711 intCachedFramesSizeLimit->setRange(256, 10000);
1712 intCachedFramesSizeLimit->setSuffix(i18n(" px"));
1713 intCachedFramesSizeLimit->setSingleStep(1);
1714 intCachedFramesSizeLimit->setPageStep(1000);
1715
1716 intRegionOfInterestMargin->setRange(1, 100);
1717 KisSpinBoxI18nHelper::setText(intRegionOfInterestMargin,
1718 i18nc("{n} is the number value, % is the percent sign", "{n}%"));
1719 intRegionOfInterestMargin->setSingleStep(1);
1720 intRegionOfInterestMargin->setPageStep(10);
1721
1722 connect(chkCachedFramesSizeLimit, SIGNAL(toggled(bool)), intCachedFramesSizeLimit, SLOT(setEnabled(bool)));
1723 connect(chkUseRegionOfInterest, SIGNAL(toggled(bool)), intRegionOfInterestMargin, SLOT(setEnabled(bool)));
1724
1725 connect(chkTransformToolUseInStackPreview, SIGNAL(toggled(bool)), chkTransformToolForceLodMode, SLOT(setEnabled(bool)));
1726
1727#ifndef Q_OS_WIN
1728 // AVX workaround is needed on Windows+GCC only
1729 chkDisableAVXOptimizations->setVisible(false);
1730#endif
1731
1732 load(false);
1733}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
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 connect(), 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 1735 of file kis_dlg_preferences.cc.

1736{
1737 qDeleteAll(m_syncs);
1738}

References m_syncs.

Member Function Documentation

◆ load()

void PerformanceTab::load ( bool requestDefault)

Definition at line 1740 of file kis_dlg_preferences.cc.

1741{
1742 KisImageConfig cfg(true);
1743
1744 sliderMemoryLimit->setValue(cfg.memoryHardLimitPercent(requestDefault));
1745 sliderPoolLimit->setValue(cfg.memoryPoolLimitPercent(requestDefault));
1746 sliderUndoLimit->setValue(cfg.memorySoftLimitPercent(requestDefault));
1747
1748 chkPerformanceLogging->setChecked(cfg.enablePerfLog(requestDefault));
1749 chkProgressReporting->setChecked(cfg.enableProgressReporting(requestDefault));
1750
1751 sliderSwapSize->setValue(cfg.maxSwapSize(requestDefault) / 1024);
1752 swapFileLocation->setFileName(cfg.swapDir(requestDefault));
1753
1754 m_lastUsedThreadsLimit = cfg.maxNumberOfThreads(requestDefault);
1755 m_lastUsedClonesLimit = cfg.frameRenderingClones(requestDefault);
1756
1757 sliderThreadsLimit->setValue(m_lastUsedThreadsLimit);
1758 sliderFrameClonesLimit->setValue(m_lastUsedClonesLimit);
1759
1760#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
1761 m_frameRateModel->data.set(std::make_tuple(cfg.detectFpsLimit(requestDefault), cfg.fpsLimit(requestDefault)));
1762#else
1763 m_frameRateModel->data.set(std::make_tuple(false, cfg.fpsLimit(requestDefault)));
1764 chkDetectFps->setVisible(false);
1765#endif
1766 {
1767 KisConfig cfg2(true);
1768 chkOpenGLFramerateLogging->setChecked(cfg2.enableOpenGLFramerateLogging(requestDefault));
1769 chkBrushSpeedLogging->setChecked(cfg2.enableBrushSpeedLogging(requestDefault));
1770 chkDisableVectorOptimizations->setChecked(cfg2.disableVectorOptimizations(requestDefault));
1771#ifdef Q_OS_WIN
1772 chkDisableAVXOptimizations->setChecked(cfg2.disableAVXOptimizations(requestDefault));
1773#endif
1774 chkBackgroundCacheGeneration->setChecked(cfg2.calculateAnimationCacheInBackground(requestDefault));
1775 }
1776
1777 if (cfg.useOnDiskAnimationCacheSwapping(requestDefault)) {
1778 optOnDisk->setChecked(true);
1779 } else {
1780 optInMemory->setChecked(true);
1781 }
1782
1783 chkCachedFramesSizeLimit->setChecked(cfg.useAnimationCacheFrameSizeLimit(requestDefault));
1784 intCachedFramesSizeLimit->setValue(cfg.animationCacheFrameSizeLimit(requestDefault));
1785 intCachedFramesSizeLimit->setEnabled(chkCachedFramesSizeLimit->isChecked());
1786
1787 chkUseRegionOfInterest->setChecked(cfg.useAnimationCacheRegionOfInterest(requestDefault));
1788 intRegionOfInterestMargin->setValue(cfg.animationCacheRegionOfInterestMargin(requestDefault) * 100.0);
1789 intRegionOfInterestMargin->setEnabled(chkUseRegionOfInterest->isChecked());
1790
1791 {
1792 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
1793 chkTransformToolUseInStackPreview->setChecked(!group.readEntry("useOverlayPreviewStyle", false));
1794 chkTransformToolForceLodMode->setChecked(group.readEntry("forceLodMode", true));
1795 chkTransformToolForceLodMode->setEnabled(chkTransformToolUseInStackPreview->isChecked());
1796 }
1797
1798 {
1799 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
1800 chkMoveToolForceLodMode->setChecked(group.readEntry("forceLodMode", false));
1801 }
1802
1803 {
1804 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
1805 chkFiltersForceLodMode->setChecked(group.readEntry("forceLodMode", true));
1806 }
1807}

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

1613{
1614 return intMemoryLimit->value() - intPoolLimit->value();
1615}

◆ save()

void PerformanceTab::save ( )

Definition at line 1809 of file kis_dlg_preferences.cc.

1810{
1811 KisImageConfig cfg(false);
1812
1813 cfg.setMemoryHardLimitPercent(sliderMemoryLimit->value());
1814 cfg.setMemorySoftLimitPercent(sliderUndoLimit->value());
1815 cfg.setMemoryPoolLimitPercent(sliderPoolLimit->value());
1816
1817 cfg.setEnablePerfLog(chkPerformanceLogging->isChecked());
1818 cfg.setEnableProgressReporting(chkProgressReporting->isChecked());
1819
1820 cfg.setMaxSwapSize(sliderSwapSize->value() * 1024);
1821
1822 cfg.setSwapDir(swapFileLocation->fileName());
1823
1824 cfg.setMaxNumberOfThreads(sliderThreadsLimit->value());
1825 cfg.setFrameRenderingClones(sliderFrameClonesLimit->value());
1826 cfg.setFrameRenderingTimeout(sliderFrameTimeout->value() * 1000);
1827 cfg.setFpsLimit(std::get<int>(*m_frameRateModel->data));
1828#if KRITA_QT_HAS_UPDATE_COMPRESSION_PATCH
1829 cfg.setDetectFpsLimit(std::get<bool>(*m_frameRateModel->data));
1830#endif
1831
1832 {
1833 KisConfig cfg2(true);
1834 cfg2.setEnableOpenGLFramerateLogging(chkOpenGLFramerateLogging->isChecked());
1835 cfg2.setEnableBrushSpeedLogging(chkBrushSpeedLogging->isChecked());
1836 cfg2.setDisableVectorOptimizations(chkDisableVectorOptimizations->isChecked());
1837#ifdef Q_OS_WIN
1838 cfg2.setDisableAVXOptimizations(chkDisableAVXOptimizations->isChecked());
1839#endif
1840 cfg2.setCalculateAnimationCacheInBackground(chkBackgroundCacheGeneration->isChecked());
1841 }
1842
1843 cfg.setUseOnDiskAnimationCacheSwapping(optOnDisk->isChecked());
1844
1845 cfg.setUseAnimationCacheFrameSizeLimit(chkCachedFramesSizeLimit->isChecked());
1846 cfg.setAnimationCacheFrameSizeLimit(intCachedFramesSizeLimit->value());
1847
1848 cfg.setUseAnimationCacheRegionOfInterest(chkUseRegionOfInterest->isChecked());
1849 cfg.setAnimationCacheRegionOfInterestMargin(intRegionOfInterestMargin->value() / 100.0);
1850
1851 {
1852 KConfigGroup group = KSharedConfig::openConfig()->group("KisToolTransform");
1853 group.writeEntry("useOverlayPreviewStyle", !chkTransformToolUseInStackPreview->isChecked());
1854 group.writeEntry("forceLodMode", chkTransformToolForceLodMode->isChecked());
1855 }
1856
1857 {
1858 KConfigGroup group = KSharedConfig::openConfig()->group("KritaTransform/KisToolMove");
1859 group.writeEntry("forceLodMode", chkMoveToolForceLodMode->isChecked());
1860 }
1861
1862 {
1863 KConfigGroup group( KSharedConfig::openConfig(), "filterdialog");
1864 group.writeEntry("forceLodMode", chkFiltersForceLodMode->isChecked());
1865 }
1866
1867}

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

1877{
1878 KisSignalsBlocker b(sliderThreadsLimit);
1879 sliderThreadsLimit->setValue(qMax(m_lastUsedThreadsLimit, value));
1881}
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 1869 of file kis_dlg_preferences.cc.

1870{
1871 KisSignalsBlocker b(sliderFrameClonesLimit);
1872 sliderFrameClonesLimit->setValue(qMin(m_lastUsedClonesLimit, value));
1874}

References m_lastUsedClonesLimit, m_lastUsedThreadsLimit, and value().

Member Data Documentation

◆ m_frameRateModel

QScopedPointer<KisFrameRateLimitModel> PerformanceTab::m_frameRateModel
private

Definition at line 279 of file kis_dlg_preferences.h.

◆ m_lastUsedClonesLimit

int PerformanceTab::m_lastUsedClonesLimit
private

Definition at line 278 of file kis_dlg_preferences.h.

◆ m_lastUsedThreadsLimit

int PerformanceTab::m_lastUsedThreadsLimit
private

Definition at line 277 of file kis_dlg_preferences.h.

◆ m_syncs

QVector<SliderAndSpinBoxSync*> PerformanceTab::m_syncs
private

Definition at line 276 of file kis_dlg_preferences.h.


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