Skip to content
  • Jameson Miller's avatar
    block alloc: add lifecycle APIs for cache_entry structs · a849735b
    Jameson Miller authored and Junio C Hamano's avatar Junio C Hamano committed
    
    
    It has been observed that the time spent loading an index with a large
    number of entries is partly dominated by malloc() calls. This change
    is in preparation for using memory pools to reduce the number of
    malloc() calls made to allocate cahce entries when loading an index.
    
    Add an API to allocate and discard cache entries, abstracting the
    details of managing the memory backing the cache entries. This commit
    does actually change how memory is managed - this will be done in a
    later commit in the series.
    
    This change makes the distinction between cache entries that are
    associated with an index and cache entries that are not associated with
    an index. A main use of cache entries is with an index, and we can
    optimize the memory management around this. We still have other cases
    where a cache entry is not persisted with an index, and so we need to
    handle the "transient" use case as well.
    
    To keep the congnitive overhead of managing the cache entries, there
    will only be a single discard function. This means there must be enough
    information kept with the cache entry so that we know how to discard
    them.
    
    A summary of the main functions in the API is:
    
    make_cache_entry: create cache entry for use in an index. Uses specified
                      parameters to populate cache_entry fields.
    
    make_empty_cache_entry: Create an empty cache entry for use in an index.
                            Returns cache entry with empty fields.
    
    make_transient_cache_entry: create cache entry that is not used in an
                                index. Uses specified parameters to populate
                                cache_entry fields.
    
    make_empty_transient_cache_entry: create cache entry that is not used in
                                      an index. Returns cache entry with
                                      empty fields.
    
    discard_cache_entry: A single function that knows how to discard a cache
                         entry regardless of how it was allocated.
    
    Signed-off-by: default avatarJameson Miller <jamill@microsoft.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    a849735b