@@ -418,6 +418,7 @@ static int hist_entry__hierarchy_fprintf(struct hist_entry *he,
418
418
const char * sep = symbol_conf .field_sep ;
419
419
struct perf_hpp_fmt * fmt ;
420
420
char * buf = hpp -> buf ;
421
+ size_t size = hpp -> size ;
421
422
int ret , printed = 0 ;
422
423
bool first = true;
423
424
@@ -457,6 +458,11 @@ static int hist_entry__hierarchy_fprintf(struct hist_entry *he,
457
458
(nr_sort_key - 1 ) * HIERARCHY_INDENT + 2 , "" );
458
459
advance_hpp (hpp , ret );
459
460
461
+ printed += fprintf (fp , "%s" , buf );
462
+
463
+ hpp -> buf = buf ;
464
+ hpp -> size = size ;
465
+
460
466
/*
461
467
* No need to call hist_entry__snprintf_alignment() since this
462
468
* fmt is always the last column in the hierarchy mode.
@@ -467,7 +473,11 @@ static int hist_entry__hierarchy_fprintf(struct hist_entry *he,
467
473
else
468
474
fmt -> entry (fmt , hpp , he );
469
475
470
- printed += fprintf (fp , "%s\n" , buf );
476
+ /*
477
+ * dynamic entries are right-aligned but we want left-aligned
478
+ * in the hierarchy mode
479
+ */
480
+ printed += fprintf (fp , "%s\n" , ltrim (buf ));
471
481
472
482
if (symbol_conf .use_callchain && he -> leaf ) {
473
483
u64 total = hists__total_period (hists );
@@ -525,6 +535,7 @@ static int print_hierarchy_header(struct hists *hists, struct perf_hpp *hpp,
525
535
{
526
536
bool first = true;
527
537
int nr_sort ;
538
+ int depth ;
528
539
unsigned width = 0 ;
529
540
unsigned header_width = 0 ;
530
541
struct perf_hpp_fmt * fmt ;
@@ -558,19 +569,16 @@ static int print_hierarchy_header(struct hists *hists, struct perf_hpp *hpp,
558
569
if (!first )
559
570
header_width += fprintf (fp , " / " );
560
571
else {
561
- header_width += fprintf (fp , "%s" , sep ?: " " );
572
+ fprintf (fp , "%s" , sep ?: " " );
562
573
first = false;
563
574
}
564
575
565
576
fmt -> header (fmt , hpp , hists_to_evsel (hists ));
566
577
rtrim (hpp -> buf );
567
578
568
- header_width += fprintf (fp , "%s" , hpp -> buf );
579
+ header_width += fprintf (fp , "%s" , ltrim ( hpp -> buf ) );
569
580
}
570
581
571
- /* preserve max indent depth for combined sort headers */
572
- print_hierarchy_indent (sep , nr_sort , spaces , fp );
573
-
574
582
fprintf (fp , "\n# " );
575
583
576
584
/* preserve max indent depth for initial dots */
@@ -590,22 +598,24 @@ static int print_hierarchy_header(struct hists *hists, struct perf_hpp *hpp,
590
598
fprintf (fp , "%.*s" , width , dots );
591
599
}
592
600
601
+ depth = 0 ;
593
602
hists__for_each_format (hists , fmt ) {
594
603
if (!perf_hpp__is_sort_entry (fmt ) && !perf_hpp__is_dynamic_entry (fmt ))
595
604
continue ;
596
605
if (perf_hpp__should_skip (fmt , hists ))
597
606
continue ;
598
607
599
608
width = fmt -> width (fmt , hpp , hists_to_evsel (hists ));
609
+ width += depth * HIERARCHY_INDENT ;
610
+
600
611
if (width > header_width )
601
612
header_width = width ;
613
+
614
+ depth ++ ;
602
615
}
603
616
604
617
fprintf (fp , "%s%-.*s" , sep ?: " " , header_width , dots );
605
618
606
- /* preserve max indent depth for dots under sort headers */
607
- print_hierarchy_indent (sep , nr_sort , dots , fp );
608
-
609
619
fprintf (fp , "\n#\n" );
610
620
611
621
return 2 ;
0 commit comments