branch: elpa/rainbow-delimiters
commit 164b55be80350938e6a546176bb6c9252094d154
Author: Jeremy L. Rayman <[email protected]>
Commit: Jeremy L. Rayman <[email protected]>

    Double the speed of main jit-lock highlighting fn (see commit msg for 
benchmarks); eliminate bottleneck in large files.
    
    * Benchmarks:
    
    These benchmarks are after replacing parse-partial-sexp with syntax-ppss
    and using defsubst in place of defun in a few more critical paths.
    
    *** Ordinary section of code:
    (benchmark-run 10 (rainbow-delimiters-propertize-region 16800 19000))
    0.0403
    0.0355
    0.0315
    0.0419
    0.0319
    0.0376
    Before this round of optimizations (syntax-ppss+defsubst) this benchmark
    took ~0.068 seconds. (Improvement: ~2x)
    
    *** Segment where a bottleneck was hit earlier:
    (benchmark-run 10 (rainbow-delimiters-propertize-region 23800 26000))
    0.0842
    0.0821
    0.0905
    0.0843
    0.0784
    0.0822
    Before this round of optimizations (syntax-ppss+defsubst) this benchmark
    took ~3.2 seconds. (Improvement: ~40x)
---
 rainbow-delimiters.el | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/rainbow-delimiters.el b/rainbow-delimiters.el
index eebd75b18d..6bc004c24d 100644
--- a/rainbow-delimiters.el
+++ b/rainbow-delimiters.el
@@ -322,7 +322,7 @@ major-mode. The syntax table is constructed by the function
     (modify-syntax-entry ?\} "){" table)
     table))
 
-(defun rainbow-delimiters-depth (loc)
+(defsubst rainbow-delimiters-depth (loc)
   "Return # of nested levels of parens, brackets, braces LOC is inside of."
   (let ((depth
          (with-syntax-table rainbow-delimiters-syntax-table
@@ -395,7 +395,7 @@ Sets text properties:
                               rear-nonsticky nil))))
 
 
-(defun rainbow-delimiters-char-ineligible-p (loc)
+(defsubst rainbow-delimiters-char-ineligible-p (loc)
   "Return t if char at LOC should be skipped, e.g. if inside a comment.
 
 Returns t if char at loc meets one of the following conditions:
@@ -430,11 +430,11 @@ LOC is location of character (delimiter) to be colorized."
 ;;; JIT-Lock functionality
 
 ;; Used to skip delimiter-by-delimiter `rainbow-delimiters-propertize-region'.
-(defvar rainbow-delimiters-delim-regex "\\(\(\\|\)\\|\\[\\|\\]\\|\{\\|\}\\)"
+(defconst rainbow-delimiters-delim-regex "\\(\(\\|\)\\|\\[\\|\\]\\|\{\\|\}\\)"
   "Regex matching all opening and closing delimiters the mode highlights.")
 
 ;; main function called by jit-lock:
-(defun rainbow-delimiters-propertize-region (start end)
+(defsubst rainbow-delimiters-propertize-region (start end)
   "Highlight delimiters in region between START and END.
 
 Used by jit-lock for dynamic highlighting."
@@ -500,6 +500,10 @@ Used by jit-lock for dynamic highlighting."
 (defun rainbow-delimiters-mode-enable ()
   (rainbow-delimiters-mode 1))
 
+;;;###autoload
+(defun rainbow-delimiters-mode-disable ()
+  (rainbow-delimiters-mode 0))
+
 ;;;###autoload
 (define-globalized-minor-mode global-rainbow-delimiters-mode
   rainbow-delimiters-mode rainbow-delimiters-mode-enable)

Reply via email to