diff options
author | Martin Liska <mliska@suse.cz> | 2018-11-05 14:35:56 +0100 |
---|---|---|
committer | Martin Liska <marxin@gcc.gnu.org> | 2018-11-05 13:35:56 +0000 |
commit | 00e6775a5faa43702e96e315e7a1c22297983f2a (patch) | |
tree | bcf3354f255012a40df5a04906022748690bab09 /gcc/vec.c | |
parent | 93ef36dc6987e424e775ced165d9011c9b2477a8 (diff) | |
download | gcc-00e6775a5faa43702e96e315e7a1c22297983f2a.zip gcc-00e6775a5faa43702e96e315e7a1c22297983f2a.tar.gz gcc-00e6775a5faa43702e96e315e7a1c22297983f2a.tar.bz2 |
Fix vector memory statistics.
2018-11-05 Martin Liska <mliska@suse.cz>
* mem-stats.h (mem_alloc_description::release_instance_overhead):
Return T *.
* vec.c (struct vec_usage): Register m_element_size.
(vec_prefix::register_overhead): New arguments: elements and
element_size.
(vec_prefix::release_overhead): Subtract elements.
* vec.h (struct vec_prefix): Change signature.
(va_heap::reserve): Pass proper arguments.
(va_heap::release): Likewise.
From-SVN: r265799
Diffstat (limited to 'gcc/vec.c')
-rw-r--r-- | gcc/vec.c | 34 |
1 files changed, 21 insertions, 13 deletions
@@ -52,13 +52,14 @@ vnull vNULL; struct vec_usage: public mem_usage { /* Default constructor. */ - vec_usage (): m_items (0), m_items_peak (0) {} + vec_usage (): m_items (0), m_items_peak (0), m_element_size (0) {} /* Constructor. */ vec_usage (size_t allocated, size_t times, size_t peak, - size_t items, size_t items_peak) + size_t items, size_t items_peak, size_t element_size) : mem_usage (allocated, times, peak), - m_items (items), m_items_peak (items_peak) {} + m_items (items), m_items_peak (items_peak), + m_element_size (element_size) {} /* Sum the usage with SECOND usage. */ vec_usage @@ -68,7 +69,7 @@ struct vec_usage: public mem_usage m_times + second.m_times, m_peak + second.m_peak, m_items + second.m_items, - m_items_peak + second.m_items_peak); + m_items_peak + second.m_items_peak, 0); } /* Dump usage coupled to LOC location, where TOTAL is sum of all rows. */ @@ -81,7 +82,8 @@ struct vec_usage: public mem_usage s[48] = '\0'; - fprintf (stderr, "%-48s %10li:%4.1f%%%10li%10li:%4.1f%%%11li%11li\n", s, + fprintf (stderr, "%-48s %10li%11li:%4.1f%%%10li%10li:%4.1f%%%11li%11li\n", s, + (long)m_element_size, (long)m_allocated, m_allocated * 100.0 / total.m_allocated, (long)m_peak, (long)m_times, m_times * 100.0 / total.m_times, (long)m_items, (long)m_items_peak); @@ -101,8 +103,8 @@ struct vec_usage: public mem_usage static inline void dump_header (const char *name) { - fprintf (stderr, "%-48s %11s%15s%10s%17s%11s\n", name, "Leak", "Peak", - "Times", "Leak items", "Peak items"); + fprintf (stderr, "%-48s %10s%11s%16s%10s%17s%11s\n", name, "sizeof(T)", + "Leak", "Peak", "Times", "Leak items", "Peak items"); print_dash_line (); } @@ -110,6 +112,8 @@ struct vec_usage: public mem_usage size_t m_items; /* Peak value of number of allocated items. */ size_t m_items_peak; + /* Size of element of the vector. */ + size_t m_element_size; }; /* Vector memory description. */ @@ -118,12 +122,14 @@ static mem_alloc_description <vec_usage> vec_mem_desc; /* Account the overhead. */ void -vec_prefix::register_overhead (void *ptr, size_t size, size_t elements - MEM_STAT_DECL) +vec_prefix::register_overhead (void *ptr, size_t elements, + size_t element_size MEM_STAT_DECL) { vec_mem_desc.register_descriptor (ptr, VEC_ORIGIN, false FINAL_PASS_MEM_STAT); - vec_usage *usage = vec_mem_desc.register_instance_overhead (size, ptr); + vec_usage *usage + = vec_mem_desc.register_instance_overhead (elements * element_size, ptr); + usage->m_element_size = element_size; usage->m_items += elements; if (usage->m_items_peak < usage->m_items) usage->m_items_peak = usage->m_items; @@ -132,13 +138,15 @@ vec_prefix::register_overhead (void *ptr, size_t size, size_t elements /* Notice that the memory allocated for the vector has been freed. */ void -vec_prefix::release_overhead (void *ptr, size_t size, bool in_dtor - MEM_STAT_DECL) +vec_prefix::release_overhead (void *ptr, size_t size, size_t elements, + bool in_dtor MEM_STAT_DECL) { if (!vec_mem_desc.contains_descriptor_for_instance (ptr)) vec_mem_desc.register_descriptor (ptr, VEC_ORIGIN, false FINAL_PASS_MEM_STAT); - vec_mem_desc.release_instance_overhead (ptr, size, in_dtor); + vec_usage *usage = vec_mem_desc.release_instance_overhead (ptr, size, + in_dtor); + usage->m_items -= elements; } /* Calculate the number of slots to reserve a vector, making sure that |