(b *testing.B, file string)
| 476 | } |
| 477 | |
| 478 | func benchmarkArchiveParallel(b *testing.B, file string) { |
| 479 | b.Helper() |
| 480 | |
| 481 | for range b.N { |
| 482 | r, err := sevenzip.OpenReader(filepath.Join("testdata", file)) |
| 483 | if err != nil { |
| 484 | b.Fatal(err) |
| 485 | } |
| 486 | |
| 487 | var once sync.Once |
| 488 | |
| 489 | f := func() { |
| 490 | if err := r.Close(); err != nil { |
| 491 | b.Fatal(err) |
| 492 | } |
| 493 | } |
| 494 | |
| 495 | defer once.Do(f) |
| 496 | |
| 497 | streams := make(map[int]struct{}, len(r.File)) |
| 498 | |
| 499 | for _, f := range r.File { |
| 500 | streams[f.Stream] = struct{}{} |
| 501 | } |
| 502 | |
| 503 | eg := new(errgroup.Group) |
| 504 | eg.SetLimit(runtime.NumCPU()) |
| 505 | |
| 506 | for stream := range streams { |
| 507 | eg.Go(func() error { |
| 508 | return extractArchive(b, &r.Reader, stream, crc32.NewIEEE(), reader, true) |
| 509 | }) |
| 510 | } |
| 511 | |
| 512 | if err := eg.Wait(); err != nil { |
| 513 | b.Fatal(err) |
| 514 | } |
| 515 | |
| 516 | once.Do(f) |
| 517 | } |
| 518 | } |
| 519 | |
| 520 | func benchmarkArchiveNaiveParallel(b *testing.B, file string, workers int) { |
| 521 | b.Helper() |
no test coverage detected
searching dependent graphs…