Add a debug feature for tracking heap memory usage
By tagging allocations we can keep track of how much memory is being used for different purposes.
Currently all the state is global because we don't have convenient context pointers around everywhere, but for basic development/debugging purposes that's probably good enough.
Example output:
$ tools/dav1d --muxer null -i Chimera-AV1-8bit-1920x1080-6736kbps.ivf --threads 4 --framedelay 1
Type Allocs Reuses Share Peak size
---------------------------------------------------------------------
Picture buffers 9 9822 86.1% 29 860 416
Reference mv data 10 9746 4.6% 1 603 648
Thread context data 2 0 3.0% 1 044 304
Loopfilter data 3 0 2.1% 737 247
Dav1dData 8929 0 1.9% 668 488
Looprestoration data 2 0 0.8% 292 808
CDEF line buffers 1 0 0.4% 138 304
CDF contexts 9 9822 0.4% 124 992
Tile data 5 0 0.2% 68 025
Common context data 11 0 0.2% 63 688
Intra pred edges 1 0 0.1% 51 840
OBU headers 11 9898 0.1% 18 712
Picture context data 9 9822 0.0% 3 096
---------------------------------------------------------------------
9002 49110 34 675 568
$ tools/dav1d --muxer null -i Chimera-AV1-8bit-1920x1080-6736kbps.ivf --threads 16 --framedelay 4
Type Allocs Reuses Share Peak size
---------------------------------------------------------------------
Picture buffers 12 9819 33.0% 39 813 888
Coefficient data 4 0 22.0% 26 542 080
Block data 8 0 19.2% 23 224 320
Palette data 16 0 14.7% 17 694 720
Thread context data 3 0 3.5% 4 178 368
Reference mv data 19 9743 3.0% 3 591 016
Loopfilter data 12 0 2.4% 2 948 988
Looprestoration data 8 0 1.0% 1 171 232
Dav1dData 8929 0 0.8% 922 336
CDEF line buffers 4 0 0.5% 553 216
Tile data 25 0 0.3% 317 428
Intra pred edges 4 0 0.2% 207 360
CDF contexts 10 9821 0.1% 138 880
Common context data 20 0 0.1% 66 624
OBU headers 15 9894 0.0% 25 656
Picture context data 12 9819 0.0% 4 224
---------------------------------------------------------------------
9101 49096 120 658 968
Edited by Henrik Gramner