]> go.fuhry.dev Git - fsnotify.git/commitdiff
Add a basic benchmark
authorMartin Tournoij <martin@arp242.net>
Tue, 20 Dec 2022 14:16:22 +0000 (15:16 +0100)
committerMartin Tournoij <martin@arp242.net>
Tue, 20 Dec 2022 14:16:22 +0000 (15:16 +0100)
fsnotify_test.go

index 767654eac53eafdb52ea16465f8aa7797fe3f46f..0d2f008de6a3821548e79b4046cdcb7417b1c9b6 100644 (file)
@@ -9,6 +9,7 @@ import (
        "runtime"
        "sort"
        "strings"
+       "sync"
        "sync/atomic"
        "testing"
        "time"
@@ -1478,3 +1479,54 @@ func TestWatchList(t *testing.T) {
                t.Errorf("\nhave: %s\nwant: %s", have, want)
        }
 }
+
+func BenchmarkWatch(b *testing.B) {
+       w, err := NewWatcher()
+       if err != nil {
+               b.Fatal(err)
+       }
+
+       tmp := b.TempDir()
+       file := join(tmp, "file")
+       err = w.Add(tmp)
+       if err != nil {
+               b.Fatal(err)
+       }
+
+       var wg sync.WaitGroup
+       wg.Add(1)
+       go func() {
+               for {
+                       select {
+                       case err, ok := <-w.Errors:
+                               if !ok {
+                                       wg.Done()
+                                       return
+                               }
+                               b.Fatal(err)
+                       case _, ok := <-w.Events:
+                               if !ok {
+                                       wg.Done()
+                                       return
+                               }
+                       }
+               }
+       }()
+
+       b.ResetTimer()
+       for n := 0; n < b.N; n++ {
+               fp, err := os.Create(file)
+               if err != nil {
+                       b.Fatal(err)
+               }
+               err = fp.Close()
+               if err != nil {
+                       b.Fatal(err)
+               }
+       }
+       err = w.Close()
+       if err != nil {
+               b.Fatal(err)
+       }
+       wg.Wait()
+}