Quellcode durchsuchen

Dedupe profile comments when merging profiles. (#303)

Alexey Alexandrov vor 7 Jahren
Ursprung
Commit
65d07f9e45
2 geänderte Dateien mit 11 neuen und 1 gelöschten Zeilen
  1. 7
    1
      profile/merge.go
  2. 4
    0
      profile/profile_test.go

+ 7
- 1
profile/merge.go Datei anzeigen

@@ -425,6 +425,7 @@ func combineHeaders(srcs []*Profile) (*Profile, error) {
425 425
 
426 426
 	var timeNanos, durationNanos, period int64
427 427
 	var comments []string
428
+	seenComments := map[string]bool{}
428 429
 	var defaultSampleType string
429 430
 	for _, s := range srcs {
430 431
 		if timeNanos == 0 || s.TimeNanos < timeNanos {
@@ -434,7 +435,12 @@ func combineHeaders(srcs []*Profile) (*Profile, error) {
434 435
 		if period == 0 || period < s.Period {
435 436
 			period = s.Period
436 437
 		}
437
-		comments = append(comments, s.Comments...)
438
+		for _, c := range s.Comments {
439
+			if seen := seenComments[c]; !seen {
440
+				comments = append(comments, c)
441
+				seenComments[c] = true
442
+			}
443
+		}
438 444
 		if defaultSampleType == "" {
439 445
 			defaultSampleType = s.DefaultSampleType
440 446
 		}

+ 4
- 0
profile/profile_test.go Datei anzeigen

@@ -631,6 +631,7 @@ func TestMerge(t *testing.T) {
631 631
 	// location should add up to 0).
632 632
 
633 633
 	prof := testProfile1.Copy()
634
+	prof.Comments = []string{"comment1"}
634 635
 	p1, err := Merge([]*Profile{prof, prof})
635 636
 	if err != nil {
636 637
 		t.Errorf("merge error: %v", err)
@@ -640,6 +641,9 @@ func TestMerge(t *testing.T) {
640 641
 	if err != nil {
641 642
 		t.Errorf("merge error: %v", err)
642 643
 	}
644
+	if got, want := len(prof.Comments), 1; got != want {
645
+		t.Errorf("len(prof.Comments) = %d, want %d", got, want)
646
+	}
643 647
 
644 648
 	// Use aggregation to merge locations at function granularity.
645 649
 	if err := prof.Aggregate(false, true, false, false, false); err != nil {