diff --git a/README.md b/README.md index 2655879..5e9bfa9 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,8 @@ It can: * prune nodes and edges below a certain threshold; * use an heuristic to propagate time inside mutually recursive functions; * use color efficiently to draw attention to hot-spots; - * work on any platform where Python and Graphviz is available, i.e, virtually anywhere. + * work on any platform where Python and Graphviz is available, i.e, virtually anywhere; + * compare two graphs with identical structures for the analysis of performance metrics such as time or function calls. **If you want an interactive viewer for the graphs generated by _gprof2dot_, check [xdot.py](https://github.com/jrfonseca/xdot.py).** @@ -129,7 +130,24 @@ Options: variety to lower percentages. Values > 1.0 give less variety to lower percentages -p FILTER_PATHS, --path=FILTER_PATHS - Filter all modules not in a specified path + Filter all modules not in a specified path + --compare Compare two graphs with identical structure. With this + option two files should be provided.gprof2dot.py + [options] --compare [file1] [file2] ... + --compare-tolerance=TOLERANCE + Tolerance threshold for node difference + (default=0.001%).If the difference is below this value + the nodes are considered identical. + --compare-only-slower + Display comparison only for function which are slower + in second graph. + --compare-only-faster + Display comparison only for function which are faster + in second graph. + --compare-color-by-difference + Color nodes based on the value of the difference. + Nodes with the largest differences represent the hot + spots. ``` ## Examples @@ -244,6 +262,32 @@ Example usage: py-spy record -p -f raw -o out.collapse gprof2dot.py -f collapse out.collapse | dot -Tpng -o output.png +## Compare Example + +This image illustrates an example usage of the `--compare` and `--compare-color-by-difference` options. + +![Compare](./images/compare_diff.png) + +Arrow pointing to the right indicate node where the function performed faster +in the profile provided as the second one (second profile), while arrow +pointing to the left indicate node where the function was faster in the profile +provided as the first one (first profile). + +### Node + + +-----------------------------+ + | function name \ + | total time % -/+ total_diff \ + | ( self time % ) -/+ self_diff / + | total calls1 / total calls2 / + +-----------------------------+ + +Where +- `total time %` and `self time %` come from the first profile +- `diff` is calculated as the absolute value of `time in the first profile - time in the second profile`. + +> **Note** The compare option has been tested for pstats and callgrind profiles. + ## Output A node in the output graph represents a function and has the following layout: diff --git a/gprof2dot.py b/gprof2dot.py index 35c2d69..dfde3ab 100755 --- a/gprof2dot.py +++ b/gprof2dot.py @@ -57,6 +57,26 @@ def add(a, b): def fail(a, b): assert False +# To enhance readability, labels are rounded to the number of decimal +# places corresponding to the tolerance value. +def round_difference(difference, tolerance): + n = -math.floor(math.log10(tolerance)) + return round(difference, n) + + +def rescale_difference(x, min_val, max_val): + return (x - min_val) / (max_val - min_val) + + +def min_max_difference(profile1, profile2): + f1_events = [f1[TOTAL_TIME_RATIO] for _, f1 in sorted_iteritems(profile1.functions)] + f2_events = [f2[TOTAL_TIME_RATIO] for _, f2 in sorted_iteritems(profile2.functions)] + if len(f1_events) != len(f2_events): + raise Exception('Number of nodes in provided profiles are not equal') + differences = [abs(f1_events[i] - f2_events[i]) * 100 for i in range(len(f1_events))] + + return min(differences), max(differences) + tol = 2 ** -23 @@ -3252,6 +3272,122 @@ def wrap_function_name(self, name): show_function_events = [TOTAL_TIME_RATIO, TIME_RATIO] show_edge_events = [TOTAL_TIME_RATIO, CALLS] + def graphs_compare(self, profile1, profile2, theme, options): + self.begin_graph() + + fontname = theme.graph_fontname() + fontcolor = theme.graph_fontcolor() + nodestyle = theme.node_style() + + tolerance, only_slower, only_faster, color_by_difference = ( + options.tolerance, options.only_slower, options.only_faster, options.color_by_difference) + self.attr('graph', fontname=fontname, ranksep=0.25, nodesep=0.125) + self.attr('node', fontname=fontname, style=nodestyle, fontcolor=fontcolor, width=0, height=0) + self.attr('edge', fontname=fontname) + + functions2 = {function.name: function + for _, function in sorted_iteritems(profile2.functions)} + if color_by_difference: + min_diff, max_diff = min_max_difference(profile1, profile2) + for _, function1 in sorted_iteritems(profile1.functions): + labels = [] + + name = function1.name + try: + function2 = functions2[name] + except KeyError: + raise Exception(f'Provided profiles does not have identical ' + f'structure, function that differ {name}') + if self.wrap: + name = self.wrap_function_name(name) + labels.append(name) + weight_difference = 0 + shape = 'box' + orientation = '0' + for event in self.show_function_events: + if event in function1.events: + event1 = function1[event] + event2 = function2[event] + + difference = abs(event1 - event2) * 100 + + if event == TOTAL_TIME_RATIO: + weight_difference = difference + if difference >= tolerance: + if event2 > event1 and not only_faster: + shape = 'cds' + label = (f'{event.format(event1)} +' + f' {round_difference(difference, tolerance)}%') + elif event2 < event1 and not only_slower: + orientation = "90" + shape = 'cds' + label = (f'{event.format(event1)} - ' + f'{round_difference(difference, tolerance)}%') + else: + # protection to not color by difference if we choose to show only_faster/only_slower + weight_difference = 0 + label = event.format(function1[event]) + else: + weight_difference = 0 + label = event.format(function1[event]) + else: + if difference >= tolerance: + if event2 > event1: + label = (f'{event.format(event1)} +' + f' {round_difference(difference, tolerance)}%') + elif event2 < event1: + label = (f'{event.format(event1)} - ' + f'{round_difference(difference, tolerance)}%') + else: + label = event.format(function1[event]) + + labels.append(label) + + if function1.called is not None: + labels.append(f"{function1.called} {MULTIPLICATION_SIGN}/ {function2.called} {MULTIPLICATION_SIGN}") + + if color_by_difference and weight_difference: + # min and max is calculated whe color_by_difference is true + weight = rescale_difference(weight_difference, min_diff, max_diff) + + elif function1.weight is not None and not color_by_difference: + weight = function1.weight + else: + weight = 0.0 + + label = '\n'.join(labels) + + self.node(function1.id, + label=label, + orientation=orientation, + color=self.color(theme.node_bgcolor(weight)), + shape=shape, + fontcolor=self.color(theme.node_fgcolor(weight)), + fontsize="%f" % theme.node_fontsize(weight), + tooltip=function1.filename, + ) + + calls2 = {call.callee_id: call for _, call in sorted_iteritems(function2.calls)} + for _, call1 in sorted_iteritems(function1.calls): + call2 = calls2[call1.callee_id] + labels = [] + for event in self.show_edge_events: + if event in call1.events: + label = f'{event.format(call1[event])} / {event.format(call2[event])}' + labels.append(label) + weight = 0 if color_by_difference else call1.weight + label = '\n'.join(labels) + self.edge(function1.id, call1.callee_id, + label=label, + color=self.color(theme.edge_color(weight)), + fontcolor=self.color(theme.edge_color(weight)), + fontsize="%.2f" % theme.edge_fontsize(weight), + penwidth="%.2f" % theme.edge_penwidth(weight), + labeldistance="%.2f" % theme.edge_penwidth(weight), + arrowsize="%.2f" % theme.edge_arrowsize(weight), + ) + self.end_graph() + def graph(self, profile, theme): self.begin_graph() @@ -3543,9 +3679,36 @@ def main(argv=sys.argv[1:]): '-p', '--path', action="append", type="string", dest="filter_paths", help="Filter all modules not in a specified path") + optparser.add_option( + '--compare', + action="store_true", + dest="compare", default=False, + help="Compare two graphs with identical structure. With this option two files should be provided." + "gprof2dot.py [options] --compare [file1] [file2] ...") + optparser.add_option( + '--compare-tolerance', + type="float", dest="tolerance", default=0.001, + help="Tolerance threshold for node difference (default=0.001%)." + "If the difference is below this value the nodes are considered identical.") + optparser.add_option( + '--compare-only-slower', + action="store_true", + dest="only_slower", default=False, + help="Display comparison only for function which are slower in second graph.") + optparser.add_option( + '--compare-only-faster', + action="store_true", + dest="only_faster", default=False, + help="Display comparison only for function which are faster in second graph.") + optparser.add_option( + '--compare-color-by-difference', + action="store_true", + dest="color_by_difference", default=False, + help="Color nodes based on the value of the difference. " + "Nodes with the largest differences represent the hot spots.") (options, args) = optparser.parse_args(argv) - if len(args) > 1 and options.format != 'pstats': + if len(args) > 1 and options.format != 'pstats' and not options.compare: optparser.error('incorrect number of arguments') try: @@ -3567,6 +3730,11 @@ def main(argv=sys.argv[1:]): if Format.stdinInput: if not args: fp = sys.stdin + elif options.compare: + fp1 = open(args[0], 'rt', encoding='UTF-8') + fp2 = open(args[1], 'rt', encoding='UTF-8') + parser1 = Format(fp1) + parser2 = Format(fp2) else: fp = open(args[0], 'rb') bom = fp.read(2) @@ -3577,17 +3745,25 @@ def main(argv=sys.argv[1:]): encoding = 'utf-8' fp.seek(0) fp = io.TextIOWrapper(fp, encoding=encoding) - parser = Format(fp) + parser = Format(fp) elif Format.multipleInput: if not args: optparser.error('at least a file must be specified for %s input' % options.format) - parser = Format(*args) + if options.compare: + parser1 = Format(args[-2]) + parser2 = Format(args[-1]) + else: + parser = Format(*args) else: if len(args) != 1: optparser.error('exactly one file must be specified for %s input' % options.format) parser = Format(args[0]) - profile = parser.parse() + if options.compare: + profile1 = parser1.parse() + profile2 = parser2.parse() + else: + profile = parser.parse() if options.output is None: output = open(sys.stdout.fileno(), mode='wt', encoding='UTF-8', closefd=False) @@ -3603,7 +3779,14 @@ def main(argv=sys.argv[1:]): if options.show_samples: dot.show_function_events.append(SAMPLES) - profile.prune(options.node_thres/100.0, options.edge_thres/100.0, options.filter_paths, options.color_nodes_by_selftime) + if options.compare: + profile1.prune(options.node_thres/100.0, options.edge_thres/100.0, options.filter_paths, + options.color_nodes_by_selftime) + profile2.prune(options.node_thres/100.0, options.edge_thres/100.0, options.filter_paths, + options.color_nodes_by_selftime) + else: + profile.prune(options.node_thres/100.0, options.edge_thres/100.0, options.filter_paths, + options.color_nodes_by_selftime) if options.list_functions: profile.printFunctionIds(selector=options.list_functions) @@ -3622,7 +3805,10 @@ def main(argv=sys.argv[1:]): sys.exit(1) profile.prune_leaf(leafIds, options.depth) - dot.graph(profile, theme) + if options.compare: + dot.graphs_compare(profile1, profile2, theme, options) + else: + dot.graph(profile, theme) if __name__ == '__main__': diff --git a/images/compare_diff.png b/images/compare_diff.png new file mode 100644 index 0000000..bee9b88 Binary files /dev/null and b/images/compare_diff.png differ diff --git a/tests/compare/callgrind/test/test1.callgrind b/tests/compare/callgrind/test/test1.callgrind new file mode 100644 index 0000000..f2348f6 --- /dev/null +++ b/tests/compare/callgrind/test/test1.callgrind @@ -0,0 +1,2570 @@ +# callgrind format +version: 1 +creator: callgrind-3.19.0 +pid: 527763 +cmd: /usr/bin/date +part: 1 + + +desc: I1 cache: +desc: D1 cache: +desc: LL cache: + +desc: Timerange: Basic block 0 - 156688 +desc: Trigger: Program termination + +positions: line +events: Ir +summary: 610235 + + +ob=(5) /usr/bin/date +fl=(5) ??? +fn=(862) 0x00000000004022f0 +0 5 +cfn=(866) 0x0000000000402280 +calls=1 0 +0 8 +0 3 + +fn=(814) 0x0000000000409180 +0 10 +cob=(3) /usr/lib64/libc-2.17.so +cfi=(3) ??? +cfn=(808) __freading +calls=2 0 +0 16 +0 2 +0 10 +cob=(3) +cfi=(3) +cfn=(826) fflush +calls=2 0 +0 249 +cob=(1) /usr/lib64/ld-2.17.so +cfi=(1) ??? +cfn=(224) _dl_runtime_resolve +calls=1 0 +0 768 +0 6 + +fn=(358) 0x0000000000409770 +0 6 +cob=(3) +cfi=(3) +cfn=(230) __cxa_atexit +calls=1 0 +0 66 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 867 +0 5 + +fn=(542) 0x00000000004047f0 +0 107 +cob=(3) +cfi=(3) +cfn=(632) fputc +calls=7 0 +0 273 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 778 +0 11 +0 359 +cob=(3) +cfi=(3) +cfn=(580) strftime +calls=2 0 +0 427 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 807 +0 6 +0 60 +cob=(3) +cfi=(3) +cfn=(604) fwrite +calls=2 0 +0 567 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 776 +0 6 +0 447 +cob=(3) +cfi=(3) +cfn=(632) +calls=1 0 +0 39 +0 1 +0 137 +cob=(3) +cfi=(3) +cfn=(730) __strlen_sse2_pminub +calls=1 0 +0 14 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 778 +0 5 +0 62 +cob=(3) +cfi=(3) +cfn=(604) +calls=5 0 +0 705 +0 5 +0 42 +cob=(3) +cfi=(3) +cfn=(604) +calls=1 0 +0 145 +0 1 +0 8 + +fn=(782) 0x0000000000402c50 +0 6 +cfn=(784) 0x0000000000409230 +calls=1 0 +0 4625 +0 5 +cfn=(784) +calls=1 0 +0 450 +0 6 + +fn=(244) 0x0000000000402310 +0 15 + +fn=(234) 0x00000000004096f0 +0 16 +cob=(2) ??? +cfi=(2) ??? +cfn=(236) 0x0000000000401620 +calls=1 0 +0 6 +0 7 +cfn=(244) +calls=1 0 +0 15 +0 11 + +fn=(410) 0x0000000000404810 +0 9 +cob=(3) +cfi=(3) +cfn=(416) clock_gettime +calls=1 0 +0 13 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 866 +0 5 +0 8 + +fn=(784) +0 10 +cob=(3) +cfi=(3) +cfn=(790) __fpending +calls=2 0 +0 12 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 829 +0 6 +0 8 +cfn=(794) 0x0000000000409100 +calls=2 0 +0 4186 +0 24 + +fn=(216) 0x000000000040224a +0 11 +cob=(3) +cfi=(3) +cfn=(228) (below main) +calls=1 0 +0 103221 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 934 +0 5 + +fn=(262) 0x0000000000401ac0 +0 17 +cfn=(264) 0x0000000000407160 +calls=1 0 +0 874 +0 3 +cob=(3) +cfi=(3) +cfn=(292) setlocale +calls=1 0 +0 8873 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 822 +0 5 +0 3 +cob=(3) +cfi=(3) +cfn=(320) bindtextdomain +calls=1 0 +0 59503 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 904 +0 5 +0 2 +cob=(3) +cfi=(3) +cfn=(352) textdomain +calls=1 0 +0 373 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 828 +0 5 +0 2 +cfn=(358) +calls=1 0 +0 944 +0 9 +cob=(3) +cfi=(3) +cfn=(372) getopt_long +calls=1 0 +0 1791 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 852 +0 5 +0 30 +cob=(3) +cfi=(3) +cfn=(778) exit +calls=1 0 +0 5860 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 747 +0 5 +0 13 +cfn=(430) 0x0000000000402340 +calls=1 0 +0 18755 +0 5 +cfn=(410) +calls=1 0 +0 901 +0 5 +cob=(3) +cfi=(3) +cfn=(394) nl_langinfo +calls=1 0 +0 20 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 844 +0 5 +0 5 + +fn=(264) +0 6 +cob=(3) +cfi=(3) +cfn=(274) __strrchr_sse42 +calls=1 0 +0 37 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 808 +0 5 +0 18 + +fn=(430) +0 12 +cob=(3) +cfi=(3) +cfn=(436) localtime +calls=1 0 +0 11319 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 822 +0 5 +0 12 +cfn=(542) +calls=1 0 +0 6566 +0 19 + +fn=(866) +0 8 + +fn=(794) +0 10 +cob=(3) +cfi=(3) +cfn=(464) fileno +calls=2 0 +0 12 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 777 +0 6 +0 8 +cob=(3) +cfi=(3) +cfn=(808) +calls=2 0 +0 16 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 829 +0 6 +0 8 +cfn=(814) +calls=2 0 +0 1061 +0 14 +cob=(3) +cfi=(3) +cfn=(512) fclose@@GLIBC_2.2.5 +calls=2 0 +0 640 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 793 +0 6 + +ob=(3) +fl=(3) +fn=(156) time +0 9 +cfn=(158) _dl_vdso_vsym +calls=1 0 +0 7 +0 6 + +fn=(204) init_cacheinfo +0 39 +cfn=(206) handle_intel.isra.0 +calls=1 0 +0 844 +0 3 +cfn=(206) +calls=1 0 +0 885 +0 108 + +fn=(470) _IO_sgetn +0 70 +cfn=(472) _IO_file_xsgetn +calls=5 0 +0 1074 + +fn=(522) munmap +0 10 + +fn=(534) __offtime +0 290 + +fn=(642) __GI_mempcpy +0 134 + +fn=(196) __init_misc +0 12 +cfn=(198) __GI_strrchr +calls=1 0 +0 52 +0 12 + +fn=(230) +0 16 +cfn=(232) __new_exitfn +calls=2 0 +0 83 +0 28 + +fn=(296) getenv +0 135 +cfn=(298) __GI_strlen +calls=15 0 +0 224 +0 8073 +cfn=(300) __GI_strncmp +calls=16 0 +0 493 +0 84 + +fn=(328) ptmalloc_init.part.7 +0 1529 +cfn=(330) _dl_addr +calls=1 0 +0 56529 +0 22 + +fn=(340) sbrk +0 28 +cfn=(342) brk +calls=1 0 +0 13 +0 16 +cfn=(342) +calls=2 0 +0 26 +0 8 + +fn=(354) strdup +0 10 +cfn=(298) +calls=2 0 +0 28 +0 6 +cfn=(324) malloc +calls=2 0 +0 380 +0 2 +0 18 +cfn=(344) __GI_memcpy +calls=2 0 +0 46 + +fn=(372) +0 4 +cfn=(374) _getopt_internal +calls=1 0 +0 1785 +0 2 + +fn=(452) _IO_new_file_init_internal +0 8 +cfn=(454) _IO_link_in +calls=1 0 +0 82 +0 5 + +fn=(454) +0 93 + +fn=(478) _IO_file_stat +0 8 +cfn=(466) _fxstat +calls=2 0 +0 20 + +fn=(480) mmap +0 66 + +fn=(488) _IO_switch_to_get_mode +0 48 + +fn=(512) +0 127 +cfn=(524) _IO_file_finish@@GLIBC_2.2.5 +calls=3 0 +0 108 +0 28 +cfn=(312) free +calls=1 0 +0 114 +0 1 +0 24 +cfn=(514) _IO_un_link +calls=3 0 +0 223 +0 15 +cfn=(516) _IO_file_close_it@@GLIBC_2.2.5 +calls=3 0 +0 366 +0 21 + +fn=(730) +0 14 + +fn=(790) +0 12 + +fn=(882) __cxa_finalize +0 46 +cfn=(884) __unregister_atfork +calls=1 0 +0 7 + +fn=(896) _IO_cleanup +0 9 +cfn=(898) _IO_flush_all_lockp +calls=1 0 +0 54 +0 28 + +fn=(194) _init +0 27 +cfn=(158) +calls=1 0 +0 7 +0 8 +cfn=(158) +calls=1 0 +0 7 +0 10 +cfn=(196) +calls=1 0 +0 76 +0 1 +cfn=(200) __ctype_init +calls=1 0 +0 16 +0 14 + +fn=(306) new_composite_name +0 18 +cfn=(294) __GI_strcmp +calls=1 0 +0 33 +0 130 +cfn=(298) +calls=12 0 +0 228 +0 193 + +fn=(320) +0 40 +cfn=(298) +calls=1 0 +0 14 +0 3 +cfn=(324) +calls=1 0 +0 59329 +0 1 +0 7 +cfn=(344) +calls=1 0 +0 23 +0 3 +cfn=(294) +calls=1 0 +0 73 +0 10 + +fn=(326) malloc_hook_ini +0 8 +cfn=(328) +calls=1 0 +0 58080 +0 3 +cfn=(325) malloc'2 +calls=1 0 +0 1225 + +fn=(336) sysmalloc +0 73 +cfn=(338) __default_morecore +calls=1 0 +0 62 +0 41 +cfn=(338) +calls=1 0 +0 45 +0 26 + +fn=(274) +0 37 + +fn=(374) +0 13 +cfn=(376) _getopt_internal_r +calls=1 0 +0 1761 +0 11 + +fn=(376) +0 28 +cfn=(296) +calls=1 0 +0 1672 +0 61 + +fn=(450) _IO_old_init +0 25 + +fn=(460) __GI_strstr +0 48 + +fn=(474) _IO_doallocbuf +0 46 +cfn=(476) _IO_file_doallocate +calls=2 0 +0 238 +0 4 + +fn=(504) _IO_file_seek +0 2 +cfn=(506) lseek +calls=1 0 +0 7 + +fn=(506) +0 2 +cfn=(508) __lseek_nocancel +calls=1 0 +0 5 + +fn=(728) strlen +0 7 + +fn=(834) __write_nocancel +0 5 + +fn=(256) _setjmp +0 2 +cfn=(258) __sigsetjmp +calls=1 0 +0 28 + +fn=(208) intel_check_word +0 188 +cfn=(210) bsearch +calls=8 0 +0 1228 +0 219 + +fn=(442) __tzfile_read +0 37 +cfn=(444) fopen@@GLIBC_2.2.5 +calls=1 0 +0 538 +0 5 +cfn=(464) +calls=1 0 +0 6 +0 4 +cfn=(466) +calls=1 0 +0 10 +0 6 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 75 +cfn=(496) fseek +calls=1 0 +0 138 +0 8 +cfn=(468) fread_unlocked +calls=1 0 +0 279 +0 5 +cfn=(468) +calls=1 0 +0 426 +0 12 +cfn=(494) __GI_memcmp +calls=2 0 +0 44 +0 50 +cfn=(324) +calls=1 0 +0 178 +0 1 +0 30 +cfn=(468) +calls=1 0 +0 331 +0 2682 +cfn=(468) +calls=1 0 +0 109 +0 8 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 341 +cfn=(512) +calls=1 0 +0 387 +0 10 +cfn=(530) __tzstring +calls=1 0 +0 347 +0 70 +cfn=(530) +calls=10 0 +0 2411 +0 55 +cfn=(530) +calls=2 0 +0 248 +0 217 +cfn=(468) +calls=1 0 +0 109 +0 16 +cfn=(510) ftello +calls=1 0 +0 77 +0 49 + +fn=(448) _IO_no_init +0 10 +cfn=(450) +calls=1 0 +0 25 +0 23 + +fn=(484) __underflow +0 65 +cfn=(486) _IO_file_underflow@@GLIBC_2.2.5 +calls=2 0 +0 192 +0 8 + +fn=(498) _IO_seekoff_unlocked +0 47 +cfn=(500) _IO_file_seekoff@@GLIBC_2.2.5 +calls=2 0 +0 121 +0 3 + +fn=(500) +0 34 +cfn=(502) _IO_unsave_markers +calls=1 0 +0 9 +0 9 +cfn=(504) +calls=1 0 +0 9 +0 60 + +fn=(528) _int_free +0 98 + +fn=(584) __strftime_internal +0 240 +cfn=(298) +calls=1 0 +0 14 +0 47 +cfn=(298) +calls=1 0 +0 14 +0 30 +cfn=(344) +calls=2 0 +0 46 +0 16 + +fn=(604) +0 439 +cfn=(606) _IO_file_xsputn@@GLIBC_2.2.5 +calls=8 0 +0 826 +0 152 + +fn=(608) _IO_file_overflow@@GLIBC_2.2.5 +0 40 +cfn=(610) _IO_do_write@@GLIBC_2.2.5 +calls=1 0 +0 15 +0 2 +cfn=(474) +calls=1 0 +0 144 +0 6 + +fn=(830) _IO_file_write@@GLIBC_2.2.5 +0 22 +cfn=(832) write +calls=1 0 +0 7 +0 14 + +fn=(898) +0 54 + +fn=(158) +0 28 + +fn=(166) gettimeofday +0 9 +cfn=(158) +calls=1 0 +0 7 +0 6 + +fn=(200) +0 16 + +fn=(260) __sigjmp_save +0 9 + +fn=(300) +0 493 + +fn=(334) malloc_consolidate +0 793 + +fn=(160) strnlen +0 5 + +fn=(162) strncasecmp +0 12 + +fn=(438) __tz_convert +0 21 +cfn=(440) tzset_internal +calls=1 0 +0 10587 +0 16 +cfn=(534) +calls=1 0 +0 290 +0 16 +cfn=(532) __tzfile_compute +calls=1 0 +0 381 +0 5 + +fn=(464) +0 18 + +fn=(490) _IO_file_read +0 10 +cfn=(492) __read_nocancel +calls=2 0 +0 10 +0 6 + +fn=(492) +0 10 + +fn=(496) +0 12 +cfn=(498) +calls=1 0 +0 115 +0 11 + +fn=(530) +0 105 +cfn=(298) +calls=15 0 +0 210 +0 459 +cfn=(494) +calls=36 0 +0 794 +0 204 +cfn=(324) +calls=6 0 +0 1158 +0 6 +0 60 +cfn=(344) +calls=6 0 +0 128 +0 130 + +fn=(532) +0 47 +cfn=(530) +calls=1 0 +0 169 +0 16 +cfn=(530) +calls=1 0 +0 79 +0 70 + +fn=(582) strftime_l +0 10 +cfn=(584) +calls=2 0 +0 407 +0 4 + +fn=(778) +0 6 +cfn=(780) __run_exit_handlers +calls=1 0 +0 5854 + +fn=(884) +0 7 + +fn=(304) _nl_find_locale +0 228 +cfn=(294) +calls=12 0 +0 576 +0 144 +cfn=(296) +calls=12 0 +0 4812 +0 168 + +fn=(332) _int_malloc +0 1553 +cfn=(334) +calls=1 0 +0 793 +0 7 +cfn=(336) +calls=1 0 +0 247 +0 79 + +fn=(154) strcasecmp +0 12 + +fn=(446) __fopen_internal +0 10 +cfn=(324) +calls=1 0 +0 178 +0 1 +0 11 +cfn=(448) +calls=1 0 +0 58 +0 4 +cfn=(452) +calls=1 0 +0 95 +0 5 +cfn=(456) _IO_file_fopen@@GLIBC_2.2.5 +calls=1 0 +0 161 +0 9 +cfn=(462) __fopen_maybe_mmap +calls=1 0 +0 4 + +fn=(472) +0 231 +cfn=(344) +calls=5 0 +0 410 +0 14 +cfn=(484) +calls=2 0 +0 265 +0 9 +cfn=(474) +calls=1 0 +0 144 +0 1 + +fn=(502) +0 36 + +fn=(526) _IO_default_finish +0 42 +cfn=(514) +calls=3 0 +0 30 + +fn=(612) _IO_default_xsputn +0 73 + +fn=(632) +0 312 + +fn=(900) _Exit +0 5 + +fn=(212) intel_02_known_compare +0 324 + +fn=(324) +0 188 +cfn=(332) +calls=10 0 +0 1494 +0 225 +cfn=(326) +calls=1 0 +0 59316 + +fn=(325) +0 18 +cfn=(332) +calls=1 0 +0 1185 +0 22 + +fn=(338) +0 4 +cfn=(340) +calls=2 0 +0 91 +0 12 + +fn=(168) memcpy@GLIBC_2.2.5 +0 15 + +fn=(202) check_stdfiles_vtables +0 11 + +fn=(228) +0 25 +cfn=(230) +calls=1 0 +0 61 +0 13 +cob=(5) +cfi=(5) +cfn=(234) +calls=1 0 +0 55 +0 8 +cfn=(256) +calls=1 0 +0 30 +0 14 +cob=(5) +cfi=(5) +cfn=(262) +calls=1 0 +0 103015 + +fn=(258) +0 19 +cfn=(260) +calls=1 0 +0 9 + +fn=(394) +0 3 +cfn=(396) nl_langinfo_l +calls=1 0 +0 17 + +fn=(440) +0 10 +cfn=(296) +calls=1 0 +0 952 +0 12 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 2 +cfn=(354) +calls=1 0 +0 245 +0 5 +cfn=(442) +calls=1 0 +0 9335 +0 18 + +fn=(456) +0 70 +cfn=(454) +calls=1 0 +0 11 +0 3 +cfn=(460) +calls=1 0 +0 48 +0 22 +cfn=(458) __open_nocancel +calls=1 0 +0 5 +0 2 + +fn=(458) +0 5 + +fn=(482) _IO_setb +0 123 +cfn=(522) +calls=2 0 +0 10 +0 8 + +fn=(486) +0 46 +cfn=(488) +calls=2 0 +0 48 +0 32 +cfn=(490) +calls=2 0 +0 26 +0 40 + +fn=(508) +0 5 + +fn=(510) +0 10 +cfn=(498) +calls=1 0 +0 56 +0 11 + +fn=(524) +0 36 +cfn=(526) +calls=3 0 +0 72 + +fn=(580) +0 6 +cfn=(582) +calls=2 0 +0 421 + +fn=(606) +0 238 +cfn=(642) +calls=7 0 +0 134 +0 70 +cfn=(608) +calls=1 0 +0 207 +0 19 +cfn=(612) +calls=1 0 +0 73 +0 85 + +fn=(610) +0 56 +cfn=(830) +calls=1 0 +0 43 +0 32 + +fn=(780) +0 55 +cfn=(896) +calls=1 0 +0 91 +0 5 +cfn=(900) +calls=1 0 +0 5 +0 12 +cob=(1) +cfi=(1) +cfn=(858) _dl_fini +calls=1 0 +0 592 +cob=(5) +cfi=(5) +cfn=(782) +calls=1 0 +0 5092 +0 2 + +fn=(210) +0 592 +cfn=(212) +calls=54 0 +0 324 +0 312 + +fn=(292) +0 23 +cfn=(294) +calls=1 0 +0 48 +0 15 +cfn=(296) +calls=1 0 +0 1573 +0 97 +cfn=(302) __GI_strchr +calls=1 0 +0 25 +0 158 +cfn=(304) +calls=12 0 +0 5928 +0 115 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 2 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 5 +cfn=(306) +calls=1 0 +0 602 +0 143 +cfn=(308) _nl_postload_ctype +calls=1 0 +0 45 +0 78 + +fn=(294) +0 814 + +fn=(298) +0 732 + +fn=(302) +0 25 + +fn=(308) +0 45 + +fn=(312) +0 46 +cfn=(528) +calls=1 0 +0 98 +0 5 + +fn=(198) +0 52 + +fn=(232) +0 83 + +fn=(444) +0 2 +cfn=(446) +calls=1 0 +0 536 + +fn=(462) +0 4 + +fn=(468) +0 90 +cfn=(470) +calls=5 0 +0 1144 +0 20 + +fn=(476) +0 38 +cfn=(478) +calls=2 0 +0 28 +0 32 +cfn=(480) +calls=2 0 +0 66 +0 14 +cfn=(482) +calls=2 0 +0 42 +0 18 + +fn=(516) +0 45 +cfn=(502) +calls=3 0 +0 27 +0 30 +cfn=(482) +calls=3 0 +0 99 +0 24 +cfn=(514) +calls=3 0 +0 30 +0 60 +cfn=(518) _IO_file_close +calls=3 0 +0 21 +0 13 +cfn=(610) +calls=1 0 +0 15 +0 2 + +fn=(826) +0 64 +cfn=(828) _IO_file_sync@@GLIBC_2.2.5 +calls=2 0 +0 145 +0 40 + +fn=(832) +0 2 +cfn=(834) +calls=1 0 +0 5 + +fn=(272) rindex +0 6 + +fn=(330) +0 14 +cob=(1) +cfi=(1) +cfn=(42) rtld_lock_default_lock_recursive +calls=1 0 +0 2 +0 56492 +cob=(1) +cfi=(1) +cfn=(44) rtld_lock_default_unlock_recursive +calls=1 0 +0 2 +0 19 + +fn=(344) +0 653 + +fn=(164) memset +0 8 + +fn=(206) +0 40 +cfn=(208) +calls=2 0 +0 1446 +0 14 +cfn=(208) +calls=2 0 +0 189 +0 40 + +fn=(396) +0 17 + +fn=(416) +0 6 +cfn=(418) __syscall_clock_gettime +calls=1 0 +0 3 +0 4 + +fn=(418) +0 3 + +fn=(436) +0 3 +cfn=(438) +calls=1 0 +0 11316 + +fn=(466) +0 30 + +fn=(494) +0 838 + +fn=(514) +0 283 + +fn=(518) +0 6 +cfn=(520) __close_nocancel +calls=3 0 +0 15 + +fn=(520) +0 15 + +fn=(808) +0 32 + +fn=(828) +0 41 +cfn=(610) +calls=1 0 +0 101 +0 3 + +fn=(342) +0 39 + +fn=(352) +0 30 +cfn=(294) +calls=1 0 +0 42 +0 5 +cfn=(294) +calls=1 0 +0 42 +0 4 +cfn=(354) +calls=1 0 +0 245 +0 5 + +ob=(4) /cvmfs/atlas-nightlies.cern.ch/repo/sw/23.0_Athena_x86_64-centos7-gcc11-opt/sw/lcg/releases/valgrind/3.19.0-54639/x86_64-centos7-gcc11-opt/libexec/valgrind/vgpreload_core-amd64-linux.so +fl=(4) ??? +fn=(188) 0x0000000000001100 +0 12 + +fn=(874) 0x00000000000010c0 +0 9 +cob=(2) +cfi=(2) +cfn=(880) 0x000000000402a030 +calls=1 0 +0 54 +0 1 +cfn=(888) 0x0000000000001050 +calls=1 0 +0 5 +0 3 + +fn=(888) +0 5 + +ob=(2) +fl=(2) +fn=(236) +0 6 + +fn=(880) +0 1 +cob=(3) +cfi=(3) +cfn=(882) +calls=1 0 +0 53 + +fn=(894) 0x000000000402a270 +0 3 + +fn=(184) 0x000000000402a000 +0 6 + +fn=(872) 0x000000000040978c +0 3 + +ob=(1) +fl=(1) +fn=(8) brk +0 12 + +fn=(88) _dl_map_object +0 143 +cfn=(90) _dl_name_match_p +calls=7 0 +0 492 +0 63 +cfn=(64) index +calls=2 0 +0 112 +0 9 +cfn=(62) expand_dynamic_string_token +calls=1 0 +0 890 +0 12 +cfn=(92) open_verify +calls=1 0 +0 480 +0 41 +cfn=(98) _dl_map_object_from_fd +calls=2 0 +0 5696 +0 4 +cfn=(12) strlen +calls=1 0 +0 63 +0 24 +cfn=(114) open_path +calls=1 0 +0 49511 +0 28 +cfn=(118) _dl_load_cache_lookup +calls=1 0 +0 1555 +0 19 +cfn=(92) +calls=1 0 +0 632 +0 65 +cfn=(46) strcmp +calls=2 0 +0 21 +0 4 + +fn=(106) access +0 9 + +fn=(130) _dl_receive_error +0 11 +cfn=(82) _dl_initial_error_catch_tsd +calls=1 0 +0 2 +0 7 +cfn=(132) version_check_doit +calls=1 0 +0 3578 +0 10 + +fn=(152) check_match.9525 +0 2579 +cfn=(46) +calls=41 0 +0 3274 +0 3068 +cfn=(46) +calls=113 0 +0 9781 +0 452 + +fn=(182) _dl_init +0 87 +cob=(3) +cfi=(3) +cfn=(194) +calls=1 0 +0 166 +0 18 +cob=(3) +cfi=(3) +cfn=(202) +calls=1 0 +0 11 +0 4 +cob=(3) +cfi=(3) +cfn=(204) +calls=1 0 +0 1879 +0 53 +cob=(2) +cfi=(2) +cfn=(184) +calls=1 0 +0 6 +0 19 +cob=(4) +cfi=(4) +cfn=(188) +calls=1 0 +0 12 +0 10 + +fn=(32) malloc +0 447 +cfn=(36) __libc_memalign +calls=149 0 +0 4859 +0 149 + +fn=(60) strsep +0 155471 + +fn=(72) _dl_debug_initialize +0 41 + +fn=(80) _dl_catch_error +0 27 +cfn=(82) +calls=3 0 +0 6 +0 18 +cfn=(84) __sigsetjmp +calls=3 0 +0 60 +0 24 +cfn=(112) openaux +calls=2 0 +0 56003 +cfn=(86) map_doit +calls=1 0 +0 3907 +0 39 + +fn=(6) _dl_sysdep_start +0 988 +cfn=(8) +calls=1 0 +0 12 +0 6 +cfn=(10) init_cpu_features.constprop.0 +calls=1 0 +0 122 +0 4 +cfn=(12) +calls=1 0 +0 35 +0 3 +cfn=(14) sbrk +calls=1 0 +0 17 +0 12 +cfn=(16) dl_main +calls=1 0 +0 501845 +0 27 + +fn=(10) +0 122 + +fn=(58) fillin_rpath +0 20 +cfn=(60) +calls=1 0 +0 2371 +0 195 +cfn=(60) +calls=65 0 +0 153100 +0 12169 +cfn=(22) bcmp +calls=84 0 +0 13168 +0 298 +cfn=(70) free +calls=65 0 +0 390 +0 65 +0 780 +cfn=(32) +calls=65 0 +0 2306 +0 65 +0 715 +cfn=(56) mempcpy +calls=65 0 +0 5769 +0 2932 +cfn=(62) +calls=65 0 +0 49649 +0 325 +cfn=(12) +calls=65 0 +0 12307 +0 1180 + +fn=(858) +0 23 +cfn=(42) +calls=1 0 +0 2 +0 89 +cfn=(860) _dl_sort_fini +calls=1 0 +0 231 +0 2 +cfn=(44) +calls=1 0 +0 2 +0 68 +cob=(4) +cfi=(4) +cfn=(874) +calls=1 0 +0 72 +cob=(5) +cfi=(5) +cfn=(862) +calls=1 0 +0 16 +0 18 +cob=(2) +cfi=(2) +cfn=(894) +calls=1 0 +0 3 +cob=(2) +cfi=(2) +cfn=(872) +calls=1 0 +0 3 +0 63 + +fn=(66) mmap +0 553 + +fn=(96) read +0 10 + +fn=(104) close +0 15 + +fn=(110) _dl_dst_count +0 14 +cfn=(64) +calls=2 0 +0 170 +0 20 + +fn=(128) mprotect +0 25 + +fn=(140) init_tls +0 11 +cfn=(28) calloc +calls=1 0 +0 91 +0 1 +0 37 +cfn=(142) _dl_determine_tlsoffset +calls=1 0 +0 56 +0 1 +cfn=(144) _dl_allocate_tls_storage +calls=1 0 +0 455 +0 16 + +fn=(18) _dl_process_tunable_env_entries +0 1577 + +fn=(36) +0 3088 +cfn=(66) +calls=9 0 +0 297 +0 1552 + +fn=(92) +0 5502 +cfn=(94) open +calls=262 0 +0 2350 +0 804 +cfn=(96) +calls=2 0 +0 10 +0 28 +cfn=(22) +calls=2 0 +0 173 +0 18 +cfn=(22) +calls=2 0 +0 160 +0 248 +cfn=(22) +calls=1 0 +0 73 +0 8 +cfn=(22) +calls=2 0 +0 160 +0 18 +cfn=(70) +calls=2 0 +0 12 +0 2 +0 2376 +cfn=(22) +calls=1 0 +0 88 +0 2 + +fn=(112) +0 28 +cfn=(88) +calls=2 0 +0 55969 +0 6 + +fn=(134) _dl_check_all_versions +0 40 +cfn=(136) _dl_check_map_versions +calls=4 0 +0 3493 +0 35 + +fn=(146) _dl_relocate_object +0 16013 +cfn=(148) _dl_lookup_symbol_x +calls=94 0 +0 56609 +0 3061 +cob=(3) +cfi=(3) +cfn=(168) +calls=1 0 +0 15 +cob=(3) +cfi=(3) +cfn=(166) +calls=1 0 +0 22 +cob=(3) +cfi=(3) +cfn=(164) +calls=1 0 +0 8 +cob=(3) +cfi=(3) +cfn=(162) +calls=1 0 +0 12 +cob=(3) +cfi=(3) +cfn=(160) +calls=1 0 +0 5 +cob=(3) +cfi=(3) +cfn=(156) +calls=1 0 +0 22 +cob=(3) +cfi=(3) +cfn=(154) +calls=1 0 +0 12 +0 319 +cfn=(128) +calls=4 0 +0 20 +0 307 +cfn=(148) +calls=6 0 +0 3132 +0 281 + +fn=(64) +0 24998 + +fn=(122) _dl_cache_libcmp +0 665 + +fn=(38) memcpy +0 9096 + +fn=(48) _dl_discover_osversion +0 21 +cfn=(50) uname +calls=1 0 +0 5 +0 59 + +fn=(62) +0 792 +cfn=(64) +calls=66 0 +0 24716 +0 330 +cfn=(12) +calls=66 0 +0 13733 +0 198 +cfn=(32) +calls=66 0 +0 2436 +0 66 +0 858 +cfn=(38) +calls=66 0 +0 7410 + +fn=(102) memset +0 2122 + +fn=(136) +0 164 +cfn=(90) +calls=7 0 +0 510 +0 162 +cfn=(138) match_symbol +calls=6 0 +0 1152 +0 6 +cfn=(138) +calls=2 0 +0 302 +0 344 +cfn=(28) +calls=3 0 +0 129 +0 3 +0 721 + +fn=(4) _dl_setup_hash +0 92 + +fn=(12) +0 37799 + +fn=(52) _dl_init_paths +0 14 +cfn=(54) _dl_important_hwcaps +calls=1 0 +0 346 +0 3 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 15 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 84 +cfn=(12) +calls=1 0 +0 10951 +0 28 +cfn=(38) +calls=1 0 +0 1243 +0 77641 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 10 +cfn=(58) +calls=1 0 +0 257804 +0 16 + +fn=(56) +0 23243 + +fn=(108) _dl_map_object_deps +0 265 +cfn=(110) +calls=2 0 +0 204 +0 20 +cfn=(80) +calls=2 0 +0 56119 +0 235 +cfn=(32) +calls=2 0 +0 68 +0 2 +0 20 +cfn=(38) +calls=2 0 +0 41 +0 10 +cfn=(38) +calls=2 0 +0 41 +0 73 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 88 +cfn=(102) +calls=1 0 +0 14 +0 107 +cfn=(102) +calls=2 0 +0 18 +0 320 +cfn=(38) +calls=1 0 +0 28 +0 7 + +fn=(84) +0 60 + +fn=(94) +0 2355 + +fn=(172) _dl_allocate_tls_init +0 61 +cfn=(56) +calls=1 0 +0 23 +0 4 +cfn=(102) +calls=1 0 +0 150 +0 16 + +fn=(176) _dl_unload_cache +0 7 +cfn=(178) munmap +calls=1 0 +0 5 +0 3 + +fn=(24) _dl_new_object +0 45 +cfn=(12) +calls=3 0 +0 325 +0 57 +cfn=(28) +calls=3 0 +0 182 +0 3 +0 36 +cfn=(38) +calls=3 0 +0 150 +0 201 +cfn=(12) +calls=2 0 +0 282 +0 64 +cfn=(56) +calls=2 0 +0 133 +0 180 +cfn=(32) +calls=2 0 +0 68 +0 2 +0 10 + +fn=(74) _dl_count_modids +0 4 + +fn=(132) +0 6 +cfn=(134) +calls=1 0 +0 3568 +0 4 + +fn=(144) +0 7 +cfn=(36) +calls=1 0 +0 78 +0 1 +0 315 +cfn=(28) +calls=1 0 +0 43 +0 1 +0 10 + +fn=(150) do_lookup_x +0 20311 +cfn=(90) +calls=72 0 +0 2994 +0 8356 +cfn=(152) +calls=115 0 +0 19154 +0 575 + +fn=(70) +0 402 + +fn=(98) +0 36 +cfn=(72) +calls=2 0 +0 16 +0 10 +cfn=(100) _fxstat +calls=2 0 +0 20 +0 113 +cfn=(24) +calls=2 0 +0 1494 +0 721 +cfn=(126) _dl_next_tls_modid +calls=1 0 +0 6 +0 68 +cfn=(66) +calls=2 0 +0 68 +0 128 +cfn=(102) +calls=2 0 +0 1908 +0 98 +cfn=(66) +calls=4 0 +0 124 +0 570 +cfn=(104) +calls=1 0 +0 5 +0 2 +cfn=(104) +calls=1 0 +0 5 +0 30 +cfn=(4) +calls=2 0 +0 46 +0 35 +cfn=(40) _dl_add_to_namespace_list +calls=2 0 +0 84 +0 20 +cfn=(128) +calls=1 0 +0 5 +0 47 +cfn=(66) +calls=1 0 +0 31 +0 6 + +fn=(860) +0 39 +cfn=(102) +calls=1 0 +0 14 +0 29 +cfn=(102) +calls=2 0 +0 18 +0 131 + +fn=(2) _dl_start +0 605 +cfn=(4) +calls=1 0 +0 23 +0 17 +cfn=(6) +calls=1 0 +0 503071 +0 64 + +fn=(44) +0 10 + +fn=(78) handle_ld_preload +0 2417 +cfn=(80) +calls=1 0 +0 3965 +0 22 +cfn=(38) +calls=1 0 +0 129 +0 4 + +fn=(224) +0 500 +cfn=(226) _dl_fixup +calls=20 0 +0 15629 +0 300 + +fn=(14) +0 17 + +fn=(22) +0 14325 + +fn=(50) +0 5 + +fn=(54) +0 96 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 162 +cfn=(56) +calls=1 0 +0 22 +0 5 +cfn=(56) +calls=1 0 +0 22 +0 4 + +fn=(226) +0 940 +cfn=(148) +calls=20 0 +0 14232 +0 442 +cob=(3) +cfi=(3) +cfn=(728) +calls=1 0 +0 7 +cob=(3) +cfi=(3) +cfn=(272) +calls=1 0 +0 6 +0 2 + +fn=(16) +0 35 +cfn=(18) +calls=1 0 +0 1577 +0 7 +cfn=(20) _dl_next_ld_env_entry +calls=1 0 +0 188 +0 4 +cfn=(20) +calls=2 0 +0 1347 +0 170 +cfn=(24) +calls=1 0 +0 244 +0 10 +cfn=(40) +calls=1 0 +0 34 +0 138 +cfn=(46) +calls=1 0 +0 7 +0 227 +cfn=(4) +calls=1 0 +0 23 +0 5 +cfn=(48) +calls=1 0 +0 85 +0 78 +cfn=(22) +calls=1 0 +0 120 +0 9 +cfn=(22) +calls=1 0 +0 26 +0 14 +cfn=(22) +calls=1 0 +0 80 +0 7 +cfn=(52) +calls=1 0 +0 348260 +0 3 +cfn=(72) +calls=1 0 +0 17 +0 57 +cfn=(74) +calls=1 0 +0 4 +0 19 +cfn=(106) +calls=1 0 +0 9 +0 19 +cfn=(108) +calls=1 0 +0 57715 +0 102 +cfn=(130) +calls=1 0 +0 3608 +0 5 +cfn=(140) +calls=1 0 +0 668 +0 35 +cfn=(172) +calls=1 0 +0 254 +0 5 +cfn=(174) _dl_sysdep_start_cleanup +calls=1 0 +0 1 +0 6 +cfn=(72) +calls=1 0 +0 8 +0 3 +cfn=(76) _dl_debug_state +calls=1 0 +0 1 +0 2 +cfn=(176) +calls=1 0 +0 15 +0 18 +cfn=(78) +calls=1 0 +0 6537 +0 11 +cfn=(76) +calls=1 0 +0 1 +0 14 +cfn=(146) +calls=1 0 +0 6275 +0 96 +cfn=(146) +calls=3 0 +0 73563 +0 54 +cfn=(170) _dl_add_to_slotinfo +calls=1 0 +0 24 +0 1 + +fn=(100) +0 30 + +fn=(126) +0 6 + +fn=(174) +0 1 + +fn=(0) 0x0000000000001140 +0 2 +cfn=(2) +calls=1 0 +0 503780 +0 14 +cfn=(182) +calls=1 0 +0 2265 +0 3 +cob=(5) +cfi=(5) +cfn=(216) +calls=1 0 +0 104171 + +fn=(42) +0 10 + +fn=(90) +0 602 +cfn=(46) +calls=86 0 +0 609 +0 1047 +cfn=(46) +calls=90 0 +0 1042 +0 696 + +fn=(114) +0 505 +cfn=(56) +calls=65 0 +0 5769 +0 3770 +cfn=(56) +calls=260 0 +0 5525 +0 1040 +cfn=(56) +calls=260 0 +0 5980 +0 3120 +cfn=(92) +calls=260 0 +0 10920 +0 5729 +cfn=(116) _xstat +calls=260 0 +0 3185 +0 3968 + +fn=(124) strdup +0 5 +cfn=(12) +calls=1 0 +0 34 +0 3 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 9 +cfn=(38) +calls=1 0 +0 27 + +fn=(138) +0 728 +cfn=(46) +calls=8 0 +0 646 +0 80 + +fn=(178) +0 5 + +fn=(28) +0 64 +cfn=(32) +calls=8 0 +0 373 +0 8 + +fn=(40) +0 21 +cfn=(42) +calls=3 0 +0 6 +0 70 +cfn=(44) +calls=2 0 +0 4 +0 13 +cfn=(44) +calls=1 0 +0 2 +0 2 + +fn=(118) +0 155 +cfn=(122) +calls=8 0 +0 593 +0 39 +cfn=(120) _dl_sysdep_read_whole_file +calls=1 0 +0 94 +0 10 +cfn=(22) +calls=1 0 +0 112 +0 15 +cfn=(22) +calls=1 0 +0 165 +0 18 +cfn=(122) +calls=1 0 +0 72 +0 42 +cfn=(12) +calls=1 0 +0 69 +0 21 +cfn=(38) +calls=1 0 +0 27 +0 2 +cfn=(124) +calls=1 0 +0 113 +0 8 + +fn=(46) +0 1727 +cfn=(47) strcmp'2 +calls=176 0 +0 12993 +0 660 + +fn=(47) +0 12619 +cfn=(47) +calls=1633 0 +0 70620 +0 374 + +fn=(76) +0 2 + +fn=(82) +0 8 + +fn=(116) +0 3185 + +fn=(120) +0 11 +cfn=(94) +calls=1 0 +0 5 +0 7 +cfn=(100) +calls=1 0 +0 10 +0 8 +cfn=(104) +calls=1 0 +0 5 +0 13 +cfn=(66) +calls=1 0 +0 33 +0 2 + +fn=(142) +0 56 + +fn=(20) +0 1535 + +fn=(86) +0 9 +cfn=(88) +calls=1 0 +0 3895 +0 3 + +fn=(148) +0 18296 +cfn=(150) +calls=120 0 +0 51390 +0 4287 + +fn=(170) +0 24 + +totals: 610235 diff --git a/tests/compare/callgrind/test/test2.callgrind b/tests/compare/callgrind/test/test2.callgrind new file mode 100644 index 0000000..085c692 --- /dev/null +++ b/tests/compare/callgrind/test/test2.callgrind @@ -0,0 +1,2570 @@ +# callgrind format +version: 1 +creator: callgrind-3.19.0 +pid: 526975 +cmd: /usr/bin/date +part: 1 + + +desc: I1 cache: +desc: D1 cache: +desc: LL cache: + +desc: Timerange: Basic block 0 - 156738 +desc: Trigger: Program termination + +positions: line +events: Ir +summary: 610544 + + +ob=(1) /usr/lib64/ld-2.17.so +fl=(1) ??? +fn=(16) dl_main +0 35 +cfn=(18) _dl_process_tunable_env_entries +calls=1 0 +0 1577 +0 7 +cfn=(20) _dl_next_ld_env_entry +calls=1 0 +0 188 +0 4 +cfn=(20) +calls=2 0 +0 1347 +0 170 +cfn=(24) _dl_new_object +calls=1 0 +0 244 +0 10 +cfn=(40) _dl_add_to_namespace_list +calls=1 0 +0 34 +0 138 +cfn=(46) strcmp +calls=1 0 +0 7 +0 227 +cfn=(4) _dl_setup_hash +calls=1 0 +0 23 +0 5 +cfn=(48) _dl_discover_osversion +calls=1 0 +0 85 +0 78 +cfn=(22) bcmp +calls=1 0 +0 120 +0 9 +cfn=(22) +calls=1 0 +0 26 +0 14 +cfn=(22) +calls=1 0 +0 80 +0 7 +cfn=(52) _dl_init_paths +calls=1 0 +0 348260 +0 3 +cfn=(72) _dl_debug_initialize +calls=1 0 +0 17 +0 57 +cfn=(74) _dl_count_modids +calls=1 0 +0 4 +0 19 +cfn=(106) access +calls=1 0 +0 9 +0 19 +cfn=(108) _dl_map_object_deps +calls=1 0 +0 57715 +0 102 +cfn=(130) _dl_receive_error +calls=1 0 +0 3608 +0 5 +cfn=(140) init_tls +calls=1 0 +0 668 +0 35 +cfn=(172) _dl_allocate_tls_init +calls=1 0 +0 254 +0 5 +cfn=(174) _dl_sysdep_start_cleanup +calls=1 0 +0 1 +0 6 +cfn=(72) +calls=1 0 +0 8 +0 3 +cfn=(76) _dl_debug_state +calls=1 0 +0 1 +0 2 +cfn=(176) _dl_unload_cache +calls=1 0 +0 15 +0 18 +cfn=(78) handle_ld_preload +calls=1 0 +0 6537 +0 11 +cfn=(76) +calls=1 0 +0 1 +0 14 +cfn=(146) _dl_relocate_object +calls=1 0 +0 6275 +0 96 +cfn=(146) +calls=3 0 +0 73563 +0 54 +cfn=(170) _dl_add_to_slotinfo +calls=1 0 +0 24 +0 1 + +fn=(102) memset +0 2122 + +fn=(136) _dl_check_map_versions +0 164 +cfn=(90) _dl_name_match_p +calls=7 0 +0 510 +0 162 +cfn=(138) match_symbol +calls=6 0 +0 1152 +0 6 +cfn=(138) +calls=2 0 +0 302 +0 344 +cfn=(28) calloc +calls=3 0 +0 129 +0 3 +0 721 + +fn=(74) +0 4 + +fn=(132) version_check_doit +0 6 +cfn=(134) _dl_check_all_versions +calls=1 0 +0 3568 +0 4 + +fn=(144) _dl_allocate_tls_storage +0 7 +cfn=(36) __libc_memalign +calls=1 0 +0 78 +0 1 +0 315 +cfn=(28) +calls=1 0 +0 43 +0 1 +0 10 + +fn=(150) do_lookup_x +0 20311 +cfn=(90) +calls=72 0 +0 2994 +0 8356 +cfn=(152) check_match.9525 +calls=115 0 +0 19154 +0 575 + +fn=(8) brk +0 12 + +fn=(50) uname +0 5 + +fn=(54) _dl_important_hwcaps +0 96 +cfn=(32) malloc +calls=1 0 +0 34 +0 1 +0 162 +cfn=(56) mempcpy +calls=1 0 +0 22 +0 5 +cfn=(56) +calls=1 0 +0 22 +0 4 + +fn=(84) __sigsetjmp +0 60 + +fn=(94) open +0 2355 + +fn=(172) +0 61 +cfn=(56) +calls=1 0 +0 23 +0 4 +cfn=(102) +calls=1 0 +0 150 +0 16 + +fn=(176) +0 7 +cfn=(178) munmap +calls=1 0 +0 5 +0 3 + +fn=(18) +0 1577 + +fn=(78) +0 2417 +cfn=(80) _dl_catch_error +calls=1 0 +0 3965 +0 22 +cfn=(38) memcpy +calls=1 0 +0 129 +0 4 + +fn=(6) _dl_sysdep_start +0 988 +cfn=(8) +calls=1 0 +0 12 +0 6 +cfn=(10) init_cpu_features.constprop.0 +calls=1 0 +0 122 +0 4 +cfn=(12) strlen +calls=1 0 +0 41 +0 3 +cfn=(14) sbrk +calls=1 0 +0 17 +0 12 +cfn=(16) +calls=1 0 +0 501845 +0 27 + +fn=(10) +0 122 + +fn=(20) +0 1535 + +fn=(42) rtld_lock_default_lock_recursive +0 10 + +fn=(98) _dl_map_object_from_fd +0 36 +cfn=(72) +calls=2 0 +0 16 +0 10 +cfn=(100) _fxstat +calls=2 0 +0 20 +0 113 +cfn=(24) +calls=2 0 +0 1494 +0 721 +cfn=(126) _dl_next_tls_modid +calls=1 0 +0 6 +0 68 +cfn=(66) mmap +calls=2 0 +0 68 +0 128 +cfn=(102) +calls=2 0 +0 1908 +0 98 +cfn=(66) +calls=4 0 +0 124 +0 570 +cfn=(104) close +calls=1 0 +0 5 +0 2 +cfn=(104) +calls=1 0 +0 5 +0 30 +cfn=(4) +calls=2 0 +0 46 +0 35 +cfn=(40) +calls=2 0 +0 84 +0 20 +cfn=(128) mprotect +calls=1 0 +0 5 +0 47 +cfn=(66) +calls=1 0 +0 31 +0 6 + +fn=(52) +0 14 +cfn=(54) +calls=1 0 +0 346 +0 3 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 15 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 84 +cfn=(12) +calls=1 0 +0 10951 +0 28 +cfn=(38) +calls=1 0 +0 1243 +0 77641 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 10 +cfn=(58) fillin_rpath +calls=1 0 +0 257804 +0 16 + +fn=(56) +0 23243 + +fn=(58) +0 20 +cfn=(60) strsep +calls=1 0 +0 2371 +0 195 +cfn=(60) +calls=65 0 +0 153100 +0 12169 +cfn=(22) +calls=84 0 +0 13168 +0 298 +cfn=(70) free +calls=65 0 +0 390 +0 65 +0 780 +cfn=(32) +calls=65 0 +0 2306 +0 65 +0 715 +cfn=(56) +calls=65 0 +0 5769 +0 2932 +cfn=(62) expand_dynamic_string_token +calls=65 0 +0 49649 +0 325 +cfn=(12) +calls=65 0 +0 12307 +0 1180 + +fn=(100) +0 30 + +fn=(126) +0 6 + +fn=(174) +0 1 + +fn=(224) _dl_runtime_resolve +0 500 +cfn=(226) _dl_fixup +calls=20 0 +0 15629 +0 300 + +fn=(46) +0 1727 +cfn=(47) strcmp'2 +calls=176 0 +0 12993 +0 660 + +fn=(47) +0 12619 +cfn=(47) +calls=1633 0 +0 70620 +0 374 + +fn=(226) +0 940 +cfn=(148) _dl_lookup_symbol_x +calls=20 0 +0 14232 +0 442 +cob=(3) /usr/lib64/libc-2.17.so +cfi=(3) ??? +cfn=(728) strlen +calls=1 0 +0 7 +cob=(3) +cfi=(3) +cfn=(272) rindex +calls=1 0 +0 6 +0 2 + +fn=(858) _dl_fini +0 23 +cfn=(42) +calls=1 0 +0 2 +0 89 +cfn=(860) _dl_sort_fini +calls=1 0 +0 231 +0 2 +cfn=(44) rtld_lock_default_unlock_recursive +calls=1 0 +0 2 +0 68 +cob=(4) /cvmfs/atlas-nightlies.cern.ch/repo/sw/23.0_Athena_x86_64-centos7-gcc11-opt/sw/lcg/releases/valgrind/3.19.0-54639/x86_64-centos7-gcc11-opt/libexec/valgrind/vgpreload_core-amd64-linux.so +cfi=(4) ??? +cfn=(874) 0x00000000000010c0 +calls=1 0 +0 72 +cob=(5) /usr/bin/date +cfi=(5) ??? +cfn=(862) 0x00000000004022f0 +calls=1 0 +0 16 +0 18 +cob=(2) ??? +cfi=(2) ??? +cfn=(894) 0x000000000402a270 +calls=1 0 +0 3 +cob=(2) +cfi=(2) +cfn=(872) 0x000000000040978c +calls=1 0 +0 3 +0 63 + +fn=(118) _dl_load_cache_lookup +0 155 +cfn=(122) _dl_cache_libcmp +calls=8 0 +0 593 +0 39 +cfn=(120) _dl_sysdep_read_whole_file +calls=1 0 +0 94 +0 10 +cfn=(22) +calls=1 0 +0 112 +0 15 +cfn=(22) +calls=1 0 +0 165 +0 18 +cfn=(122) +calls=1 0 +0 72 +0 42 +cfn=(12) +calls=1 0 +0 69 +0 21 +cfn=(38) +calls=1 0 +0 27 +0 2 +cfn=(124) strdup +calls=1 0 +0 113 +0 8 + +fn=(90) +0 602 +cfn=(46) +calls=86 0 +0 609 +0 1047 +cfn=(46) +calls=90 0 +0 1042 +0 696 + +fn=(114) open_path +0 505 +cfn=(56) +calls=65 0 +0 5769 +0 3770 +cfn=(56) +calls=260 0 +0 5525 +0 1040 +cfn=(56) +calls=260 0 +0 5980 +0 3120 +cfn=(92) open_verify +calls=260 0 +0 10920 +0 5729 +cfn=(116) _xstat +calls=260 0 +0 3185 +0 3968 + +fn=(124) +0 5 +cfn=(12) +calls=1 0 +0 34 +0 3 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 9 +cfn=(38) +calls=1 0 +0 27 + +fn=(138) +0 728 +cfn=(46) +calls=8 0 +0 646 +0 80 + +fn=(178) +0 5 + +fn=(4) +0 92 + +fn=(12) +0 37805 + +fn=(44) +0 10 + +fn=(62) +0 792 +cfn=(64) index +calls=66 0 +0 24716 +0 330 +cfn=(12) +calls=66 0 +0 13733 +0 198 +cfn=(32) +calls=66 0 +0 2436 +0 66 +0 858 +cfn=(38) +calls=66 0 +0 7410 + +fn=(86) map_doit +0 9 +cfn=(88) _dl_map_object +calls=1 0 +0 3895 +0 3 + +fn=(148) +0 18296 +cfn=(150) +calls=120 0 +0 51390 +0 4287 + +fn=(170) +0 24 + +fn=(76) +0 2 + +fn=(82) _dl_initial_error_catch_tsd +0 8 + +fn=(116) +0 3185 + +fn=(120) +0 11 +cfn=(94) +calls=1 0 +0 5 +0 7 +cfn=(100) +calls=1 0 +0 10 +0 8 +cfn=(104) +calls=1 0 +0 5 +0 13 +cfn=(66) +calls=1 0 +0 33 +0 2 + +fn=(142) _dl_determine_tlsoffset +0 56 + +fn=(14) +0 17 + +fn=(22) +0 14325 + +fn=(72) +0 41 + +fn=(80) +0 27 +cfn=(82) +calls=3 0 +0 6 +0 18 +cfn=(84) +calls=3 0 +0 60 +0 24 +cfn=(112) openaux +calls=2 0 +0 56003 +cfn=(86) +calls=1 0 +0 3907 +0 39 + +fn=(36) +0 3088 +cfn=(66) +calls=9 0 +0 297 +0 1552 + +fn=(60) +0 155471 + +fn=(88) +0 143 +cfn=(90) +calls=7 0 +0 492 +0 63 +cfn=(64) +calls=2 0 +0 112 +0 9 +cfn=(62) +calls=1 0 +0 890 +0 12 +cfn=(92) +calls=1 0 +0 480 +0 41 +cfn=(98) +calls=2 0 +0 5696 +0 4 +cfn=(12) +calls=1 0 +0 63 +0 24 +cfn=(114) +calls=1 0 +0 49511 +0 28 +cfn=(118) +calls=1 0 +0 1555 +0 19 +cfn=(92) +calls=1 0 +0 632 +0 65 +cfn=(46) +calls=2 0 +0 21 +0 4 + +fn=(106) +0 9 + +fn=(130) +0 11 +cfn=(82) +calls=1 0 +0 2 +0 7 +cfn=(132) +calls=1 0 +0 3578 +0 10 + +fn=(152) +0 2579 +cfn=(46) +calls=41 0 +0 3274 +0 3068 +cfn=(46) +calls=113 0 +0 9781 +0 452 + +fn=(182) _dl_init +0 87 +cob=(3) +cfi=(3) +cfn=(194) _init +calls=1 0 +0 165 +0 18 +cob=(3) +cfi=(3) +cfn=(202) check_stdfiles_vtables +calls=1 0 +0 11 +0 4 +cob=(3) +cfi=(3) +cfn=(204) init_cacheinfo +calls=1 0 +0 1879 +0 53 +cob=(2) +cfi=(2) +cfn=(184) 0x000000000402a000 +calls=1 0 +0 6 +0 19 +cob=(4) +cfi=(4) +cfn=(188) 0x0000000000001100 +calls=1 0 +0 12 +0 10 + +fn=(2) _dl_start +0 605 +cfn=(4) +calls=1 0 +0 23 +0 17 +cfn=(6) +calls=1 0 +0 503077 +0 64 + +fn=(28) +0 64 +cfn=(32) +calls=8 0 +0 373 +0 8 + +fn=(40) +0 21 +cfn=(42) +calls=3 0 +0 6 +0 70 +cfn=(44) +calls=2 0 +0 4 +0 13 +cfn=(44) +calls=1 0 +0 2 +0 2 + +fn=(70) +0 402 + +fn=(96) read +0 10 + +fn=(104) +0 15 + +fn=(110) _dl_dst_count +0 14 +cfn=(64) +calls=2 0 +0 170 +0 20 + +fn=(128) +0 25 + +fn=(140) +0 11 +cfn=(28) +calls=1 0 +0 91 +0 1 +0 37 +cfn=(142) +calls=1 0 +0 56 +0 1 +cfn=(144) +calls=1 0 +0 455 +0 16 + +fn=(24) +0 45 +cfn=(12) +calls=3 0 +0 325 +0 57 +cfn=(28) +calls=3 0 +0 182 +0 3 +0 36 +cfn=(38) +calls=3 0 +0 150 +0 201 +cfn=(12) +calls=2 0 +0 282 +0 64 +cfn=(56) +calls=2 0 +0 133 +0 180 +cfn=(32) +calls=2 0 +0 68 +0 2 +0 10 + +fn=(38) +0 9096 + +fn=(48) +0 21 +cfn=(50) +calls=1 0 +0 5 +0 59 + +fn=(66) +0 553 + +fn=(860) +0 39 +cfn=(102) +calls=1 0 +0 14 +0 29 +cfn=(102) +calls=2 0 +0 18 +0 131 + +fn=(122) +0 665 + +fn=(0) 0x0000000000001140 +0 2 +cfn=(2) +calls=1 0 +0 503786 +0 14 +cfn=(182) +calls=1 0 +0 2264 +0 3 +cob=(5) +cfi=(5) +cfn=(216) 0x000000000040224a +calls=1 0 +0 104475 + +fn=(64) +0 24998 + +fn=(92) +0 5502 +cfn=(94) +calls=262 0 +0 2350 +0 804 +cfn=(96) +calls=2 0 +0 10 +0 28 +cfn=(22) +calls=2 0 +0 173 +0 18 +cfn=(22) +calls=2 0 +0 160 +0 248 +cfn=(22) +calls=1 0 +0 73 +0 8 +cfn=(22) +calls=2 0 +0 160 +0 18 +cfn=(70) +calls=2 0 +0 12 +0 2 +0 2376 +cfn=(22) +calls=1 0 +0 88 +0 2 + +fn=(112) +0 28 +cfn=(88) +calls=2 0 +0 55969 +0 6 + +fn=(134) +0 40 +cfn=(136) +calls=4 0 +0 3493 +0 35 + +fn=(146) +0 16013 +cfn=(148) +calls=94 0 +0 56609 +0 3061 +cob=(3) +cfi=(3) +cfn=(168) memcpy@GLIBC_2.2.5 +calls=1 0 +0 15 +cob=(3) +cfi=(3) +cfn=(166) gettimeofday +calls=1 0 +0 22 +cob=(3) +cfi=(3) +cfn=(164) memset +calls=1 0 +0 8 +cob=(3) +cfi=(3) +cfn=(162) strncasecmp +calls=1 0 +0 12 +cob=(3) +cfi=(3) +cfn=(160) strnlen +calls=1 0 +0 5 +cob=(3) +cfi=(3) +cfn=(156) time +calls=1 0 +0 22 +cob=(3) +cfi=(3) +cfn=(154) strcasecmp +calls=1 0 +0 12 +0 319 +cfn=(128) +calls=4 0 +0 20 +0 307 +cfn=(148) +calls=6 0 +0 3132 +0 281 + +fn=(32) +0 447 +cfn=(36) +calls=149 0 +0 4859 +0 149 + +fn=(108) +0 265 +cfn=(110) +calls=2 0 +0 204 +0 20 +cfn=(80) +calls=2 0 +0 56119 +0 235 +cfn=(32) +calls=2 0 +0 68 +0 2 +0 20 +cfn=(38) +calls=2 0 +0 41 +0 10 +cfn=(38) +calls=2 0 +0 41 +0 73 +cfn=(32) +calls=1 0 +0 34 +0 1 +0 88 +cfn=(102) +calls=1 0 +0 14 +0 107 +cfn=(102) +calls=2 0 +0 18 +0 320 +cfn=(38) +calls=1 0 +0 28 +0 7 + +ob=(4) +fl=(4) +fn=(874) +0 9 +cob=(2) +cfi=(2) +cfn=(880) 0x000000000402a030 +calls=1 0 +0 54 +0 1 +cfn=(888) 0x0000000000001050 +calls=1 0 +0 5 +0 3 + +fn=(888) +0 5 + +fn=(188) +0 12 + +ob=(5) +fl=(5) +fn=(430) 0x0000000000402340 +0 12 +cob=(3) +cfi=(3) +cfn=(436) localtime +calls=1 0 +0 11319 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 822 +0 5 +0 12 +cfn=(542) 0x00000000004047f0 +calls=1 0 +0 6566 +0 19 + +fn=(866) 0x0000000000402280 +0 8 + +fn=(244) 0x0000000000402310 +0 15 + +fn=(794) 0x0000000000409100 +0 10 +cob=(3) +cfi=(3) +cfn=(464) fileno +calls=2 0 +0 12 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 777 +0 6 +0 8 +cob=(3) +cfi=(3) +cfn=(808) __freading +calls=2 0 +0 16 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 829 +0 6 +0 8 +cfn=(814) 0x0000000000409180 +calls=2 0 +0 1061 +0 14 +cob=(3) +cfi=(3) +cfn=(512) fclose@@GLIBC_2.2.5 +calls=2 0 +0 640 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 793 +0 6 + +fn=(234) 0x00000000004096f0 +0 16 +cob=(2) +cfi=(2) +cfn=(236) 0x0000000000401620 +calls=1 0 +0 6 +0 7 +cfn=(244) +calls=1 0 +0 15 +0 11 + +fn=(862) +0 5 +cfn=(866) +calls=1 0 +0 8 +0 3 + +fn=(216) +0 11 +cob=(3) +cfi=(3) +cfn=(228) (below main) +calls=1 0 +0 103525 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 934 +0 5 + +fn=(262) 0x0000000000401ac0 +0 17 +cfn=(264) 0x0000000000407160 +calls=1 0 +0 872 +0 3 +cob=(3) +cfi=(3) +cfn=(292) setlocale +calls=1 0 +0 9185 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 822 +0 5 +0 3 +cob=(3) +cfi=(3) +cfn=(320) bindtextdomain +calls=1 0 +0 59503 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 904 +0 5 +0 2 +cob=(3) +cfi=(3) +cfn=(352) textdomain +calls=1 0 +0 373 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 828 +0 5 +0 2 +cfn=(358) 0x0000000000409770 +calls=1 0 +0 944 +0 9 +cob=(3) +cfi=(3) +cfn=(372) getopt_long +calls=1 0 +0 1785 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 852 +0 5 +0 30 +cob=(3) +cfi=(3) +cfn=(778) exit +calls=1 0 +0 5860 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 747 +0 5 +0 13 +cfn=(430) +calls=1 0 +0 18755 +0 5 +cfn=(410) 0x0000000000404810 +calls=1 0 +0 901 +0 5 +cob=(3) +cfi=(3) +cfn=(394) nl_langinfo +calls=1 0 +0 20 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 844 +0 5 +0 5 + +fn=(264) +0 6 +cob=(3) +cfi=(3) +cfn=(274) __strrchr_sse42 +calls=1 0 +0 35 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 808 +0 5 +0 18 + +fn=(814) +0 10 +cob=(3) +cfi=(3) +cfn=(808) +calls=2 0 +0 16 +0 2 +0 10 +cob=(3) +cfi=(3) +cfn=(826) fflush +calls=2 0 +0 249 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 768 +0 6 + +fn=(542) +0 107 +cob=(3) +cfi=(3) +cfn=(632) fputc +calls=7 0 +0 273 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 778 +0 11 +0 359 +cob=(3) +cfi=(3) +cfn=(580) strftime +calls=2 0 +0 427 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 807 +0 6 +0 60 +cob=(3) +cfi=(3) +cfn=(604) fwrite +calls=2 0 +0 567 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 776 +0 6 +0 447 +cob=(3) +cfi=(3) +cfn=(632) +calls=1 0 +0 39 +0 1 +0 137 +cob=(3) +cfi=(3) +cfn=(730) __strlen_sse2_pminub +calls=1 0 +0 14 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 778 +0 5 +0 62 +cob=(3) +cfi=(3) +cfn=(604) +calls=5 0 +0 705 +0 5 +0 42 +cob=(3) +cfi=(3) +cfn=(604) +calls=1 0 +0 145 +0 1 +0 8 + +fn=(782) 0x0000000000402c50 +0 6 +cfn=(784) 0x0000000000409230 +calls=1 0 +0 4625 +0 5 +cfn=(784) +calls=1 0 +0 450 +0 6 + +fn=(358) +0 6 +cob=(3) +cfi=(3) +cfn=(230) __cxa_atexit +calls=1 0 +0 66 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 867 +0 5 + +fn=(410) +0 9 +cob=(3) +cfi=(3) +cfn=(416) clock_gettime +calls=1 0 +0 13 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 866 +0 5 +0 8 + +fn=(784) +0 10 +cob=(3) +cfi=(3) +cfn=(790) __fpending +calls=2 0 +0 12 +cob=(1) +cfi=(1) +cfn=(224) +calls=1 0 +0 829 +0 6 +0 8 +cfn=(794) +calls=2 0 +0 4186 +0 24 + +ob=(3) +fl=(3) +fn=(274) +0 35 + +fn=(372) +0 4 +cfn=(374) _getopt_internal +calls=1 0 +0 1779 +0 2 + +fn=(394) +0 3 +cfn=(396) nl_langinfo_l +calls=1 0 +0 17 + +fn=(440) tzset_internal +0 10 +cfn=(296) getenv +calls=1 0 +0 952 +0 12 +cfn=(312) free +calls=1 0 +0 7 +0 1 +0 2 +cfn=(354) strdup +calls=1 0 +0 245 +0 5 +cfn=(442) __tzfile_read +calls=1 0 +0 9335 +0 18 + +fn=(456) _IO_file_fopen@@GLIBC_2.2.5 +0 70 +cfn=(454) _IO_link_in +calls=1 0 +0 11 +0 3 +cfn=(460) __GI_strstr +calls=1 0 +0 48 +0 22 +cfn=(458) __open_nocancel +calls=1 0 +0 5 +0 2 + +fn=(458) +0 5 + +fn=(482) _IO_setb +0 123 +cfn=(522) munmap +calls=2 0 +0 10 +0 8 + +fn=(486) _IO_file_underflow@@GLIBC_2.2.5 +0 46 +cfn=(488) _IO_switch_to_get_mode +calls=2 0 +0 48 +0 32 +cfn=(490) _IO_file_read +calls=2 0 +0 26 +0 40 + +fn=(508) __lseek_nocancel +0 5 + +fn=(510) ftello +0 10 +cfn=(498) _IO_seekoff_unlocked +calls=1 0 +0 56 +0 11 + +fn=(524) _IO_file_finish@@GLIBC_2.2.5 +0 36 +cfn=(526) _IO_default_finish +calls=3 0 +0 72 + +fn=(580) +0 6 +cfn=(582) strftime_l +calls=2 0 +0 421 + +fn=(606) _IO_file_xsputn@@GLIBC_2.2.5 +0 238 +cfn=(642) __GI_mempcpy +calls=7 0 +0 134 +0 70 +cfn=(608) _IO_file_overflow@@GLIBC_2.2.5 +calls=1 0 +0 207 +0 19 +cfn=(612) _IO_default_xsputn +calls=1 0 +0 73 +0 85 + +fn=(610) _IO_do_write@@GLIBC_2.2.5 +0 56 +cfn=(830) _IO_file_write@@GLIBC_2.2.5 +calls=1 0 +0 43 +0 32 + +fn=(780) __run_exit_handlers +0 55 +cfn=(896) _IO_cleanup +calls=1 0 +0 91 +0 5 +cfn=(900) _Exit +calls=1 0 +0 5 +0 12 +cob=(1) +cfi=(1) +cfn=(858) +calls=1 0 +0 592 +cob=(5) +cfi=(5) +cfn=(782) +calls=1 0 +0 5092 +0 2 + +fn=(158) _dl_vdso_vsym +0 28 + +fn=(166) +0 9 +cfn=(158) +calls=1 0 +0 7 +0 6 + +fn=(256) _setjmp +0 2 +cfn=(258) __sigsetjmp +calls=1 0 +0 28 + +fn=(328) ptmalloc_init.part.7 +0 1529 +cfn=(330) _dl_addr +calls=1 0 +0 56529 +0 22 + +fn=(340) sbrk +0 28 +cfn=(342) brk +calls=1 0 +0 13 +0 16 +cfn=(342) +calls=2 0 +0 26 +0 8 + +fn=(208) intel_check_word +0 188 +cfn=(210) bsearch +calls=8 0 +0 1228 +0 219 + +fn=(374) +0 13 +cfn=(376) _getopt_internal_r +calls=1 0 +0 1755 +0 11 + +fn=(376) +0 28 +cfn=(296) +calls=1 0 +0 1666 +0 61 + +fn=(444) fopen@@GLIBC_2.2.5 +0 2 +cfn=(446) __fopen_internal +calls=1 0 +0 536 + +fn=(462) __fopen_maybe_mmap +0 4 + +fn=(468) fread_unlocked +0 90 +cfn=(470) _IO_sgetn +calls=5 0 +0 1144 +0 20 + +fn=(476) _IO_file_doallocate +0 38 +cfn=(478) _IO_file_stat +calls=2 0 +0 28 +0 32 +cfn=(480) mmap +calls=2 0 +0 66 +0 14 +cfn=(482) +calls=2 0 +0 42 +0 18 + +fn=(516) _IO_file_close_it@@GLIBC_2.2.5 +0 45 +cfn=(502) _IO_unsave_markers +calls=3 0 +0 27 +0 30 +cfn=(482) +calls=3 0 +0 99 +0 24 +cfn=(514) _IO_un_link +calls=3 0 +0 30 +0 60 +cfn=(518) _IO_file_close +calls=3 0 +0 21 +0 13 +cfn=(610) +calls=1 0 +0 15 +0 2 + +fn=(826) +0 64 +cfn=(828) _IO_file_sync@@GLIBC_2.2.5 +calls=2 0 +0 145 +0 40 + +fn=(832) write +0 2 +cfn=(834) __write_nocancel +calls=1 0 +0 5 + +fn=(200) __ctype_init +0 16 + +fn=(260) __sigjmp_save +0 9 + +fn=(296) +0 135 +cfn=(298) __GI_strlen +calls=15 0 +0 224 +0 8073 +cfn=(300) __GI_strncmp +calls=16 0 +0 799 +0 84 + +fn=(306) new_composite_name +0 18 +cfn=(294) __GI_strcmp +calls=1 0 +0 33 +0 130 +cfn=(298) +calls=12 0 +0 228 +0 193 + +fn=(320) +0 40 +cfn=(298) +calls=1 0 +0 14 +0 3 +cfn=(324) malloc +calls=1 0 +0 59329 +0 1 +0 7 +cfn=(344) __GI_memcpy +calls=1 0 +0 23 +0 3 +cfn=(294) +calls=1 0 +0 73 +0 10 + +fn=(326) malloc_hook_ini +0 8 +cfn=(328) +calls=1 0 +0 58080 +0 3 +cfn=(325) malloc'2 +calls=1 0 +0 1225 + +fn=(336) sysmalloc +0 73 +cfn=(338) __default_morecore +calls=1 0 +0 62 +0 41 +cfn=(338) +calls=1 0 +0 45 +0 26 + +fn=(160) +0 5 + +fn=(162) +0 12 + +fn=(396) +0 17 + +fn=(416) +0 6 +cfn=(418) __syscall_clock_gettime +calls=1 0 +0 3 +0 4 + +fn=(418) +0 3 + +fn=(436) +0 3 +cfn=(438) __tz_convert +calls=1 0 +0 11316 + +fn=(466) _fxstat +0 30 + +fn=(494) __GI_memcmp +0 838 + +fn=(514) +0 283 + +fn=(518) +0 6 +cfn=(520) __close_nocancel +calls=3 0 +0 15 + +fn=(520) +0 15 + +fn=(808) +0 32 + +fn=(828) +0 41 +cfn=(610) +calls=1 0 +0 101 +0 3 + +fn=(154) +0 12 + +fn=(470) +0 70 +cfn=(472) _IO_file_xsgetn +calls=5 0 +0 1074 + +fn=(522) +0 10 + +fn=(534) __offtime +0 290 + +fn=(642) +0 134 + +fn=(212) intel_02_known_compare +0 324 + +fn=(334) malloc_consolidate +0 793 + +fn=(168) +0 15 + +fn=(202) +0 11 + +fn=(228) +0 25 +cfn=(230) +calls=1 0 +0 61 +0 13 +cob=(5) +cfi=(5) +cfn=(234) +calls=1 0 +0 55 +0 8 +cfn=(256) +calls=1 0 +0 30 +0 14 +cob=(5) +cfi=(5) +cfn=(262) +calls=1 0 +0 103319 + +fn=(258) +0 19 +cfn=(260) +calls=1 0 +0 9 + +fn=(452) _IO_new_file_init_internal +0 8 +cfn=(454) +calls=1 0 +0 82 +0 5 + +fn=(454) +0 93 + +fn=(478) +0 8 +cfn=(466) +calls=2 0 +0 20 + +fn=(480) +0 66 + +fn=(488) +0 48 + +fn=(512) +0 127 +cfn=(524) +calls=3 0 +0 108 +0 28 +cfn=(312) +calls=1 0 +0 114 +0 1 +0 24 +cfn=(514) +calls=3 0 +0 223 +0 15 +cfn=(516) +calls=3 0 +0 366 +0 21 + +fn=(730) +0 14 + +fn=(790) +0 12 + +fn=(882) __cxa_finalize +0 46 +cfn=(884) __unregister_atfork +calls=1 0 +0 7 + +fn=(896) +0 9 +cfn=(898) _IO_flush_all_lockp +calls=1 0 +0 54 +0 28 + +fn=(210) +0 592 +cfn=(212) +calls=54 0 +0 324 +0 312 + +fn=(292) +0 23 +cfn=(294) +calls=1 0 +0 48 +0 15 +cfn=(296) +calls=1 0 +0 1573 +0 97 +cfn=(302) __GI_strchr +calls=1 0 +0 25 +0 158 +cfn=(304) _nl_find_locale +calls=12 0 +0 6240 +0 115 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 2 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 5 +cfn=(306) +calls=1 0 +0 602 +0 143 +cfn=(308) _nl_postload_ctype +calls=1 0 +0 45 +0 78 + +fn=(294) +0 814 + +fn=(300) +0 799 + +fn=(332) _int_malloc +0 1553 +cfn=(334) +calls=1 0 +0 793 +0 7 +cfn=(336) +calls=1 0 +0 247 +0 79 + +fn=(354) +0 10 +cfn=(298) +calls=2 0 +0 28 +0 6 +cfn=(324) +calls=2 0 +0 380 +0 2 +0 18 +cfn=(344) +calls=2 0 +0 46 + +fn=(198) __GI_strrchr +0 51 + +fn=(232) __new_exitfn +0 83 + +fn=(450) _IO_old_init +0 25 + +fn=(460) +0 48 + +fn=(474) _IO_doallocbuf +0 46 +cfn=(476) +calls=2 0 +0 238 +0 4 + +fn=(504) _IO_file_seek +0 2 +cfn=(506) lseek +calls=1 0 +0 7 + +fn=(506) +0 2 +cfn=(508) +calls=1 0 +0 5 + +fn=(728) +0 7 + +fn=(834) +0 5 + +fn=(272) +0 6 + +fn=(304) +0 228 +cfn=(294) +calls=12 0 +0 576 +0 144 +cfn=(296) +calls=12 0 +0 5124 +0 168 + +fn=(324) +0 188 +cfn=(332) +calls=10 0 +0 1494 +0 225 +cfn=(326) +calls=1 0 +0 59316 + +fn=(325) +0 18 +cfn=(332) +calls=1 0 +0 1185 +0 22 + +fn=(338) +0 4 +cfn=(340) +calls=2 0 +0 91 +0 12 + +fn=(164) +0 8 + +fn=(206) handle_intel.isra.0 +0 40 +cfn=(208) +calls=2 0 +0 1446 +0 14 +cfn=(208) +calls=2 0 +0 189 +0 40 + +fn=(442) +0 37 +cfn=(444) +calls=1 0 +0 538 +0 5 +cfn=(464) +calls=1 0 +0 6 +0 4 +cfn=(466) +calls=1 0 +0 10 +0 6 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 75 +cfn=(496) fseek +calls=1 0 +0 138 +0 8 +cfn=(468) +calls=1 0 +0 279 +0 5 +cfn=(468) +calls=1 0 +0 426 +0 12 +cfn=(494) +calls=2 0 +0 44 +0 50 +cfn=(324) +calls=1 0 +0 178 +0 1 +0 30 +cfn=(468) +calls=1 0 +0 331 +0 2682 +cfn=(468) +calls=1 0 +0 109 +0 8 +cfn=(312) +calls=1 0 +0 7 +0 1 +0 341 +cfn=(512) +calls=1 0 +0 387 +0 10 +cfn=(530) __tzstring +calls=1 0 +0 347 +0 70 +cfn=(530) +calls=10 0 +0 2411 +0 55 +cfn=(530) +calls=2 0 +0 248 +0 217 +cfn=(468) +calls=1 0 +0 109 +0 16 +cfn=(510) +calls=1 0 +0 77 +0 49 + +fn=(448) _IO_no_init +0 10 +cfn=(450) +calls=1 0 +0 25 +0 23 + +fn=(484) __underflow +0 65 +cfn=(486) +calls=2 0 +0 192 +0 8 + +fn=(498) +0 47 +cfn=(500) _IO_file_seekoff@@GLIBC_2.2.5 +calls=2 0 +0 121 +0 3 + +fn=(500) +0 34 +cfn=(502) +calls=1 0 +0 9 +0 9 +cfn=(504) +calls=1 0 +0 9 +0 60 + +fn=(528) _int_free +0 98 + +fn=(584) __strftime_internal +0 240 +cfn=(298) +calls=1 0 +0 14 +0 47 +cfn=(298) +calls=1 0 +0 14 +0 30 +cfn=(344) +calls=2 0 +0 46 +0 16 + +fn=(604) +0 439 +cfn=(606) +calls=8 0 +0 826 +0 152 + +fn=(608) +0 40 +cfn=(610) +calls=1 0 +0 15 +0 2 +cfn=(474) +calls=1 0 +0 144 +0 6 + +fn=(830) +0 22 +cfn=(832) +calls=1 0 +0 7 +0 14 + +fn=(898) +0 54 + +fn=(196) __init_misc +0 12 +cfn=(198) +calls=1 0 +0 51 +0 12 + +fn=(308) +0 45 + +fn=(312) +0 46 +cfn=(528) +calls=1 0 +0 98 +0 5 + +fn=(156) +0 9 +cfn=(158) +calls=1 0 +0 7 +0 6 + +fn=(204) +0 39 +cfn=(206) +calls=1 0 +0 844 +0 3 +cfn=(206) +calls=1 0 +0 885 +0 108 + +fn=(438) +0 21 +cfn=(440) +calls=1 0 +0 10587 +0 16 +cfn=(534) +calls=1 0 +0 290 +0 16 +cfn=(532) __tzfile_compute +calls=1 0 +0 381 +0 5 + +fn=(464) +0 18 + +fn=(490) +0 10 +cfn=(492) __read_nocancel +calls=2 0 +0 10 +0 6 + +fn=(492) +0 10 + +fn=(496) +0 12 +cfn=(498) +calls=1 0 +0 115 +0 11 + +fn=(530) +0 105 +cfn=(298) +calls=15 0 +0 210 +0 459 +cfn=(494) +calls=36 0 +0 794 +0 204 +cfn=(324) +calls=6 0 +0 1158 +0 6 +0 60 +cfn=(344) +calls=6 0 +0 128 +0 130 + +fn=(532) +0 47 +cfn=(530) +calls=1 0 +0 169 +0 16 +cfn=(530) +calls=1 0 +0 79 +0 70 + +fn=(582) +0 10 +cfn=(584) +calls=2 0 +0 407 +0 4 + +fn=(778) +0 6 +cfn=(780) +calls=1 0 +0 5854 + +fn=(884) +0 7 + +fn=(194) +0 27 +cfn=(158) +calls=1 0 +0 7 +0 8 +cfn=(158) +calls=1 0 +0 7 +0 10 +cfn=(196) +calls=1 0 +0 75 +0 1 +cfn=(200) +calls=1 0 +0 16 +0 14 + +fn=(230) +0 16 +cfn=(232) +calls=2 0 +0 83 +0 28 + +fn=(298) +0 732 + +fn=(302) +0 25 + +fn=(330) +0 14 +cob=(1) +cfi=(1) +cfn=(42) +calls=1 0 +0 2 +0 56492 +cob=(1) +cfi=(1) +cfn=(44) +calls=1 0 +0 2 +0 19 + +fn=(344) +0 653 + +fn=(446) +0 10 +cfn=(324) +calls=1 0 +0 178 +0 1 +0 11 +cfn=(448) +calls=1 0 +0 58 +0 4 +cfn=(452) +calls=1 0 +0 95 +0 5 +cfn=(456) +calls=1 0 +0 161 +0 9 +cfn=(462) +calls=1 0 +0 4 + +fn=(472) +0 231 +cfn=(344) +calls=5 0 +0 410 +0 14 +cfn=(484) +calls=2 0 +0 265 +0 9 +cfn=(474) +calls=1 0 +0 144 +0 1 + +fn=(502) +0 36 + +fn=(526) +0 42 +cfn=(514) +calls=3 0 +0 30 + +fn=(612) +0 73 + +fn=(632) +0 312 + +fn=(900) +0 5 + +fn=(342) +0 39 + +fn=(352) +0 30 +cfn=(294) +calls=1 0 +0 42 +0 5 +cfn=(294) +calls=1 0 +0 42 +0 4 +cfn=(354) +calls=1 0 +0 245 +0 5 + +ob=(2) +fl=(2) +fn=(872) +0 3 + +fn=(184) +0 6 + +fn=(880) +0 1 +cob=(3) +cfi=(3) +cfn=(882) +calls=1 0 +0 53 + +fn=(894) +0 3 + +fn=(236) +0 6 + +totals: 610544 diff --git a/tests/compare/pstats/print/print1.pstats b/tests/compare/pstats/print/print1.pstats new file mode 100644 index 0000000..3ff408b Binary files /dev/null and b/tests/compare/pstats/print/print1.pstats differ diff --git a/tests/compare/pstats/print/print2.pstats b/tests/compare/pstats/print/print2.pstats new file mode 100644 index 0000000..47da9ef Binary files /dev/null and b/tests/compare/pstats/print/print2.pstats differ diff --git a/tests/test.py b/tests/test.py index 28e51c3..a395306 100755 --- a/tests/test.py +++ b/tests/test.py @@ -44,6 +44,10 @@ "xperf", "dtrace", ] +formats_compare = [ + "callgrind", + "pstats" +] NB_RUN_FAILURES = 0 @@ -91,7 +95,7 @@ def diff(a, b): b_lines = open(b, 'rt', encoding='UTF-8').readlines() diff_lines = difflib.unified_diff(a_lines, b_lines, fromfile=a, tofile=b) - diff_txt= ''.join(diff_lines) + diff_txt = ''.join(diff_lines) if len(diff_txt) > 0: NB_DIFF_FAILURES += 1 sys.stdout.write("Non empty diff for files %s and %s" %(a,b)) @@ -167,10 +171,41 @@ def main(): else: diff(ref_dot, dot) + for format_compare in formats_compare: + subdir = os.path.join(test_dir, 'compare', format_compare) + for dirname in os.listdir(subdir): + test_subdir = os.path.join(subdir, dirname) + name1 = dirname + '1.' + name2 = dirname + '2.' + filename1 = name1 + format_compare + filename2 = name2 + format_compare + + sys.stdout.write(filename1 + '\n') + + profile1 = os.path.join(test_subdir, filename1) + profile2 = os.path.join(test_subdir, filename2) + dot = os.path.join(test_subdir, name1 + '.dot') + png = os.path.join(test_subdir, name1 + '.png') + + ref_dot = os.path.join(test_subdir, name1 + '.orig.dot') + ref_png = os.path.join(test_subdir, name1 + '.orig.png') + + if run_gprof2dot(['-f', format_compare, '-o', dot, '--compare', profile1, profile2]) != 0: + continue + + if run(['dot', '-Tpng', '-o', png, dot]) != 0: + continue + + if options.force or not os.path.exists(ref_dot): + shutil.copy(dot, ref_dot) + shutil.copy(png, ref_png) + else: + diff(ref_dot, dot) + # test the --list-functions flag only for pstats format profile = os.path.join(test_dir, 'pstats', 'memtrail.pstats') genfileNm = os.path.join(test_dir, 'pstats', 'function-list.testgen.txt') - outfile = open(genfileNm, "w") + outfile = open(genfileNm, "w") for flagVal in ("+", "execfile", "*execfile", "*:execfile", "*parse", "*parse_*"): run_gprof2dot(['-f', "pstats", "--list-functions="+flagVal, profile], stderr=outfile) @@ -187,7 +222,7 @@ def main(): if NB_RUN_FAILURES or NB_DIFF_FAILURES: print("Nb runs ending in error: %d" % NB_RUN_FAILURES) print("Nb diffs showing a difference: %d" % NB_DIFF_FAILURES) - if ( options.max_acceptable is not None + if (options.max_acceptable is not None and NB_RUN_FAILURES + NB_DIFF_FAILURES > options.max_acceptable ): print("Too many errors: returning non-zero code") sys.exit(1)