Use config cache to cache static hotspots

This commit is contained in:
Jay Kamat 2018-09-02 13:02:39 -07:00
parent 067d76616b
commit 0335fc31c1
No known key found for this signature in database
GPG Key ID: 5D2E399600F4F7B5
5 changed files with 31 additions and 23 deletions

View File

@ -34,6 +34,7 @@ from qutebrowser.keyinput import keyutils
val = None val = None
instance = None instance = None
key_instance = None key_instance = None
configcache = None
# Keeping track of all change filters to validate them later. # Keeping track of all change filters to validate them later.
change_filters = [] change_filters = []

View File

@ -20,9 +20,11 @@
"""A 'high-performance' cache for the config system. """A 'high-performance' cache for the config system.
Useful for areas which call out to the config system very frequently, DO NOT Useful for areas which call out to the config system very frequently, DO NOT
modify the value returned, and DO NOT require per-url settings. modify the value returned, DO NOT require per-url settings, do not change
frequently, and do not require partially 'expanded' config paths.
If any of these requirements are broken, you will get incorrect behavior. If any of these requirements are broken, you will get incorrect or slow
behavior.
""" """
from qutebrowser.config import config from qutebrowser.config import config
@ -38,7 +40,10 @@ class ConfigCache():
if attr in self.cache: if attr in self.cache:
self.cache[attr] = config.instance.get(attr) self.cache[attr] = config.instance.get(attr)
def __getattr__(self, attr: str): def __setitem__(self, attr):
raise Exception("ConfigCache cannot be used to set values.")
def __getitem__(self, attr: str):
if attr not in self.cache: if attr not in self.cache:
assert not config.instance.get_opt(attr).supports_pattern assert not config.instance.get_opt(attr).supports_pattern
self.cache[attr] = config.instance.get(attr) self.cache[attr] = config.instance.get(attr)

View File

@ -28,6 +28,7 @@ from qutebrowser.config import (config, configdata, configfiles, configtypes,
configexc, configcommands) configexc, configcommands)
from qutebrowser.utils import (objreg, usertypes, log, standarddir, message, from qutebrowser.utils import (objreg, usertypes, log, standarddir, message,
qtutils) qtutils)
from qutebrowser.config import configcache
from qutebrowser.misc import msgbox, objects from qutebrowser.misc import msgbox, objects
@ -44,6 +45,7 @@ def early_init(args):
config.instance = config.Config(yaml_config=yaml_config) config.instance = config.Config(yaml_config=yaml_config)
config.val = config.ConfigContainer(config.instance) config.val = config.ConfigContainer(config.instance)
config.key_instance = config.KeyConfig(config.instance) config.key_instance = config.KeyConfig(config.instance)
config.configcache = configcache.ConfigCache()
yaml_config.setParent(config.instance) yaml_config.setParent(config.instance)
for cf in config.change_filters: for cf in config.change_filters:

View File

@ -719,9 +719,9 @@ class TabbedBrowser(QWidget):
except TabDeletedError: except TabDeletedError:
# We can get signals for tabs we already deleted... # We can get signals for tabs we already deleted...
return return
start = config.val.colors.tabs.indicator.start start = config.configcache['colors.tabs.indicator.start']
stop = config.val.colors.tabs.indicator.stop stop = config.configcache['colors.tabs.indicator.stop']
system = config.val.colors.tabs.indicator.system system = config.configcache['colors.tabs.indicator.system']
color = utils.interpolate_color(start, stop, perc, system) color = utils.interpolate_color(start, stop, perc, system)
self.widget.set_tab_indicator_color(idx, color) self.widget.set_tab_indicator_color(idx, color)
self.widget.update_tab_title(idx) self.widget.update_tab_title(idx)

View File

@ -139,9 +139,9 @@ class TabWidget(QTabWidget):
""" """
tab = self.widget(idx) tab = self.widget(idx)
if tab.data.pinned: if tab.data.pinned:
fmt = config.val.tabs.title.format_pinned fmt = config.configcache['tabs.title.format_pinned']
else: else:
fmt = config.val.tabs.title.format fmt = config.configcache['tabs.title.format']
if (field is not None and if (field is not None and
(fmt is None or ('{' + field + '}') not in fmt)): (fmt is None or ('{' + field + '}') not in fmt)):
@ -604,7 +604,7 @@ class TabBar(QTabBar):
minimum_size = self.minimumTabSizeHint(index) minimum_size = self.minimumTabSizeHint(index)
height = minimum_size.height() height = minimum_size.height()
if self.vertical: if self.vertical:
confwidth = str(config.val.tabs.width) confwidth = str(config.configcache['tabs.width'])
if confwidth.endswith('%'): if confwidth.endswith('%'):
main_window = objreg.get('main-window', scope='window', main_window = objreg.get('main-window', scope='window',
window=self._win_id) window=self._win_id)
@ -614,7 +614,7 @@ class TabBar(QTabBar):
width = int(confwidth) width = int(confwidth)
size = QSize(max(minimum_size.width(), width), height) size = QSize(max(minimum_size.width(), width), height)
else: else:
if config.val.tabs.pinned.shrink: if config.configcache['tabs.pinned.shrink']:
pinned = self._tab_pinned(index) pinned = self._tab_pinned(index)
pinned_count, pinned_width = self._pinned_statistics() pinned_count, pinned_width = self._pinned_statistics()
else: else:
@ -652,15 +652,15 @@ class TabBar(QTabBar):
tab = QStyleOptionTab() tab = QStyleOptionTab()
self.initStyleOption(tab, idx) self.initStyleOption(tab, idx)
# pylint: disable=bad-config-option setting = 'colors.tabs'
setting = config.val.colors.tabs
# pylint: enable=bad-config-option
if idx == selected: if idx == selected:
setting = setting.selected setting += '.selected'
setting = setting.odd if (idx + 1) % 2 else setting.even setting += '.odd' if (idx + 1) % 2 else '.even'
tab.palette.setColor(QPalette.Window, setting.bg) tab.palette.setColor(QPalette.Window,
tab.palette.setColor(QPalette.WindowText, setting.fg) config.configcache[setting + '.bg'])
tab.palette.setColor(QPalette.WindowText,
config.configcache[setting + '.fg'])
indicator_color = self.tab_indicator_color(idx) indicator_color = self.tab_indicator_color(idx)
tab.palette.setColor(QPalette.Base, indicator_color) tab.palette.setColor(QPalette.Base, indicator_color)
@ -805,7 +805,7 @@ class TabBarStyle(QCommonStyle):
elif element == QStyle.CE_TabBarTabLabel: elif element == QStyle.CE_TabBarTabLabel:
if not opt.icon.isNull() and layouts.icon.isValid(): if not opt.icon.isNull() and layouts.icon.isValid():
self._draw_icon(layouts, opt, p) self._draw_icon(layouts, opt, p)
alignment = (config.val.tabs.title.alignment | alignment = (config.configcache['tabs.title.alignment'] |
Qt.AlignVCenter | Qt.TextHideMnemonic) Qt.AlignVCenter | Qt.TextHideMnemonic)
self._style.drawItemText(p, layouts.text, alignment, opt.palette, self._style.drawItemText(p, layouts.text, alignment, opt.palette,
opt.state & QStyle.State_Enabled, opt.state & QStyle.State_Enabled,
@ -878,8 +878,8 @@ class TabBarStyle(QCommonStyle):
Return: Return:
A Layout object with two QRects. A Layout object with two QRects.
""" """
padding = config.val.tabs.padding padding = config.configcache['tabs.padding']
indicator_padding = config.val.tabs.indicator.padding indicator_padding = config.configcache['tabs.indicator.padding']
text_rect = QRect(opt.rect) text_rect = QRect(opt.rect)
if not text_rect.isValid(): if not text_rect.isValid():
@ -890,7 +890,7 @@ class TabBarStyle(QCommonStyle):
text_rect.adjust(padding.left, padding.top, -padding.right, text_rect.adjust(padding.left, padding.top, -padding.right,
-padding.bottom) -padding.bottom)
indicator_width = config.val.tabs.indicator.width indicator_width = config.configcache['tabs.indicator.width']
if indicator_width == 0: if indicator_width == 0:
indicator_rect = QRect() indicator_rect = QRect()
else: else:
@ -933,9 +933,9 @@ class TabBarStyle(QCommonStyle):
icon_state = (QIcon.On if opt.state & QStyle.State_Selected icon_state = (QIcon.On if opt.state & QStyle.State_Selected
else QIcon.Off) else QIcon.Off)
# reserve space for favicon when tab bar is vertical (issue #1968) # reserve space for favicon when tab bar is vertical (issue #1968)
position = config.val.tabs.position position = config.configcache['tabs.position']
if (position in [QTabWidget.East, QTabWidget.West] and if (position in [QTabWidget.East, QTabWidget.West] and
config.val.tabs.favicons.show != 'never'): config.configcache['tabs.favicons.show'] != 'never'):
tab_icon_size = icon_size tab_icon_size = icon_size
else: else:
actual_size = opt.icon.actualSize(icon_size, icon_mode, icon_state) actual_size = opt.icon.actualSize(icon_size, icon_mode, icon_state)