Measured locally · raw runs retained

Embedded CEF vs Playwright

End-to-end recording measurements across static, animated, DOM, multi-page, and 4K workloads. Every value is the median of isolated process-tree runs on the same machine.

MeasuredSeptember 24, 2026 at 4:46 PM
Revisionf3d8978c762f
Trials3 per backend
HostApple M4 · arm64

Download raw benchmark dataView the harness ↗

Results from this run

Cadence improved at 1080p60, with clear resource costs.

  • Embedded CEF held 60.0 distinct FPS on the 1080p60 canvas workload; Playwright reached 55.3 FPS.
  • Two-source native capture peaked at 2111 MiB RSS and took 14.0 seconds to finalize, compared with 1472 MiB and 0.5 seconds for Playwright.
  • 4K30 missed its cadence target on both backends: native measured 0.8 distinct FPS and Playwright measured 17.6 FPS.

1920×1080 · 30 FPS

Static page · 1080p30

A settled page with no animation after load.

RAM +47%CPU +257%
BackendDistinct FPSRepeatedPeak RSSSampled CPUStartupFinalizeOutput
Embedded CEFn/an/a1093 MiB93%212 ms148 ms0.04 MiB
Playwrightn/an/a745 MiB26%161 ms358 ms0.06 MiB

1280×720 · 30 FPS

Canvas motion · 720p30

Continuous requestAnimationFrame canvas motion at a lightweight output size.

RAM +51%CPU +33%
BackendDistinct FPSRepeatedPeak RSSSampled CPUStartupFinalizeOutput
Embedded CEF30.00.0%1006 MiB76%218 ms128 ms0.08 MiB
Playwright30.00.0%665 MiB57%162 ms83 ms0.09 MiB

1920×1080 · 60 FPS

Canvas motion · 1080p60

Continuous canvas motion at the beta default 1080p60 capture target.

RAM +46%CPU +96%
BackendDistinct FPSRepeatedPeak RSSSampled CPUStartupFinalizeOutput
Embedded CEF60.00.0%1246 MiB239%219 ms194 ms0.16 MiB
Playwright55.37.8%853 MiB122%165 ms95 ms0.18 MiB

1920×1080 · 60 FPS

DOM and scroll · 1080p60

A dense card grid continuously translated to exercise layout, paint, and capture.

RAM +42%CPU +14%
BackendDistinct FPSRepeatedPeak RSSSampled CPUStartupFinalizeOutput
Embedded CEF60.00.0%1286 MiB387%275 ms294 ms1.01 MiB
Playwright60.00.0%906 MiB341%207 ms200 ms1.22 MiB

1920×1080 · 60 FPS

Two-page switching · 1080p60

Two active browser sources with two authored page switches during recording.

RAM +43%CPU +24%
BackendDistinct FPSRepeatedPeak RSSSampled CPUStartupFinalizeOutput
Embedded CEFn/an/a2111 MiB549%495 ms14037 ms0.26 MiB
Playwrightn/an/a1472 MiB445%410 ms508 ms0.32 MiB

3840×2160 · 30 FPS

Canvas motion · 4K30

Continuous canvas motion at the maximum 3840x2160 capture size.

RAM -3%CPU +26%
BackendDistinct FPSRepeatedPeak RSSSampled CPUStartupFinalizeOutput
Embedded CEF0.897.2%1952 MiB560%441 ms8666 ms0.18 MiB
Playwright17.641.3%2018 MiB445%441 ms635 ms0.27 MiB

How to read this

Method and limits

workload

Local fixture served inside each isolated worker. Static, canvas, DOM-scroll, and multi-page workloads use the same authored flow on both backends.

ordering

One excluded warmup run per backend, then alternating paired trials in fresh worker/browser/encoder process trees.

frame Metric

Canvas and DOM workloads encode monotonically increasing frame IDs into pixels; FFmpeg decodes them from source WebM. Static and multi-page workloads omit cadence scores.

scope

End-to-end silent recording from worker launch through media probing. Native uses CEF/I420/VP9; Playwright uses Chromium screencast MJPEG/VP9. Audio is off because Playwright recording does not expose page-audio capture; embedded recording audio and both live-stream audio paths are verified separately. Streaming performance is outside this recording suite.

resource Metric

200 ms ps samples sum RSS and cumulative CPU across the worker and discovered descendants. CPU percent is sampled CPU seconds divided by total wall time and may exceed 100% across cores.

limitations

RSS can double-count shared pages, short-lived processes can escape sampling, and GPU memory and energy are not measured. Results describe this host and revision, not every website or platform.

Lower RAM, CPU, startup, and finalization are better. Higher distinct FPS is better. Output size is only comparable when cadence is similar. Static and multi-page scenarios intentionally omit pixel cadence because their frames cannot be scored with one continuous source marker. GPU memory is not included.