@@ -447,6 +447,52 @@ func Test_GetBytes_Goroutine(t *testing.T) {
447
447
t .Logf ("Allocated bytes after test: %+v\n " , memStats .HeapAlloc )
448
448
}
449
449
450
+ func BenchmarkImage_GetBytes_KeepAlive (b * testing.B ) {
451
+ bytes , err := ioutil .ReadFile ("testdata/stripped_pixel.jpg" )
452
+ require .NoError (b , err )
453
+ var wg sync.WaitGroup
454
+
455
+ for i := 0 ; i < b .N ; i ++ {
456
+ wg .Add (1 )
457
+ go func () {
458
+ defer wg .Done ()
459
+
460
+ img , err := goexiv .OpenBytes (bytes )
461
+ require .NoError (b , err )
462
+
463
+ runtime .GC ()
464
+
465
+ require .NoError (b , img .SetExifString ("Exif.Photo.UserComment" , "123" ))
466
+
467
+ bytesAfter := img .GetBytes ()
468
+ assert .NotEmpty (b , bytesAfter )
469
+ runtime .KeepAlive (img )
470
+ }()
471
+ }
472
+
473
+ wg .Wait ()
474
+ }
475
+
476
+ func BenchmarkImage_GetBytes_NoKeepAlive (b * testing.B ) {
477
+ bytes , err := ioutil .ReadFile ("testdata/stripped_pixel.jpg" )
478
+ require .NoError (b , err )
479
+ var wg sync.WaitGroup
480
+
481
+ for i := 0 ; i < b .N ; i ++ {
482
+ wg .Add (1 )
483
+ go func () {
484
+ defer wg .Done ()
485
+ img , err := goexiv .OpenBytes (bytes )
486
+ require .NoError (b , err )
487
+
488
+ require .NoError (b , img .SetExifString ("Exif.Photo.UserComment" , "123" ))
489
+
490
+ bytesAfter := img .GetBytes ()
491
+ assert .NotEmpty (b , bytesAfter )
492
+ }()
493
+ }
494
+ }
495
+
450
496
// Fills the image with metadata
451
497
func initializeImage (path string , t * testing.T ) {
452
498
img , err := goexiv .Open (path )
0 commit comments