size: Optimize dependency size computation.
This reduces 'guix size' run time by ~4% here: items="$(guix build icecat inkscape emacs libreoffice)" guix size $items * guix/scripts/size.scm (store-profile): Define 'size-table' and use it to lookup the size of ITEM in 'dependency-size'.
This commit is contained in:
parent
32c055fd32
commit
1199da08aa
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2015, 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -34,6 +34,7 @@
|
||||||
#:use-module (srfi srfi-37)
|
#:use-module (srfi srfi-37)
|
||||||
#:use-module (ice-9 match)
|
#:use-module (ice-9 match)
|
||||||
#:use-module (ice-9 format)
|
#:use-module (ice-9 format)
|
||||||
|
#:use-module (ice-9 vlist)
|
||||||
#:export (profile?
|
#:export (profile?
|
||||||
profile-file
|
profile-file
|
||||||
profile-self-size
|
profile-self-size
|
||||||
|
@ -142,11 +143,20 @@ profile of ITEMS and their requisites."
|
||||||
(lambda (size)
|
(lambda (size)
|
||||||
(return (cons item size)))))
|
(return (cons item size)))))
|
||||||
refs)))
|
refs)))
|
||||||
|
(define size-table
|
||||||
|
(fold (lambda (pair result)
|
||||||
|
(match pair
|
||||||
|
((item . size)
|
||||||
|
(vhash-cons item size result))))
|
||||||
|
vlist-null sizes))
|
||||||
|
|
||||||
(define (dependency-size item)
|
(define (dependency-size item)
|
||||||
(mlet %store-monad ((deps (requisites* (list item))))
|
(mlet %store-monad ((deps (requisites* (list item))))
|
||||||
(foldm %store-monad
|
(foldm %store-monad
|
||||||
(lambda (item total)
|
(lambda (item total)
|
||||||
(return (+ (assoc-ref sizes item) total)))
|
(return (+ (match (vhash-assoc item size-table)
|
||||||
|
((_ . size) size))
|
||||||
|
total)))
|
||||||
0
|
0
|
||||||
(delete-duplicates (cons item deps)))))
|
(delete-duplicates (cons item deps)))))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue