@@ -45,6 +45,7 @@ import {
45
45
resolvePackagePath ,
46
46
sha256 ,
47
47
sleep ,
48
+ waitStopProcess ,
48
49
} from './utils'
49
50
50
51
const log = logger ( 'webrtcperf:session' )
@@ -1663,7 +1664,12 @@ window.SERVER_USE_HTTPS = ${this.serverUseHttps};
1663
1664
throttleDownValuesLoss [ pageKey ] = throttleDownValues . loss || 0
1664
1665
throttleDownValuesQueue [ pageKey ] = throttleDownValues . queue || 0
1665
1666
} catch ( err ) {
1666
- log . error ( `collectPeerConnectionStats for page ${ pageIndex } error: ${ ( err as Error ) . stack } ` )
1667
+ const error = err as Error
1668
+ if ( error . message . includes ( 'Execution context was destroyed, most likely because of a navigation.' ) ) {
1669
+ log . warn ( `collectPeerConnectionStats for page ${ pageIndex } error: ${ error . message } ` )
1670
+ } else {
1671
+ log . error ( `collectPeerConnectionStats for page ${ pageIndex } error: ${ error . stack } ` )
1672
+ }
1667
1673
}
1668
1674
} ) ,
1669
1675
)
@@ -1730,25 +1736,36 @@ window.SERVER_USE_HTTPS = ${this.serverUseHttps};
1730
1736
return page . close ( { runBeforeUnload : true } )
1731
1737
} ) ,
1732
1738
)
1733
- let attempts = 20
1734
- while ( this . pages . size > 0 && attempts > 0 ) {
1735
- await sleep ( 500 )
1736
- attempts -= 1
1739
+ if ( this . pages . size > 0 ) {
1740
+ const now = Date . now ( )
1741
+ const maxWaitTime = 1000 * this . pages . size
1742
+ while ( this . pages . size > 0 && Date . now ( ) - now < maxWaitTime ) {
1743
+ log . debug ( `${ this . id } waiting for ${ this . pages . size } pages to close` )
1744
+ await sleep ( 200 )
1745
+ }
1746
+ if ( this . pages . size > 0 ) {
1747
+ log . warn ( `${ this . id } timeout closing ${ this . pages . size } pages` )
1748
+ }
1737
1749
}
1750
+
1738
1751
this . browser . removeAllListeners ( )
1739
1752
if ( this . chromiumUrl ) {
1740
1753
log . debug ( `${ this . id } disconnect from browser` )
1741
1754
try {
1742
1755
await this . browser . disconnect ( )
1743
1756
} catch ( err ) {
1744
- log . warn ( `browser disconnect error: ${ ( err as Error ) . message } ` )
1757
+ log . warn ( `${ this . id } browser disconnect error: ${ ( err as Error ) . message } ` )
1745
1758
}
1746
1759
} else {
1747
- log . debug ( `${ this . id } closing browser` )
1748
- try {
1749
- await this . browser . close ( )
1750
- } catch ( err ) {
1751
- log . error ( `browser close error: ${ ( err as Error ) . stack } ` )
1760
+ const pid = this . browser . process ( ) ?. pid
1761
+ if ( pid ) {
1762
+ log . debug ( `${ this . id } closing browser (pid: ${ pid } )` )
1763
+ try {
1764
+ await this . browser . close ( )
1765
+ } catch ( err ) {
1766
+ log . error ( `${ this . id } browser close error: ${ ( err as Error ) . stack } ` )
1767
+ }
1768
+ await waitStopProcess ( pid , 5000 )
1752
1769
}
1753
1770
}
1754
1771
this . pages . clear ( )
0 commit comments