STLdoc
STLdocumentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Typedefs | Enumerations | Functions
__gnu_profile Namespace Reference

GNU profile code for public use. More...

Classes

struct  __reentrance_guard
 Reentrance guard. More...
 
class  __container_size_info
 A container size instrumentation line in the object table. More...
 
class  __container_size_stack_info
 A container size instrumentation line in the stack table. More...
 
class  __trace_container_size
 Container size instrumentation trace producer. More...
 
class  __hashfunc_info
 A hash performance instrumentation line in the object table. More...
 
class  __hashfunc_stack_info
 A hash performance instrumentation line in the stack table. More...
 
class  __trace_hash_func
 Hash performance instrumentation producer. More...
 
class  __trace_hashtable_size
 Hashtable size instrumentation trace producer. More...
 
class  __list2slist_info
 
class  __list2slist_stack_info
 
class  __trace_list_to_slist
 
class  __list2vector_info
 A list-to-vector instrumentation line in the object table. More...
 
class  __list2vector_stack_info
 
class  __trace_list_to_vector
 
class  __map2umap_info
 A map-to-unordered_map instrumentation line in the object table. More...
 
class  __map2umap_stack_info
 A map-to-unordered_map instrumentation line in the stack table. More...
 
class  __trace_map2umap
 Map-to-unordered_map instrumentation producer. More...
 
class  __stack_hash
 Hash function for summary trace using call stack as index. More...
 
class  __object_info_base
 Base class for a line in the object table. More...
 
class  __stack_info_base
 Base class for a line in the stack table. More...
 
struct  __warning_data
 Representation of a warning. More...
 
struct  __cost_factor
 
class  __trace_base
 Base class for all trace producers. More...
 
struct  __warn
 
struct  __cost_factor_writer
 
struct  __cost_factor_setter
 
class  __trace_vector_size
 Hashtable size instrumentation trace producer. More...
 
class  __vector2list_info
 A vector-to-list instrumentation line in the object table. More...
 
class  __vector2list_stack_info
 A vector-to-list instrumentation line in the stack table. More...
 
class  __trace_vector_to_list
 Vector-to-list instrumentation producer. More...
 

Typedefs

typedef const void * __object_t
 
typedef void * __instruction_address_t
 
typedef
std::_GLIBCXX_STD_C::vector
< __instruction_address_t
__stack_npt
 
typedef __stack_npt__stack_t
 
typedef
_GLIBCXX_IMPL_UNORDERED_MAP
< std::string, std::string > 
__env_t
 Internal environment. Values can be set one of two ways: More...
 
typedef
std::_GLIBCXX_STD_C::vector
< __warning_data
__warning_vector_t
 
typedef
std::_GLIBCXX_STD_C::vector
< __cost_factor * > 
__cost_factor_vector
 

Enumerations

enum  __state_type { __ON, __OFF, __INVALID }
 

Functions

bool __turn_on ()
 
bool __turn_off ()
 
bool __is_invalid ()
 
bool __is_on ()
 
bool __is_off ()
 
void __report (void)
 Final report method, registered with atexit. More...
 
void __trace_hashtable_size_resize (const void *, std::size_t, std::size_t)
 
void __trace_hashtable_size_destruct (const void *, std::size_t, std::size_t)
 
void __trace_hashtable_size_construct (const void *, std::size_t)
 
void __trace_vector_size_resize (const void *, std::size_t, std::size_t)
 
void __trace_vector_size_destruct (const void *, std::size_t, std::size_t)
 
void __trace_vector_size_construct (const void *, std::size_t)
 
void __trace_hash_func_destruct (const void *, std::size_t, std::size_t, std::size_t)
 
void __trace_hash_func_construct (const void *)
 
void __trace_vector_to_list_destruct (const void *)
 
void __trace_vector_to_list_construct (const void *)
 
void __trace_vector_to_list_insert (const void *, std::size_t, std::size_t)
 
void __trace_vector_to_list_iterate (const void *, std::size_t)
 
void __trace_vector_to_list_invalid_operator (const void *)
 
void __trace_vector_to_list_resize (const void *, std::size_t, std::size_t)
 
void __trace_vector_to_list_find (const void *, std::size_t)
 
void __trace_list_to_slist_destruct (const void *)
 
void __trace_list_to_slist_construct (const void *)
 
void __trace_list_to_slist_rewind (const void *)
 
void __trace_list_to_slist_operation (const void *)
 
void __trace_list_to_vector_destruct (const void *)
 
void __trace_list_to_vector_construct (const void *)
 
void __trace_list_to_vector_insert (const void *, std::size_t, std::size_t)
 
void __trace_list_to_vector_iterate (const void *, std::size_t)
 
void __trace_list_to_vector_invalid_operator (const void *)
 
void __trace_list_to_vector_resize (const void *, std::size_t, std::size_t)
 
void __trace_list_to_set_destruct (const void *)
 
void __trace_list_to_set_construct (const void *)
 
void __trace_list_to_set_insert (const void *, std::size_t, std::size_t)
 
void __trace_list_to_set_iterate (const void *, std::size_t)
 
void __trace_list_to_set_invalid_operator (const void *)
 
void __trace_list_to_set_find (const void *, std::size_t)
 
void __trace_map_to_unordered_map_construct (const void *)
 
void __trace_map_to_unordered_map_invalidate (const void *)
 
void __trace_map_to_unordered_map_insert (const void *, std::size_t, std::size_t)
 
void __trace_map_to_unordered_map_erase (const void *, std::size_t, std::size_t)
 
void __trace_map_to_unordered_map_iterate (const void *, std::size_t)
 
void __trace_map_to_unordered_map_find (const void *, std::size_t)
 
void __trace_map_to_unordered_map_destruct (const void *)
 
template<typename _Container >
void __insert_top_n (_Container &__output, const typename _Container::value_type &__value, typename _Container::size_type __n)
 
template<typename _Container >
void __top_n (const _Container &__input, _Container &__output, typename _Container::size_type __n)
 
template<typename _InputIterator , typename _Function >
_Function __for_each (_InputIterator __first, _InputIterator __last, _Function __f)
 
template<typename _ForwardIterator , typename _Tp >
_ForwardIterator __remove (_ForwardIterator __first, _ForwardIterator __last, const _Tp &__value)
 
void __trace_hash_func_init ()
 
void __trace_hash_func_report (FILE *__f, __warning_vector_t &__warnings)
 
void __trace_hashtable_size_init ()
 
void __trace_hashtable_size_report (FILE *__f, __warning_vector_t &__warnings)
 
void __trace_list_to_slist_init ()
 
void __trace_list_to_slist_report (FILE *__f, __warning_vector_t &__warnings)
 
void __trace_list_to_vector_init ()
 
void __trace_list_to_vector_report (FILE *__f, __warning_vector_t &__warnings)
 
int __log2 (std::size_t __size)
 
float __map_insert_cost (std::size_t __size)
 
float __map_erase_cost (std::size_t __size)
 
float __map_find_cost (std::size_t __size)
 
void __trace_map_to_unordered_map_init ()
 
void __trace_map_to_unordered_map_report (FILE *__f, __warning_vector_t &__warnings)
 
std::size_t __stack_max_depth ()
 
__stack_t __get_stack ()
 
std::size_t __size (__stack_t __stack)
 
void __write (FILE *__f, __stack_t __stack)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__state_type, __state, __INVALID)
 
bool __turn (__state_type __s)
 
 _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA (__env_t, __env)
 
 _GLIBCXX_PROFILE_DEFINE_UNINIT_DATA (__gnu_cxx::__mutex, __global_lock)
 Master lock. More...
 
void __trace_vector_size_init ()
 
void __trace_vector_to_list_init ()
 
void __trace_vector_size_report (FILE *, __warning_vector_t &)
 
void __trace_vector_to_list_report (FILE *, __warning_vector_t &)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__trace_hash_func *, _S_hash_func, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__trace_hashtable_size *, _S_hashtable_size, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__trace_map2umap *, _S_map2umap, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__trace_vector_size *, _S_vector_size, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__trace_vector_to_list *, _S_vector_to_list, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__trace_list_to_slist *, _S_list_to_slist, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__trace_list_to_vector *, _S_list_to_vector, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __vector_shift_cost_factor,{"__vector_shift_cost_factor", 1.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __vector_iterate_cost_factor,{"__vector_iterate_cost_factor", 1.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __vector_resize_cost_factor,{"__vector_resize_cost_factor", 1.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __list_shift_cost_factor,{"__list_shift_cost_factor", 0.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __list_iterate_cost_factor,{"__list_iterate_cost_factor", 10.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __list_resize_cost_factor,{"__list_resize_cost_factor", 0.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __map_insert_cost_factor,{"__map_insert_cost_factor", 1.5})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __map_erase_cost_factor,{"__map_erase_cost_factor", 1.5})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __map_find_cost_factor,{"__map_find_cost_factor", 1})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __map_iterate_cost_factor,{"__map_iterate_cost_factor", 2.3})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __umap_insert_cost_factor,{"__umap_insert_cost_factor", 12.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __umap_erase_cost_factor,{"__umap_erase_cost_factor", 12.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __umap_find_cost_factor,{"__umap_find_cost_factor", 10.0})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor, __umap_iterate_cost_factor,{"__umap_iterate_cost_factor", 1.7})
 
 _GLIBCXX_PROFILE_DEFINE_DATA (__cost_factor_vector *, __cost_factors, 0)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (const char *, _S_trace_file_name, _GLIBCXX_PROFILE_TRACE_PATH_ROOT)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (std::size_t, _S_max_warn_count, _GLIBCXX_PROFILE_MAX_WARN_COUNT)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (std::size_t, _S_max_stack_depth, _GLIBCXX_PROFILE_MAX_STACK_DEPTH)
 
 _GLIBCXX_PROFILE_DEFINE_DATA (std::size_t, _S_max_mem, _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC)
 
std::size_t __max_mem ()
 
std::size_t __env_to_size_t (const char *__env_var, std::size_t __default_value)
 
void __set_max_stack_trace_depth ()
 
void __set_max_mem ()
 
int __log_magnitude (float __f)
 
FILE * __open_output_file (const char *__extension)
 
void __set_trace_path ()
 
void __set_max_warn_count ()
 
void __read_cost_factors ()
 
void __write_cost_factors ()
 
void __set_cost_factors ()
 
void __profcxx_init_unconditional ()
 
bool __profcxx_init ()
 This function must be called by each instrumentation point. More...
 

Detailed Description

GNU profile code for public use.

Typedef Documentation

typedef std::_GLIBCXX_STD_C::vector<__cost_factor*> __gnu_profile::__cost_factor_vector
typedef _GLIBCXX_IMPL_UNORDERED_MAP<std::string, std::string> __gnu_profile::__env_t

Internal environment. Values can be set one of two ways:

  1. In config file "var = value". The default config file path is libstdcxx-profile.conf.
  2. By setting process environment variables. For instance, in a Bash shell you can set the unit cost of iterating through a map like this: export __map_iterate_cost_factor=5.0. If a value is set both in the input file and through an environment variable, the environment value takes precedence.
typedef const void* __gnu_profile::__object_t
typedef std::_GLIBCXX_STD_C::vector<__instruction_address_t> __gnu_profile::__stack_npt
typedef std::_GLIBCXX_STD_C::vector<__warning_data> __gnu_profile::__warning_vector_t

Enumeration Type Documentation

Enumerator
__ON 
__OFF 
__INVALID 
35 { __ON, __OFF, __INVALID };
Definition: profiler_state.h:35
Definition: profiler_state.h:35
Definition: profiler_state.h:35

Function Documentation

std::size_t __gnu_profile::__env_to_size_t ( const char *  __env_var,
std::size_t  __default_value 
)
inline
328  {
329  char* __env_value = std::getenv(__env_var);
330  if (__env_value)
331  {
332  errno = 0;
333  long __converted_value = std::strtol(__env_value, 0, 10);
334  if (errno || __converted_value < 0)
335  {
336  std::fprintf(stderr,
337  "Bad value for environment variable '%s'.\n",
338  __env_var);
339  std::abort();
340  }
341  else
342  return static_cast<std::size_t>(__converted_value);
343  }
344  else
345  return __default_value;
346  }
#define errno
Definition: cerrno:48
__SIZE_TYPE__ size_t
Definition: stddef.h:212
template<typename _InputIterator , typename _Function >
_Function __gnu_profile::__for_each ( _InputIterator  __first,
_InputIterator  __last,
_Function  __f 
)
85  {
86  for (; __first != __last; ++__first)
87  __f(*__first);
88  return __f;
89  }
__stack_t __gnu_profile::__get_stack ( )
inline
51  {
52 #if defined _GLIBCXX_HAVE_EXECINFO_H
53  std::size_t __max_depth = __stack_max_depth();
54  if (__max_depth == 0)
55  return 0;
56  __stack_npt __buffer(__max_depth);
57  int __depth = backtrace(&__buffer[0], __max_depth);
58  __stack_t __stack = new __stack_npt(__depth);
59  __builtin_memcpy(&(*__stack)[0], &__buffer[0],
60  __depth * sizeof(__object_t));
61  return __stack;
62 #else
63  return 0;
64 #endif
65  }
std::_GLIBCXX_STD_C::vector< __instruction_address_t > __stack_npt
Definition: profiler_node.h:44
__stack_npt * __stack_t
Definition: profiler_node.h:45
__SIZE_TYPE__ size_t
Definition: stddef.h:212
std::size_t __stack_max_depth()
Definition: profiler_trace.h:174
const void * __object_t
Definition: profiler_node.h:42
template<typename _Container >
void __gnu_profile::__insert_top_n ( _Container &  __output,
const typename _Container::value_type &  __value,
typename _Container::size_type  __n 
)
44  {
45  typename _Container::iterator __it = __output.begin();
46  typename _Container::size_type __count = 0;
47 
48  // Skip up to N - 1 elements larger than VALUE.
49  // XXX: Could do binary search for random iterators.
50  while (true)
51  {
52  if (__count >= __n)
53  // VALUE is not in top N.
54  return;
55 
56  if (__it == __output.end())
57  break;
58 
59  if (*__it < __value)
60  break;
61 
62  ++__it;
63  ++__count;
64  }
65 
66  __output.insert(__it, __value);
67  }
bool __gnu_profile::__is_invalid ( )
inline
66  { return _GLIBCXX_PROFILE_DATA(__state) == __INVALID; }
Definition: profiler_state.h:35
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
bool __gnu_profile::__is_off ( )
inline
62  { return _GLIBCXX_PROFILE_DATA(__state) == __OFF; }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
Definition: profiler_state.h:35
bool __gnu_profile::__is_on ( )
inline
58  { return _GLIBCXX_PROFILE_DATA(__state) == __ON; }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
Definition: profiler_state.h:35
int __gnu_profile::__log2 ( std::size_t  __size)
inline
41  {
42  for (int __bit_count = sizeof(std::size_t) - 1; __bit_count >= 0;
43  -- __bit_count)
44  if ((2 << __bit_count) & __size)
45  return __bit_count;
46  return 0;
47  }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
__SIZE_TYPE__ size_t
Definition: stddef.h:212
int __gnu_profile::__log_magnitude ( float  __f)
inline
366  {
367  const float __log_base = 10.0;
368  int __result = 0;
369  int __sign = 1;
370 
371  if (__f < 0)
372  {
373  __f = -__f;
374  __sign = -1;
375  }
376 
377  while (__f > __log_base)
378  {
379  ++__result;
380  __f /= 10.0;
381  }
382  return __sign * __result;
383  }
float __gnu_profile::__map_erase_cost ( std::size_t  __size)
inline
56  { return (_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor).__value
57  * static_cast<float>(__log2(__size))); }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
int __log2(std::size_t __size)
Definition: profiler_map_to_unordered_map.h:40
float __gnu_profile::__map_find_cost ( std::size_t  __size)
inline
61  { return (_GLIBCXX_PROFILE_DATA(__map_find_cost_factor).__value
62  * static_cast<float>(__log2(__size))); }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
int __log2(std::size_t __size)
Definition: profiler_map_to_unordered_map.h:40
float __gnu_profile::__map_insert_cost ( std::size_t  __size)
inline
51  { return (_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor).__value
52  * static_cast<float>(__log2(__size))); }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
int __log2(std::size_t __size)
Definition: profiler_map_to_unordered_map.h:40
std::size_t __gnu_profile::__max_mem ( )
inline
179  { return _GLIBCXX_PROFILE_DATA(_S_max_mem); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
FILE* __gnu_profile::__open_output_file ( const char *  __extension)
inline
387  {
388  // The path is made of _S_trace_file_name + "." + extension.
389  std::size_t __root_len
390  = __builtin_strlen(_GLIBCXX_PROFILE_DATA(_S_trace_file_name));
391  std::size_t __ext_len = __builtin_strlen(__extension);
392  char* __file_name = new char[__root_len + 1 + __ext_len + 1];
393  __builtin_memcpy(__file_name,
394  _GLIBCXX_PROFILE_DATA(_S_trace_file_name),
395  __root_len);
396  *(__file_name + __root_len) = '.';
397  __builtin_memcpy(__file_name + __root_len + 1,
398  __extension, __ext_len + 1);
399 
400  FILE* __out_file = std::fopen(__file_name, "w");
401  if (!__out_file)
402  {
403  std::fprintf(stderr, "Could not open trace file '%s'.\n",
404  __file_name);
405  std::abort();
406  }
407 
408  delete[] __file_name;
409  return __out_file;
410  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
__SIZE_TYPE__ size_t
Definition: stddef.h:212
bool __gnu_profile::__profcxx_init ( )
inline

This function must be called by each instrumentation point.

The common path is inlined fully.

650  {
651  if (__is_invalid())
653 
654  return __is_on();
655  }
bool __is_on()
Definition: profiler_state.h:57
bool __is_invalid()
Definition: profiler_state.h:65
void __profcxx_init_unconditional()
Definition: profiler_trace.h:608
void __gnu_profile::__profcxx_init_unconditional ( )
inline
609  {
610  _GLIBCXX_PROFILE_DATA(__global_lock).lock();
611 
612  if (__is_invalid())
613  {
615 
616  if (_GLIBCXX_PROFILE_DATA(_S_max_warn_count) == 0)
617  __turn_off();
618  else
619  {
621  __set_max_mem();
626 
634 
635  std::atexit(__report);
636 
637  __turn_on();
638  }
639  }
640 
641  _GLIBCXX_PROFILE_DATA(__global_lock).unlock();
642  }
void __trace_list_to_vector_init()
Definition: profiler_list_to_vector.h:252
void __trace_hash_func_init()
Definition: profiler_hash_func.h:140
void __set_trace_path()
Definition: profiler_trace.h:470
void __set_max_warn_count()
Definition: profiler_trace.h:482
void __read_cost_factors()
Definition: profiler_trace.h:493
bool __turn_on()
Definition: profiler_state.h:49
bool __turn_off()
Definition: profiler_state.h:53
void __write_cost_factors()
Definition: profiler_trace.h:539
void __report(void)
Final report method, registered with atexit.
Definition: profiler_trace.h:440
void __set_max_mem()
Definition: profiler_trace.h:357
void __trace_list_to_slist_init()
Definition: profiler_list_to_slist.h:157
void __trace_map_to_unordered_map_init()
Definition: profiler_map_to_unordered_map.h:189
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
bool __is_invalid()
Definition: profiler_state.h:65
void __set_cost_factors()
Definition: profiler_trace.h:571
void __trace_hashtable_size_init()
Definition: profiler_hashtable_size.h:52
void __set_max_stack_trace_depth()
Definition: profiler_trace.h:349
void __trace_vector_size_init()
Definition: profiler_vector_size.h:52
void __trace_vector_to_list_init()
Definition: profiler_vector_to_list.h:266
void __gnu_profile::__read_cost_factors ( )
inline
494  {
495  std::string __conf_file_name(_GLIBCXX_PROFILE_DATA(_S_trace_file_name));
496  __conf_file_name += ".conf";
497 
498  std::ifstream __conf_file(__conf_file_name.c_str());
499 
500  if (__conf_file.is_open())
501  {
502  std::string __line;
503 
504  while (std::getline(__conf_file, __line))
505  {
506  std::string::size_type __i = __line.find_first_not_of(" \t\n\v");
507 
508  if (__line.length() <= 0 || __line[__i] == '#')
509  // Skip empty lines or comments.
510  continue;
511  }
512 
513  // Trim.
514  __line.erase(__remove(__line.begin(), __line.end(), ' '),
515  __line.end());
516  std::string::size_type __pos = __line.find("=");
517  std::string __factor_name = __line.substr(0, __pos);
518  std::string::size_type __end = __line.find_first_of(";\n");
519  std::string __factor_value = __line.substr(__pos + 1, __end - __pos);
520 
521  _GLIBCXX_PROFILE_DATA(__env)[__factor_name] = __factor_value;
522  }
523  }
_ForwardIterator __remove(_ForwardIterator __first, _ForwardIterator __last, const _Tp &__value)
Definition: profiler_algos.h:94
basic_string< char > string
Definition: string:1153
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
std::basic_istream< _CharT, _Traits > & getline(std::basic_istream< _CharT, _Traits > &__is, basic_string< _CharT, _Traits, _Allocator > &__str, _CharT __delim)
Definition: string:1132
template<typename _ForwardIterator , typename _Tp >
_ForwardIterator __gnu_profile::__remove ( _ForwardIterator  __first,
_ForwardIterator  __last,
const _Tp &  __value 
)
96  {
97  if(__first == __last)
98  return __first;
99  _ForwardIterator __result = __first;
100  ++__first;
101  for(; __first != __last; ++__first)
102  if(!(*__first == __value))
103  {
104  *__result = *__first;
105  ++__result;
106  }
107  return __result;
108  }
void __gnu_profile::__report ( void  )
inline

Final report method, registered with atexit.

This can also be called directly by user code, including signal handlers. It is protected against deadlocks by the reentrance guard in profiler.h. However, when called from a signal handler that triggers while within __gnu_profile (under the guarded zone), no output will be produced.

441  {
442  _GLIBCXX_PROFILE_DATA(__global_lock).lock();
443 
444  __warning_vector_t __warnings, __top_warnings;
445 
446  FILE* __raw_file = __open_output_file("raw");
447  __trace_vector_size_report(__raw_file, __warnings);
448  __trace_hashtable_size_report(__raw_file, __warnings);
449  __trace_hash_func_report(__raw_file, __warnings);
450  __trace_vector_to_list_report(__raw_file, __warnings);
451  __trace_list_to_slist_report(__raw_file, __warnings);
452  __trace_list_to_vector_report(__raw_file, __warnings);
453  __trace_map_to_unordered_map_report(__raw_file, __warnings);
454  std::fclose(__raw_file);
455 
456  // Sort data by magnitude, keeping just top N.
457  std::size_t __cutoff = std::min(_GLIBCXX_PROFILE_DATA(_S_max_warn_count),
458  __warnings.size());
459  __top_n(__warnings, __top_warnings, __cutoff);
460 
461  FILE* __warn_file = __open_output_file("txt");
462  __for_each(__top_warnings.begin(), __top_warnings.end(),
463  __warn(__warn_file));
464  std::fclose(__warn_file);
465 
466  _GLIBCXX_PROFILE_DATA(__global_lock).unlock();
467  }
void __trace_vector_size_report(FILE *, __warning_vector_t &)
Definition: profiler_vector_size.h:56
_Function __for_each(_InputIterator __first, _InputIterator __last, _Function __f)
Definition: profiler_algos.h:84
FILE * __open_output_file(const char *__extension)
Definition: profiler_trace.h:386
void __trace_list_to_vector_report(FILE *__f, __warning_vector_t &__warnings)
Definition: profiler_list_to_vector.h:256
const _Tp & min(const _Tp &__a, const _Tp &__b)
Equivalent to std::min.
Definition: base.h:144
std::_GLIBCXX_STD_C::vector< __warning_data > __warning_vector_t
Definition: profiler_trace.h:93
void __trace_list_to_slist_report(FILE *__f, __warning_vector_t &__warnings)
Definition: profiler_list_to_slist.h:161
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __trace_hashtable_size_report(FILE *__f, __warning_vector_t &__warnings)
Definition: profiler_hashtable_size.h:56
void __trace_map_to_unordered_map_report(FILE *__f, __warning_vector_t &__warnings)
Definition: profiler_map_to_unordered_map.h:193
__SIZE_TYPE__ size_t
Definition: stddef.h:212
void __top_n(const _Container &__input, _Container &__output, typename _Container::size_type __n)
Definition: profiler_algos.h:72
void __trace_hash_func_report(FILE *__f, __warning_vector_t &__warnings)
Definition: profiler_hash_func.h:144
void __trace_vector_to_list_report(FILE *, __warning_vector_t &)
Definition: profiler_vector_to_list.h:270
void __gnu_profile::__set_cost_factors ( )
inline
572  {
573  _GLIBCXX_PROFILE_DATA(__cost_factors) = new __cost_factor_vector;
574  _GLIBCXX_PROFILE_DATA(__cost_factors)->
575  push_back(&_GLIBCXX_PROFILE_DATA(__vector_shift_cost_factor));
576  _GLIBCXX_PROFILE_DATA(__cost_factors)->
577  push_back(&_GLIBCXX_PROFILE_DATA(__vector_iterate_cost_factor));
578  _GLIBCXX_PROFILE_DATA(__cost_factors)->
579  push_back(&_GLIBCXX_PROFILE_DATA(__vector_resize_cost_factor));
580  _GLIBCXX_PROFILE_DATA(__cost_factors)->
581  push_back(&_GLIBCXX_PROFILE_DATA(__list_shift_cost_factor));
582  _GLIBCXX_PROFILE_DATA(__cost_factors)->
583  push_back(&_GLIBCXX_PROFILE_DATA(__list_iterate_cost_factor));
584  _GLIBCXX_PROFILE_DATA(__cost_factors)->
585  push_back(&_GLIBCXX_PROFILE_DATA(__list_resize_cost_factor));
586  _GLIBCXX_PROFILE_DATA(__cost_factors)->
587  push_back(&_GLIBCXX_PROFILE_DATA(__map_insert_cost_factor));
588  _GLIBCXX_PROFILE_DATA(__cost_factors)->
589  push_back(&_GLIBCXX_PROFILE_DATA(__map_erase_cost_factor));
590  _GLIBCXX_PROFILE_DATA(__cost_factors)->
591  push_back(&_GLIBCXX_PROFILE_DATA(__map_find_cost_factor));
592  _GLIBCXX_PROFILE_DATA(__cost_factors)->
593  push_back(&_GLIBCXX_PROFILE_DATA(__map_iterate_cost_factor));
594  _GLIBCXX_PROFILE_DATA(__cost_factors)->
595  push_back(&_GLIBCXX_PROFILE_DATA(__umap_insert_cost_factor));
596  _GLIBCXX_PROFILE_DATA(__cost_factors)->
597  push_back(&_GLIBCXX_PROFILE_DATA(__umap_erase_cost_factor));
598  _GLIBCXX_PROFILE_DATA(__cost_factors)->
599  push_back(&_GLIBCXX_PROFILE_DATA(__umap_find_cost_factor));
600  _GLIBCXX_PROFILE_DATA(__cost_factors)->
601  push_back(&_GLIBCXX_PROFILE_DATA(__umap_iterate_cost_factor));
602  __for_each(_GLIBCXX_PROFILE_DATA(__cost_factors)->begin(),
603  _GLIBCXX_PROFILE_DATA(__cost_factors)->end(),
604  __cost_factor_setter());
605  }
_Function __for_each(_InputIterator __first, _InputIterator __last, _Function __f)
Definition: profiler_algos.h:84
std::_GLIBCXX_STD_C::vector< __cost_factor * > __cost_factor_vector
Definition: profiler_trace.h:124
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__set_max_mem ( )
inline
358  {
359  _GLIBCXX_PROFILE_DATA(_S_max_mem)
361  _GLIBCXX_PROFILE_DATA(_S_max_mem));
362  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
std::size_t __env_to_size_t(const char *__env_var, std::size_t __default_value)
Definition: profiler_trace.h:327
#define _GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC_ENV_VAR
Definition: profiler.h:392
void __gnu_profile::__set_max_stack_trace_depth ( )
inline
350  {
351  _GLIBCXX_PROFILE_DATA(_S_max_stack_depth)
353  _GLIBCXX_PROFILE_DATA(_S_max_stack_depth));
354  }
#define _GLIBCXX_PROFILE_MAX_STACK_DEPTH_ENV_VAR
Definition: profiler.h:385
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
std::size_t __env_to_size_t(const char *__env_var, std::size_t __default_value)
Definition: profiler_trace.h:327
void __gnu_profile::__set_max_warn_count ( )
inline
483  {
484  char* __env_max_warn_count_str
486 
487  if (__env_max_warn_count_str)
488  _GLIBCXX_PROFILE_DATA(_S_max_warn_count)
489  = static_cast<std::size_t>(std::atoi(__env_max_warn_count_str));
490  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
#define _GLIBCXX_PROFILE_MAX_WARN_COUNT_ENV_VAR
Definition: profiler.h:375
__SIZE_TYPE__ size_t
Definition: stddef.h:212
void __gnu_profile::__set_trace_path ( )
inline
471  {
472  char* __env_trace_file_name = std::getenv(_GLIBCXX_PROFILE_TRACE_ENV_VAR);
473 
474  if (__env_trace_file_name)
475  _GLIBCXX_PROFILE_DATA(_S_trace_file_name) = __env_trace_file_name;
476 
477  // Make sure early that we can create the trace file.
478  std::fclose(__open_output_file("txt"));
479  }
FILE * __open_output_file(const char *__extension)
Definition: profiler_trace.h:386
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
#define _GLIBCXX_PROFILE_TRACE_ENV_VAR
Definition: profiler.h:372
std::size_t __gnu_profile::__size ( __stack_t  __stack)
inline
69  {
70  if (!__stack)
71  return 0;
72  else
73  return __stack->size();
74  }
std::size_t __gnu_profile::__stack_max_depth ( )
inline
175  { return _GLIBCXX_PROFILE_DATA(_S_max_stack_depth); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
template<typename _Container >
void __gnu_profile::__top_n ( const _Container &  __input,
_Container &  __output,
typename _Container::size_type  __n 
)
74  {
75  __output.clear();
76  typename _Container::const_iterator __it;
77  for (__it = __input.begin(); __it != __input.end(); ++__it)
78  __insert_top_n(__output, *__it, __n);
79  }
void __insert_top_n(_Container &__output, const typename _Container::value_type &__value, typename _Container::size_type __n)
Definition: profiler_algos.h:41
void __gnu_profile::__trace_hash_func_construct ( const void *  __obj)
inline
155  {
156  if (!__profcxx_init())
157  return;
158 
159  _GLIBCXX_PROFILE_DATA(_S_hash_func)->__insert(__obj, __get_stack());
160  }
__stack_t __get_stack()
Definition: profiler_node.h:50
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hash_func_destruct ( const void *  __obj,
std::size_t  __chain,
std::size_t  __accesses,
std::size_t  __hops 
)
inline
165  {
166  if (!__profcxx_init())
167  return;
168 
169  _GLIBCXX_PROFILE_DATA(_S_hash_func)->__destruct(__obj, __chain,
170  __accesses, __hops);
171  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hash_func_init ( )
inline
141  { _GLIBCXX_PROFILE_DATA(_S_hash_func) = new __trace_hash_func(); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hash_func_report ( FILE *  __f,
__warning_vector_t &  __warnings 
)
inline
145  {
146  if (_GLIBCXX_PROFILE_DATA(_S_hash_func))
147  {
148  _GLIBCXX_PROFILE_DATA(_S_hash_func)->__collect_warnings(__warnings);
149  _GLIBCXX_PROFILE_DATA(_S_hash_func)->__write(__f);
150  }
151  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hashtable_size_construct ( const void *  __obj,
std::size_t  __num 
)
inline
68  {
69  if (!__profcxx_init())
70  return;
71 
72  _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__insert(__obj, __get_stack(),
73  __num);
74  }
__stack_t __get_stack()
Definition: profiler_node.h:50
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hashtable_size_destruct ( const void *  __obj,
std::size_t  __num,
std::size_t  __inum 
)
inline
79  {
80  if (!__profcxx_init())
81  return;
82 
83  _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__destruct(__obj, __num, __inum);
84  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hashtable_size_init ( )
inline
53  { _GLIBCXX_PROFILE_DATA(_S_hashtable_size) = new __trace_hashtable_size(); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hashtable_size_report ( FILE *  __f,
__warning_vector_t &  __warnings 
)
inline
57  {
58  if (_GLIBCXX_PROFILE_DATA(_S_hashtable_size))
59  {
60  _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->
61  __collect_warnings(__warnings);
62  _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__write(__f);
63  }
64  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_hashtable_size_resize ( const void *  __obj,
std::size_t  __from,
std::size_t  __to 
)
inline
89  {
90  if (!__profcxx_init())
91  return;
92 
93  _GLIBCXX_PROFILE_DATA(_S_hashtable_size)->__resize(__obj, __from, __to);
94  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_set_construct ( const void *  )
void __gnu_profile::__trace_list_to_set_destruct ( const void *  )
void __gnu_profile::__trace_list_to_set_find ( const void *  ,
std::size_t   
)
void __gnu_profile::__trace_list_to_set_insert ( const void *  ,
std::size_t  ,
std::size_t   
)
void __gnu_profile::__trace_list_to_set_invalid_operator ( const void *  )
void __gnu_profile::__trace_list_to_set_iterate ( const void *  ,
std::size_t   
)
void __gnu_profile::__trace_list_to_slist_construct ( const void *  __obj)
inline
191  {
192  if (!__profcxx_init())
193  return;
194 
195  _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__insert(__obj, __get_stack());
196  }
__stack_t __get_stack()
Definition: profiler_node.h:50
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_slist_destruct ( const void *  __obj)
inline
200  {
201  if (!__profcxx_init())
202  return;
203 
204  _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__destruct(__obj);
205  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_slist_init ( )
inline
158  { _GLIBCXX_PROFILE_DATA(_S_list_to_slist) = new __trace_list_to_slist(); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_slist_operation ( const void *  __obj)
inline
182  {
183  if (!__profcxx_init())
184  return;
185 
186  _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__record_operation(__obj);
187  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_slist_report ( FILE *  __f,
__warning_vector_t &  __warnings 
)
inline
162  {
163  if (_GLIBCXX_PROFILE_DATA(_S_list_to_slist))
164  {
165  _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->
166  __collect_warnings(__warnings);
167  _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__write(__f);
168  }
169  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_slist_rewind ( const void *  __obj)
inline
173  {
174  if (!__profcxx_init())
175  return;
176 
177  _GLIBCXX_PROFILE_DATA(_S_list_to_slist)->__opr_rewind(__obj);
178  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_construct ( const void *  __obj)
inline
268  {
269  if (!__profcxx_init())
270  return;
271 
272  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__insert(__obj, __get_stack());
273  }
__stack_t __get_stack()
Definition: profiler_node.h:50
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_destruct ( const void *  __obj)
inline
277  {
278  if (!__profcxx_init())
279  return;
280 
281  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__destruct(__obj);
282  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_init ( )
inline
253  { _GLIBCXX_PROFILE_DATA(_S_list_to_vector) = new __trace_list_to_vector(); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_insert ( const void *  __obj,
std::size_t  __shift,
std::size_t  __size 
)
inline
287  {
288  if (!__profcxx_init())
289  return;
290 
291  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__opr_insert(__obj, __shift,
292  __size);
293  }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_invalid_operator ( const void *  __obj)
inline
306  {
307  if (!__profcxx_init())
308  return;
309 
310  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__invalid_operator(__obj);
311  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_iterate ( const void *  __obj,
std::size_t  __num = 1 
)
inline
297  {
298  if (!__profcxx_init())
299  return;
300 
301  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__opr_iterate(__obj, __num);
302  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_report ( FILE *  __f,
__warning_vector_t &  __warnings 
)
inline
257  {
258  if (_GLIBCXX_PROFILE_DATA(_S_list_to_vector))
259  {
260  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->
261  __collect_warnings(__warnings);
262  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__write(__f);
263  }
264  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_list_to_vector_resize ( const void *  __obj,
std::size_t  __from,
std::size_t  __to 
)
inline
316  {
317  if (!__profcxx_init())
318  return;
319 
320  _GLIBCXX_PROFILE_DATA(_S_list_to_vector)->__resize(__obj, __from, __to);
321  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_construct ( const void *  __obj)
inline
205  {
206  if (!__profcxx_init())
207  return;
208 
209  _GLIBCXX_PROFILE_DATA(_S_map2umap)->
210  __add_object(__obj, __map2umap_info(__get_stack()));
211  }
__stack_t __get_stack()
Definition: profiler_node.h:50
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_destruct ( const void *  __obj)
inline
215  {
216  if (!__profcxx_init())
217  return;
218 
219  _GLIBCXX_PROFILE_DATA(_S_map2umap)->__retire_object(__obj);
220  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_erase ( const void *  __obj,
std::size_t  __size,
std::size_t  __count 
)
inline
239  {
240  if (!__profcxx_init())
241  return;
242 
243  __map2umap_info* __info
244  = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
245 
246  if (__info)
247  __info->__record_erase(__size, __count);
248  }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_find ( const void *  __obj,
std::size_t  __size 
)
inline
252  {
253  if (!__profcxx_init())
254  return;
255 
256  __map2umap_info* __info
257  = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
258 
259  if (__info)
260  __info->__record_find(__size);
261  }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_init ( )
inline
190  { _GLIBCXX_PROFILE_DATA(_S_map2umap) = new __trace_map2umap(); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_insert ( const void *  __obj,
std::size_t  __size,
std::size_t  __count 
)
inline
225  {
226  if (!__profcxx_init())
227  return;
228 
229  __map2umap_info* __info
230  = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
231 
232  if (__info)
233  __info->__record_insert(__size, __count);
234  }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_invalidate ( const void *  __obj)
inline
278  {
279  if (!__profcxx_init())
280  return;
281 
282  __map2umap_info* __info
283  = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
284 
285  if (__info)
286  __info->__record_invalidate();
287  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_iterate ( const void *  __obj,
std::size_t  __count 
)
inline
265  {
266  if (!__profcxx_init())
267  return;
268 
269  __map2umap_info* __info
270  = _GLIBCXX_PROFILE_DATA(_S_map2umap)->__get_object_info(__obj);
271 
272  if (__info)
273  __info->__record_iterate(__count);
274  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_map_to_unordered_map_report ( FILE *  __f,
__warning_vector_t &  __warnings 
)
inline
195  {
196  if (_GLIBCXX_PROFILE_DATA(_S_map2umap))
197  {
198  _GLIBCXX_PROFILE_DATA(_S_map2umap)->__collect_warnings(__warnings);
199  _GLIBCXX_PROFILE_DATA(_S_map2umap)->__write(__f);
200  }
201  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_size_construct ( const void *  __obj,
std::size_t  __num 
)
inline
67  {
68  if (!__profcxx_init())
69  return;
70 
71  _GLIBCXX_PROFILE_DATA(_S_vector_size)->__insert(__obj, __get_stack(),
72  __num);
73  }
__stack_t __get_stack()
Definition: profiler_node.h:50
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_size_destruct ( const void *  __obj,
std::size_t  __num,
std::size_t  __inum 
)
inline
78  {
79  if (!__profcxx_init())
80  return;
81 
82  _GLIBCXX_PROFILE_DATA(_S_vector_size)->__destruct(__obj, __num, __inum);
83  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_size_init ( )
inline
53  { _GLIBCXX_PROFILE_DATA(_S_vector_size) = new __trace_vector_size(); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_size_report ( FILE *  __f,
__warning_vector_t &  __warnings 
)
inline
57  {
58  if (_GLIBCXX_PROFILE_DATA(_S_vector_size))
59  {
60  _GLIBCXX_PROFILE_DATA(_S_vector_size)->__collect_warnings(__warnings);
61  _GLIBCXX_PROFILE_DATA(_S_vector_size)->__write(__f);
62  }
63  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_size_resize ( const void *  __obj,
std::size_t  __from,
std::size_t  __to 
)
inline
88  {
89  if (!__profcxx_init())
90  return;
91 
92  _GLIBCXX_PROFILE_DATA(_S_vector_size)->__resize(__obj, __from, __to);
93  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_construct ( const void *  __obj)
inline
282  {
283  if (!__profcxx_init())
284  return;
285 
286  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__insert(__obj, __get_stack());
287  }
__stack_t __get_stack()
Definition: profiler_node.h:50
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_destruct ( const void *  __obj)
inline
291  {
292  if (!__profcxx_init())
293  return;
294 
295  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__destruct(__obj);
296  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_find ( const void *  __obj,
std::size_t  __size 
)
inline
339  {
340  if (!__profcxx_init())
341  return;
342 
343  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_find(__obj, __size);
344  }
std::size_t __size(__stack_t __stack)
Definition: profiler_node.h:68
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_init ( )
inline
267  { _GLIBCXX_PROFILE_DATA(_S_vector_to_list) = new __trace_vector_to_list(); }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_insert ( const void *  __obj,
std::size_t  __pos,
std::size_t  __num 
)
inline
301  {
302  if (!__profcxx_init())
303  return;
304 
305  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_insert(__obj, __pos,
306  __num);
307  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_invalid_operator ( const void *  __obj)
inline
320  {
321  if (!__profcxx_init())
322  return;
323 
324  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__invalid_operator(__obj);
325  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_iterate ( const void *  __obj,
std::size_t  __num = 1 
)
inline
311  {
312  if (!__profcxx_init())
313  return;
314 
315  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__opr_iterate(__obj, __num);
316  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_report ( FILE *  __f,
__warning_vector_t &  __warnings 
)
inline
271  {
272  if (_GLIBCXX_PROFILE_DATA(_S_vector_to_list))
273  {
274  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->
275  __collect_warnings(__warnings);
276  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__write(__f);
277  }
278  }
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
void __gnu_profile::__trace_vector_to_list_resize ( const void *  __obj,
std::size_t  __from,
std::size_t  __to 
)
inline
330  {
331  if (!__profcxx_init())
332  return;
333 
334  _GLIBCXX_PROFILE_DATA(_S_vector_to_list)->__resize(__obj, __from, __to);
335  }
bool __profcxx_init()
This function must be called by each instrumentation point.
Definition: profiler_trace.h:649
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
bool __gnu_profile::__turn ( __state_type  __s)
inline
41  {
43  return __atomic_compare_exchange_n(&_GLIBCXX_PROFILE_DATA(__state),
44  &inv, __s, false, __ATOMIC_ACQ_REL,
45  __ATOMIC_RELAXED);
46  }
Definition: profiler_state.h:35
__state_type
Definition: profiler_state.h:35
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
bool __gnu_profile::__turn_off ( )
inline
54  { return __turn(__OFF); }
bool __turn(__state_type __s)
Definition: profiler_state.h:40
Definition: profiler_state.h:35
bool __gnu_profile::__turn_on ( )
inline
50  { return __turn(__ON); }
bool __turn(__state_type __s)
Definition: profiler_state.h:40
Definition: profiler_state.h:35
void __gnu_profile::__write ( FILE *  __f,
__stack_t  __stack 
)
inline
79  {
80  if (!__stack)
81  return;
82 
83  __stack_npt::const_iterator __it;
84  for (__it = __stack->begin(); __it != __stack->end(); ++__it)
85  std::fprintf(__f, "%p ", *__it);
86  }
void __gnu_profile::__write_cost_factors ( )
inline
540  {
541  FILE* __file = __open_output_file("conf.out");
542  __for_each(_GLIBCXX_PROFILE_DATA(__cost_factors)->begin(),
543  _GLIBCXX_PROFILE_DATA(__cost_factors)->end(),
544  __cost_factor_writer(__file));
545  std::fclose(__file);
546  }
_Function __for_each(_InputIterator __first, _InputIterator __last, _Function __f)
Definition: profiler_algos.h:84
FILE * __open_output_file(const char *__extension)
Definition: profiler_trace.h:386
#define _GLIBCXX_PROFILE_DATA(__name)
Definition: profiler.h:48
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __state_type  ,
__state  ,
__INVALID   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __trace_hash_func *  ,
_S_hash_func  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __trace_hashtable_size *  ,
_S_hashtable_size  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __trace_map2umap *  ,
_S_map2umap  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __trace_vector_size *  ,
_S_vector_size  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __trace_vector_to_list *  ,
_S_vector_to_list  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __trace_list_to_slist *  ,
_S_list_to_slist  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __trace_list_to_vector *  ,
_S_list_to_vector  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__vector_shift_cost_factor  ,
{"__vector_shift_cost_factor", 1.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__vector_iterate_cost_factor  ,
{"__vector_iterate_cost_factor", 1.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__vector_resize_cost_factor  ,
{"__vector_resize_cost_factor", 1.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__list_shift_cost_factor  ,
{"__list_shift_cost_factor", 0.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__list_iterate_cost_factor  ,
{"__list_iterate_cost_factor", 10.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__list_resize_cost_factor  ,
{"__list_resize_cost_factor", 0.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__map_insert_cost_factor  ,
{"__map_insert_cost_factor", 1.5}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__map_erase_cost_factor  ,
{"__map_erase_cost_factor", 1.5}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__map_find_cost_factor  ,
{"__map_find_cost_factor", 1}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__map_iterate_cost_factor  ,
{"__map_iterate_cost_factor", 2.3}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__umap_insert_cost_factor  ,
{"__umap_insert_cost_factor", 12.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__umap_erase_cost_factor  ,
{"__umap_erase_cost_factor", 12.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__umap_find_cost_factor  ,
{"__umap_find_cost_factor", 10.0}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor  ,
__umap_iterate_cost_factor  ,
{"__umap_iterate_cost_factor", 1.7}   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( __cost_factor_vector *  ,
__cost_factors  ,
 
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( const char *  ,
_S_trace_file_name  ,
_GLIBCXX_PROFILE_TRACE_PATH_ROOT   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( std::size_t  ,
_S_max_warn_count  ,
_GLIBCXX_PROFILE_MAX_WARN_COUNT   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( std::size_t  ,
_S_max_stack_depth  ,
_GLIBCXX_PROFILE_MAX_STACK_DEPTH   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_DATA ( std::size_t  ,
_S_max_mem  ,
_GLIBCXX_PROFILE_MEM_PER_DIAGNOSTIC   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_UNINIT_DATA ( __env_t  ,
__env   
)
__gnu_profile::_GLIBCXX_PROFILE_DEFINE_UNINIT_DATA ( __gnu_cxx::__mutex  ,
__global_lock   
)

Master lock.