• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

microlinkhq / browserless / 28333399682
85%

Build:
DEFAULT BRANCH: master
Ran 28 Jun 2026 07:28PM UTC
Jobs 9
Files 33
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

28 Jun 2026 07:27PM UTC coverage: 84.602% (-0.09%) from 84.688%
28333399682

push

github

web-flow
perf(screencast): ack synchronously on the non-backpressure path (#814)

* perf(screencast): ack synchronously on the non-backpressure path

The #813 follow-up modeled onScreencastFrame as an async function, so every
frame paid an async hop — a Promise allocation plus a microtask for the
`await` — even though onFrame is synchronous on the common path (muxer.write
only returns a promise when ffmpeg stdin applies backpressure).

Restore the promise-aware shape: run onFrame, and when it returns a non-thenable
(the common case) ack synchronously in the same tick. Only when it returns a
real promise do we build the deferred-ack chain. Behavior is unchanged on every
path — sync throw is still swallowed, the async ack still guards `stopped`, and
`Promise.resolve(result)` keeps it safe for non-Promise thenables.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* fix(screencast): guard sync ack paths against a reentrant stop()

The sync fast paths acked directly, bypassing the `stopped` guard the async
path uses. If onFrame synchronously calls stop() and then returns undefined (the
"capture N frames then stop" pattern) or throws, the frame still sent
Page.screencastFrameAck after teardown — the stale-ack race the async path
already guarded against.

Route every ack through an `ackIfActive` helper so sync and async paths share
the one invariant: never ack a torn-down session.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>

641 of 799 branches covered (80.23%)

Branch coverage included in aggregate %.

24 of 24 new or added lines in 1 file covered. (100.0%)

8 existing lines in 1 file now uncovered.

3381 of 3955 relevant lines covered (85.49%)

126686.55 hits per line

Coverage Regressions

Lines Coverage ∆ File
8
64.96
-1.34% packages/browserless/src/report.js
Jobs
ID Job ID Ran Files Coverage
1 @browserless/errors - 28333399682.1 28 Jun 2026 07:28PM UTC 1
99.32
GitHub Action Run
2 @browserless/lighthouse - 28333399682.2 28 Jun 2026 07:29PM UTC 3
97.83
GitHub Action Run
3 @browserless/screencast - 28333399682.3 28 Jun 2026 07:28PM UTC 1
95.74
GitHub Action Run
4 browserless - 28333399682.4 28 Jun 2026 07:29PM UTC 3
78.47
GitHub Action Run
5 @browserless/devices - 28333399682.5 28 Jun 2026 07:28PM UTC 1
94.92
GitHub Action Run
6 @browserless/function - 28333399682.6 28 Jun 2026 07:29PM UTC 3
97.0
GitHub Action Run
7 @browserless/screenshot - 28333399682.7 28 Jun 2026 07:29PM UTC 8
79.05
GitHub Action Run
8 @browserless/capture - 28333399682.8 28 Jun 2026 07:28PM UTC 11
85.71
GitHub Action Run
9 @browserless/goto - 28333399682.9 28 Jun 2026 07:30PM UTC 2
84.45
GitHub Action Run
Source Files on build 28333399682
  • Tree
  • List 33
  • Changed 2
  • Source Changed 1
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #28333399682
  • 4ff2caf6 on github
  • Prev Build on master (#28332931709)
  • Next Build on master (#28357992456)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc