~onboard/onboard/1.1

« back to all changes in this revision

Viewing changes to Onboard/WPEngine.py

  • Committer: marmuta
  • Date: 2015-08-20 13:05:19 UTC
  • mto: This revision was merged to the branch mainline in revision 1972.
  • Revision ID: marmvta@gmail.com-20150820130519-ceidlz2iqkgewuiz
Merge trunk rev. 1972: Hide pauses due to auto-saving large language models by waiting until the keyboard becomes idle.

Show diffs side-by-side

added added

removed removed

Lines of Context:
83
83
        """
84
84
        self._model_cache.get_models(self.models)
85
85
 
 
86
    def postpone_autosave(self):
 
87
        self._auto_save_timer.postpone()
 
88
 
86
89
    def predict(self, context_line, limit = 20,
87
90
                case_insensitive = False,
88
91
                case_insensitive_smart = False,
581
584
class AutoSaveTimer(utils.Timer):
582
585
    """ Auto-save modified language models periodically """
583
586
 
584
 
    def __init__(self, mode_cache, interval = 10*60):
 
587
    def __init__(self, mode_cache, interval_min=10*60, interval_max=15*60, postpone_delay=30):
585
588
        self._model_cache = mode_cache
586
 
        self._interval = interval  # in seconds
587
 
        self._last_save_time = 0
 
589
        self._interval_min = interval_min  # in seconds
 
590
        self._interval_max = interval_max  # in seconds
 
591
        self._postpone_delay = postpone_delay
 
592
        self._interval = self._interval_min  # in seconds
 
593
        self._last_save_time = time.time()
588
594
        self.start(5, self._on_timer)
589
595
 
 
596
    def postpone(self):
 
597
        """
 
598
        Postpone saving a little, while the user is still typing.
 
599
        Helps to mask the delay when saving large models, during which
 
600
        Onboard briefly becomes unresponsive.
 
601
        """
 
602
        elapsed = time.time() - self._last_save_time
 
603
        if self._interval < elapsed + self._postpone_delay:
 
604
            self._interval = elapsed + self._postpone_delay
 
605
            if self._interval > self._interval_max:
 
606
                self._interval = self._interval_max
 
607
 
590
608
    def _on_timer(self):
591
 
        t = time.time()
592
 
        if t - self._last_save_time > self._interval:
593
 
            self._last_save_time = t
 
609
        now = time.time()
 
610
        elapsed = now - self._last_save_time
 
611
        if self._interval < elapsed:
 
612
            self._last_save_time = now
 
613
            self._interval = self._interval_min
 
614
            _logger.debug("auto-saving language models "
 
615
                          "(interval {}, elapsed time {}" \
 
616
                          .format(self._interval, elapsed))
594
617
            self._model_cache.save_models()
595
618
        return True # run again
596
619
 
 
620