jak-project/goal_src/jak2/engine/debug/memory-usage.gc
ManDude 324def1303
split new pc features in some files into their own code files + address some old issues + ripple graphics improvements (#2216)
Moves PC-specific entity and debug menu things to `entity-debug.gc` and
`default-menu-pc.gc` respectively and makes `(declare-file (debug))`
work as it should (no need to wrap the entire file in `(when
*debug-segment*` now!).

Also changes the DGO descriptor format so that it's less verbose. It
might break custom levels, but the format change is very simple so it
should not be difficult for anyone to update to the new format. Sadly,
you lose the completely useless ability to use DGO object names that
don't match the source file name. The horror!

I've also gone ahead and expanded the force envmap option to also force
the ripple effect to be active. I did not notice any performance or
visual drawbacks from this. Gets rid of some distracting LOD and some
water pools appearing super flat (and pitch back for dark eco).

Fixes #1424
2023-02-13 21:39:14 +00:00

575 lines
22 KiB
Common Lisp

;;-*-Lisp-*-
(in-package goal)
;; name: memory-usage.gc
;; name in dgo: memory-usage
;; dgos: ENGINE, GAME
;; DECOMP BEGINS
;; this file is debug only
(declare-file (debug))
;; definition for method 3 of type memory-usage-block
(defmethod inspect memory-usage-block ((obj memory-usage-block))
(format #t "-------------------------------------------------------------~%")
(format #t " # name count bytes used aligned bytes~%")
(format #t "-------------------------------------------------------------~%")
(let ((s5-0 0)
(s4-0 0)
)
(dotimes (s3-0 (-> obj length))
(let ((v1-2 (-> obj data s3-0)))
(+! s5-0 (-> v1-2 used))
(+! s4-0 (-> v1-2 total))
(format
#t
"~3D: ~20S ~7D ~8D ~8D~%"
s3-0
(-> v1-2 name)
(-> v1-2 count)
(-> v1-2 used)
(-> v1-2 total)
)
)
)
(format #t "total: ~8D ~8D~%" s5-0 s4-0)
)
(format #t "-------------------------------------------------------------~%")
obj
)
;; definition for method 8 of type object
(defmethod mem-usage object ((obj object) (arg0 memory-usage-block) (arg1 int))
obj
)
;; definition for method 10 of type memory-usage-block
(defmethod calculate-total memory-usage-block ((obj memory-usage-block))
"@returns The total sum of all [[memory-usage-info]] `total`s"
(let ((sum 0))
(dotimes (idx (-> obj length))
(+! sum (-> obj data idx total))
)
sum
)
)
(defmethod reset! memory-usage-block ((obj memory-usage-block))
"Sets `length` to 0 as well as resets all fields except `name` in the associated [[memory-usage-info]]"
(set! (-> obj length) 0)
(dotimes (idx 112)
(set! (-> obj data idx used) 0)
(set! (-> obj data idx total) 0)
(set! (-> obj data idx count) 0)
)
obj
)
(defun mem-size ((data basic) (inspect-usage? symbol) (arg2 int))
"@param data The [[basic]] to call `mem-usage` on
@param inspect-usage? Set to [[#t]] if `inspect` should be called on the resulting [[memory-usage-block]]
@param arg2 TODO - unsure, some sort of bitfield
@returns The total memory footprint of the provided [[basic]]"
(let ((block (new 'stack 'memory-usage-block)))
(mem-usage data block arg2)
(if inspect-usage?
(inspect block)
)
(calculate-total block)
)
)
(defmethod compute-memory-usage! level ((obj level) (force? symbol))
"Calculates the memory usage of the level, returns and stores the [[memory-usage-block]]
in `mem-usage-block` as well as the total size in `mem-usage`
@param force? - Will re-compute the usage if set to [[#t]], even if `mem-usage` has been set to a non-zero value
@returns The [[memory-usage-block]] representing the footprint of the level
@see [[memory-usage-block::10]]"
(if (zero? (-> obj mem-usage-block))
(set! (-> obj mem-usage-block) (new 'debug 'memory-usage-block))
)
(set! force? (or (zero? (-> obj mem-usage-block length)) force?))
(when force?
(mem-usage obj (reset! (-> obj mem-usage-block)) 0)
(set! (-> obj mem-usage) (calculate-total (-> obj mem-usage-block)))
0
)
(-> obj mem-usage-block)
)
(defmethod mem-usage process-tree ((obj process-tree) (arg0 memory-usage-block) (arg1 int))
(let ((v1-0 90))
(let* ((a0-1 *dead-pool-list*)
(a3-0 (car a0-1))
)
(while (not (null? a0-1))
(set! (-> arg0 data v1-0 name) (symbol->string (the-as symbol a3-0)))
(+! v1-0 1)
(set! a0-1 (cdr a0-1))
(set! a3-0 (car a0-1))
)
)
(set! (-> arg0 length) (max (-> arg0 length) v1-0))
)
(set! (-> arg0 data 96 name) "*debug-dead-pool*")
(set! *temp-mem-usage* arg0)
(when (logtest? arg1 32)
(let* ((s5-0 90)
(s4-0 *dead-pool-list*)
(v1-4 (car s4-0))
)
(while (not (null? s4-0))
(let ((a0-5 (-> (the-as symbol v1-4) value)))
(set! *global-search-count* s5-0)
(iterate-process-tree
(the-as process-tree a0-5)
(lambda ((arg0 basic))
(let ((gp-0 *temp-mem-usage*)
(s5-0 *global-search-count*)
)
(+! (-> gp-0 data s5-0 used) 1)
(+! (-> gp-0 data s5-0 total) (logand -16 (+ (asize-of arg0) 15)))
)
#t
)
*null-kernel-context*
)
)
(+! s5-0 1)
(set! s4-0 (cdr s4-0))
(set! v1-4 (car s4-0))
)
)
)
(iterate-process-tree
obj
(lambda ((arg0 process-drawable))
(let ((gp-0 *temp-mem-usage*))
(let ((s4-0 (cond
((= (-> arg0 pool) *8k-dead-pool*)
91
)
((= (-> arg0 pool) *16k-dead-pool*)
92
)
((= (-> arg0 pool) *nk-dead-pool*)
93
)
((= (-> arg0 pool) *target-dead-pool*)
94
)
((= (-> arg0 pool) *camera-dead-pool*)
95
)
((= (-> arg0 pool) *debug-dead-pool*)
96
)
(else
90
)
)
)
)
(+! (-> gp-0 data s4-0 count) 1)
(+! (-> gp-0 data s4-0 total) (logand -16 (+ (asize-of arg0) 15)))
)
(set! (-> gp-0 length) (max 98 (-> gp-0 length)))
(set! (-> gp-0 data 97 name) "process-active")
(+! (-> gp-0 data 97 count) 1)
(let ((v1-23 (asize-of arg0)))
(+! (-> gp-0 data 97 used) v1-23)
(+! (-> gp-0 data 97 total) (logand -16 (+ v1-23 15)))
)
(set! (-> gp-0 length) (max 99 (-> gp-0 length)))
(set! (-> gp-0 data 98 name) "heap-total")
(+! (-> gp-0 data 98 count) 1)
(let ((v1-34 (+ (- -4 (the-as int arg0)) (the-as int (-> arg0 heap-cur)))))
(+! (-> gp-0 data 98 used) v1-34)
(+! (-> gp-0 data 98 total) (logand -16 (+ v1-34 15)))
)
(set! (-> gp-0 length) (max 100 (-> gp-0 length)))
(set! (-> gp-0 data 99 name) "heap-process")
(+! (-> gp-0 data 99 count) 1)
(let ((v1-45 (- (-> arg0 type size) (-> arg0 type heap-base))))
(+! (-> gp-0 data 99 used) v1-45)
(+! (-> gp-0 data 99 total) (logand -16 (+ v1-45 15)))
)
(set! (-> gp-0 length) (max 101 (-> gp-0 length)))
(set! (-> gp-0 data 100 name) "heap-header")
(+! (-> gp-0 data 100 count) 1)
(let ((v1-55 (-> arg0 type heap-base)))
(+! (-> gp-0 data 100 used) v1-55)
(+! (-> gp-0 data 100 total) (logand -16 (+ v1-55 15)))
)
(set! (-> gp-0 length) (max 102 (-> gp-0 length)))
(set! (-> gp-0 data 101 name) "heap-thread")
(+! (-> gp-0 data 101 count) 1)
(let ((v1-65 (asize-of (-> arg0 main-thread))))
(+! (-> gp-0 data 101 used) v1-65)
(+! (-> gp-0 data 101 total) (logand -16 (+ v1-65 15)))
)
(when (type? arg0 process-drawable)
(when (nonzero? (-> arg0 root))
(set! (-> gp-0 length) (max 103 (-> gp-0 length)))
(set! (-> gp-0 data 102 name) "heap-root")
(+! (-> gp-0 data 102 count) 1)
(let ((v1-78 (asize-of (-> arg0 root))))
(+! (-> gp-0 data 102 used) v1-78)
(+! (-> gp-0 data 102 total) (logand -16 (+ v1-78 15)))
)
(when (type? (-> arg0 root) collide-shape)
(set! (-> gp-0 length) (max 109 (-> gp-0 length)))
(set! (-> gp-0 data 108 name) "heap-collide-prim")
(+! (-> gp-0 data 108 count) 1)
(let ((v1-90 (asize-of (-> (the-as collide-shape-moving (-> arg0 root)) root-prim))))
(+! (-> gp-0 data 108 used) v1-90)
(+! (-> gp-0 data 108 total) (logand -16 (+ v1-90 15)))
)
)
)
(when (nonzero? (-> arg0 node-list))
(set! (-> gp-0 length) (max 106 (-> gp-0 length)))
(set! (-> gp-0 data 105 name) "heap-cspace")
(+! (-> gp-0 data 105 count) 1)
(let ((v1-102 (asize-of (-> arg0 node-list))))
(+! (-> gp-0 data 105 used) v1-102)
(+! (-> gp-0 data 105 total) (logand -16 (+ v1-102 15)))
)
)
(when (nonzero? (-> arg0 draw))
(set! (-> gp-0 length) (max 104 (-> gp-0 length)))
(set! (-> gp-0 data 103 name) "heap-draw-control")
(+! (-> gp-0 data 103 count) 1)
(let ((v1-114 (asize-of (-> arg0 draw))))
(+! (-> gp-0 data 103 used) v1-114)
(+! (-> gp-0 data 103 total) (logand -16 (+ v1-114 15)))
)
(when (nonzero? (-> arg0 draw skeleton))
(set! (-> gp-0 length) (max 107 (-> gp-0 length)))
(set! (-> gp-0 data 106 name) "heap-bone")
(+! (-> gp-0 data 106 count) 1)
(let ((v1-128 (asize-of (-> arg0 draw skeleton))))
(+! (-> gp-0 data 106 used) v1-128)
(+! (-> gp-0 data 106 total) (logand -16 (+ v1-128 15)))
)
)
)
(when (nonzero? (-> arg0 skel))
(set! (-> gp-0 length) (max 105 (-> gp-0 length)))
(set! (-> gp-0 data 104 name) "heap-joint-control")
(+! (-> gp-0 data 104 count) 1)
(let ((v1-140 (asize-of (-> arg0 skel))))
(+! (-> gp-0 data 104 used) v1-140)
(+! (-> gp-0 data 104 total) (logand -16 (+ v1-140 15)))
)
)
(when (nonzero? (-> arg0 part))
(set! (-> gp-0 length) (max 108 (-> gp-0 length)))
(set! (-> gp-0 data 107 name) "heap-part")
(+! (-> gp-0 data 107 count) 1)
(let ((v1-152 (asize-of (-> arg0 part))))
(+! (-> gp-0 data 107 used) v1-152)
(+! (-> gp-0 data 107 total) (logand -16 (+ v1-152 15)))
)
)
(when (nonzero? (-> arg0 nav))
(set! (-> gp-0 length) (max 110 (-> gp-0 length)))
(set! (-> gp-0 data 109 name) "heap-misc")
(+! (-> gp-0 data 109 count) 1)
(let ((v1-164 (asize-of (-> arg0 nav))))
(+! (-> gp-0 data 109 used) v1-164)
(+! (-> gp-0 data 109 total) (logand -16 (+ v1-164 15)))
)
)
(when (nonzero? (-> arg0 path))
(set! (-> gp-0 length) (max 110 (-> gp-0 length)))
(set! (-> gp-0 data 109 name) "heap-misc")
(+! (-> gp-0 data 109 count) 1)
(let ((v1-176 (asize-of (-> arg0 path))))
(+! (-> gp-0 data 109 used) v1-176)
(+! (-> gp-0 data 109 total) (logand -16 (+ v1-176 15)))
)
)
(when (nonzero? (-> arg0 vol))
(set! (-> gp-0 length) (max 110 (-> gp-0 length)))
(set! (-> gp-0 data 109 name) "heap-misc")
(+! (-> gp-0 data 109 count) 1)
(let ((v1-188 (asize-of (-> arg0 vol))))
(+! (-> gp-0 data 109 used) v1-188)
(+! (-> gp-0 data 109 total) (logand -16 (+ v1-188 15)))
)
)
)
)
#t
)
*null-kernel-context*
)
obj
)
(define *max-dma* 0)
(defmethod print-mem-usage memory-usage-block ((obj memory-usage-block) (level level) (fmt-dest object))
(local-vars (sv-16 object) (sv-32 string) (sv-48 int))
(let ((s3-0 (&- (-> level heap current) (the-as uint (-> level heap base)))))
(let ((v1-2 (+ (-> obj data 61 total) (-> obj data 62 total))))
(< #x10000 v1-2)
)
(let* ((v1-5
(- (- -49152 (the-as int (shl (-> level info borrow-size 1) 10))) (shl (-> level info borrow-size 0) 10))
)
(a0-12 (-> level info memory-mode))
(s2-0
(+ v1-5
(the-as int (cond
((= a0-12 (load-buffer-mode large))
#xbd0000
)
((= a0-12 (load-buffer-mode medium))
#x8fb800
)
((= a0-12 (load-buffer-mode small-center))
#x627000
)
((= a0-12 (load-buffer-mode borrow))
(+ (- #xc000 (the-as int (-> level heap base))) (the-as int (-> level heap top-base)))
)
(else
#x5e8000
)
)
)
)
)
(s1-0 (* (dma-buffer-length (-> *display* frames (-> *display* last-screen) global-buf)) 16))
)
(set! *max-dma* (max s1-0 *max-dma*))
(if (< (the-as int s2-0) s3-0)
(format fmt-dest "~3L")
)
(let ((s0-0 format))
(set! sv-16 fmt-dest)
(set! sv-32 "~0K~10,'-S--~5,'-DK-of-~5,'-DK--~5,'-DK-of-~5,'-DK--")
(let ((s4-1 (-> level name))
(s3-1 (sar s3-0 10))
(s2-1 (shr s2-0 10))
)
(set! sv-48 (sar (memory-used *nk-dead-pool*) 10))
(let ((t2-0 (sar (memory-total *nk-dead-pool*) 10))
(t9-4 s0-0)
(a0-22 sv-16)
(a1-8 sv-32)
(a2-1 s4-1)
(a3-0 s3-1)
(t0-0 s2-1)
(t1-0 sv-48)
)
(t9-4 a0-22 a1-8 a2-1 a3-0 t0-0 t1-0 t2-0)
(format fmt-dest "~5,'-DK/~5,'-DK--~%" (shr s1-0 10) (sar *max-dma* 10))
(when *stats-memory-short*
(let ((s3-2 (if (cpad-hold? 1 l3)
#t
fmt-dest
)
)
(s4-2 format)
(s2-2 "heap-~5,'-DK/~5,'-DK----~D---~D/~D~%")
(s1-1 (sar (memory-used *nk-dead-pool*) 10))
(s0-1 (sar (memory-total *nk-dead-pool*) 10))
)
(set! t0-0 (the-as int (compact-time *nk-dead-pool*)))
(set! t1-0 (the-as int (-> *nk-dead-pool* compact-count)))
(set! t2-0 (the-as int (-> *nk-dead-pool* compact-count-targ)))
(s4-2 s3-2 s2-2 s1-1 s0-1 t0-0 (the-as uint t1-0) (the-as uint t2-0))
)
)
(when (not *stats-memory-short*)
(set! (-> *dma-mem-usage* data 87 total)
(* (dma-buffer-length (-> *display* frames (-> *display* last-screen) debug-buf)) 16)
)
(let ((t9-11 format)
(a0-31 fmt-dest)
(a1-11 " bsp ~192H~5DK ~280Hdebug~456H~5DK~%")
(a2-6 (sar (+ (-> obj data 58 total) (-> obj data 59 total) (-> obj data 60 total)) 10))
(a3-3 (sar (-> *dma-mem-usage* data 87 total) 10))
)
(t9-11 a0-31 a1-11 a2-6 a3-3 (the-as none t0-0) (the-as none t1-0) (the-as none t2-0))
(format
fmt-dest
" bsp-leaf-vis ~192H~5DK~%"
(sar (+ (-> obj data 61 total) (-> obj data 62 total)) 10)
(the-as none a3-3)
)
(format fmt-dest " level-code ~192H~5DK~%" (sar (-> obj data 65 total) 10) (the-as none a3-3))
)
(format
fmt-dest
" tfrag ~192H~5DK ~280Htfragment~456H~5DK~%"
(sar
(+ (-> obj data 1 total)
(-> obj data 2 total)
(-> obj data 3 total)
(-> obj data 4 total)
(-> obj data 5 total)
(-> obj data 6 total)
(-> obj data 7 total)
(-> obj data 8 total)
)
10
)
(sar (-> *dma-mem-usage* data 1 total) 10)
)
(format
fmt-dest
" tie-proto ~192H~5DK ~280Hsky~456H~5DK~%"
(sar
(+ (-> obj data 9 total)
(-> obj data 10 total)
(-> obj data 11 total)
(-> obj data 12 total)
(-> obj data 13 total)
(-> obj data 14 total)
(-> obj data 16 total)
(-> obj data 17 total)
)
10
)
(sar (-> *dma-mem-usage* data 88 total) 10)
)
(format
fmt-dest
" tie-instance ~192H~5DK ~280Htie-fragment~456H~5DK~%"
(sar (+ (-> obj data 18 total) (-> obj data 20 total) (-> obj data 21 total) (-> obj data 22 total)) 10)
(sar (-> *dma-mem-usage* data 9 total) 10)
)
(format
fmt-dest
" shrub-proto ~192H~5DK ~280Htie-scissor~456H~5DK~%"
(sar
(+ (-> obj data 25 total)
(-> obj data 26 total)
(-> obj data 27 total)
(-> obj data 28 total)
(-> obj data 29 total)
(-> obj data 30 total)
(-> obj data 31 total)
(-> obj data 32 total)
(-> obj data 33 total)
)
10
)
(sar (-> *dma-mem-usage* data 15 total) 10)
)
(format
fmt-dest
" shrub-instance ~192H~5DK ~280Hshrubbery~456H~5DK~%"
(sar (-> obj data 34 total) 10)
(sar (-> *dma-mem-usage* data 27 total) 10)
)
(format
fmt-dest
" collision ~192H~5DK ~280Htie-generic~456H~5DK~%"
(sar
(+ (-> obj data 50 total)
(-> obj data 51 total)
(-> obj data 52 total)
(-> obj data 53 total)
(-> obj data 54 total)
(-> obj data 55 total)
(-> obj data 56 total)
(-> obj data 57 total)
)
10
)
(sar (-> *dma-mem-usage* data 17 total) 10)
)
(format
fmt-dest
" pris-geo ~192H~5DK ~280Hpris-fragment~456H~5DK~%"
(sar
(+ (-> obj data 35 total)
(-> obj data 36 total)
(-> obj data 37 total)
(-> obj data 38 total)
(-> obj data 39 total)
(-> obj data 40 total)
(-> obj data 41 total)
(-> obj data 42 total)
(-> obj data 73 total)
(-> obj data 74 total)
(-> obj data 75 total)
(-> obj data 76 total)
(-> obj data 78 total)
(-> obj data 81 total)
(-> obj data 80 total)
(-> obj data 111 total)
)
10
)
(sar (-> *dma-mem-usage* data 35 total) 10)
)
(format
fmt-dest
" pris-anim ~192H~5DK ~280Hpris-generic~456H~5DK~%"
(sar
(+ (-> obj data 67 total)
(-> obj data 68 total)
(-> obj data 69 total)
(-> obj data 70 total)
(-> obj data 71 total)
(-> obj data 77 total)
(-> obj data 79 total)
(-> obj data 72 total)
)
10
)
(sar (-> *dma-mem-usage* data 89 total) 10)
)
(format
fmt-dest
" textures ~192H~5DK ~280Htextures~456H~5DK~%"
(sar (-> obj data 82 total) 10)
(sar (-> *dma-mem-usage* data 82 total) 10)
)
(format fmt-dest " entity ~192H~5DK~%" (sar
(+ (-> obj data 66 total)
(-> obj data 43 total)
(-> obj data 44 total)
(-> obj data 45 total)
(-> obj data 49 total)
(-> obj data 48 total)
(-> obj data 46 total)
(-> obj data 47 total)
)
10
)
)
(format
fmt-dest
" misc ~192H~5DK ~280Hsprite~456H~5DK~%"
(sar
(+ (-> obj data 0 total)
(-> obj data 63 total)
(-> obj data 64 total)
(-> obj data 83 total)
(-> obj data 84 total)
)
10
)
(sar (-> *dma-mem-usage* data 85 total) 10)
)
)
)
)
)
)
)
(format fmt-dest "~1K~0L")
obj
)
0