From 4d43c9884cf5ab06b8db2e9f5b7700ecabd1952b Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Fri, 22 Feb 2019 18:47:08 -0700 Subject: [PATCH] io: fix file-buffer performance when driven by peeks --- racket/src/io/port/bytes-input.rkt | 5 ++--- racket/src/io/port/peek-via-read-port.rkt | 7 ++++++- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/racket/src/io/port/bytes-input.rkt b/racket/src/io/port/bytes-input.rkt index edb61190ce..eeaaafb36c 100644 --- a/racket/src/io/port/bytes-input.rkt +++ b/racket/src/io/port/bytes-input.rkt @@ -121,9 +121,8 @@ v)) (define/who (peek-byte [orig-in (current-input-port)] [skip-k 0]) - (check who input-port? orig-in) - (check who exact-nonnegative-integer? skip-k) - (let ([in (->core-input-port orig-in)]) + (let ([in (->core-input-port orig-in who)]) + (check who exact-nonnegative-integer? skip-k) (peek-a-byte who in skip-k))) (define/who (peek-bytes amt skip-k [in (current-input-port)]) diff --git a/racket/src/io/port/peek-via-read-port.rkt b/racket/src/io/port/peek-via-read-port.rkt index e4479a8944..b9792efa29 100644 --- a/racket/src/io/port/peek-via-read-port.rkt +++ b/racket/src/io/port/peek-via-read-port.rkt @@ -72,7 +72,10 @@ (cond [(end-pos . fx< . (bytes-length bstr)) ;; add to end of buffer - (pull-some-bytes amt end-pos pos)] + (define pull-amt (if (eq? 'block buffer-mode) + (fx- (bytes-length bstr) end-pos) + amt)) + (pull-some-bytes pull-amt end-pos pos)] [(fx= pos 0) ;; extend buffer (define new-bstr (make-bytes (fx* 2 (bytes-length bstr)))) @@ -170,6 +173,8 @@ (define amt (min (fx- peeked-amt skip) (fx- end start))) (define s-pos (fx+ s skip)) (bytes-copy! dest-bstr start bstr s-pos (fx+ s-pos amt)) + (unless progress-sema + (fast-mode! 0)) amt] [peeked-eof? eof]