diff --git a/benchmarks/liveview/.gitignore b/benchmarks/liveview/.gitignore new file mode 100644 index 00000000..ba99195b --- /dev/null +++ b/benchmarks/liveview/.gitignore @@ -0,0 +1 @@ +bench diff --git a/benchmarks/liveview/README.md b/benchmarks/liveview/README.md new file mode 100644 index 00000000..8b3ece9e --- /dev/null +++ b/benchmarks/liveview/README.md @@ -0,0 +1,126 @@ +# Live View Benchmark + +Compares CDP operation latency and resource usage across four image variants: + +| Variant | Branch | Image | Description | +|---|---|---|---| +| `baseline` | `main` | headless | Current production headless (no live view) | +| `approach1` | `feat/headless-live-view` | headless | Xvfb + noVNC live view (PR #174) | +| `approach2` | `headless-cdp-live-view` | headless | CDP screencast live view (PR #176) | +| `headful` | `main` | headful | Full headed browser (reference) | + +## Test sites (15 sites across 5 categories) + +| Category | Sites | +|---|---| +| Static | example.com, httpbin.org, lite.duckduckgo.com | +| Content | Hacker News, Wikipedia, Reuters, Lobsters | +| SPA | Google Maps, GitHub, Reddit | +| Media | Unsplash, BBC News, CNN | +| Complex | Amazon, eBay | + +## CDP operations tested (40+ operations across 9 categories) + +**Navigation** — full page load to each site category + +**Screenshots** — JPEG (q80), PNG, full-page capture, clipped region + +**JS Evaluation** — trivial expression, querySelectorAll count, innerText length, getComputedStyle, scroll to bottom, DOM manipulation (create/remove 100 elements), bounding rect collection + +**DOM** — getDocument at depth 1/5/full, querySelector, getOuterHTML + +**Input** — mouse move, click (press+release), type 21 chars, scroll (5x wheel events) + +**Network** — getCookies, fetch page body via Runtime.evaluate + +**Page** — reload (to load event), getNavigationHistory, getLayoutMetrics, printToPDF + +**Emulation** — set desktop viewport, toggle mobile viewport, set geolocation + +**Target** — getTargets, create+close tab round-trip + +**Composite scenarios** (realistic multi-step automations): +- Navigate + screenshot +- Scrape all links on page +- Inject form + fill + read back +- Click first link + wait for navigation +- 10 rapid screenshots in sequence +- Scroll 5 steps with screenshot at each position + +**Concurrent load test** — N parallel CDP connections all firing screenshots, evaluates, and DOM queries simultaneously for a configurable duration + +## Resource allocation + +Containers are constrained to match production allocations: + +| Type | Memory | CPUs | Variants | +|---|---|---|---| +| Headless | 1024 MB | 4 | baseline, approach1, approach2 | +| Headful | 8192 MB | 8 | headful | + +Override with env vars: + +```bash +HEADLESS_MEMORY=2048m HEADLESS_CPUS=4 HEADFUL_MEMORY=8192m HEADFUL_CPUS=8 ./run.sh +``` + +## Quick start + +```bash +./run.sh + +# Customize +ITERATIONS=5 WARMUP=2 CONCURRENT_WORKERS=5 CONCURRENT_DURATION=60s ./run.sh + +# Skip concurrent test for faster runs +SKIP_CONCURRENT=true ITERATIONS=3 ./run.sh + +# Run specific variants only +VARIANTS="baseline:main:headless: approach2:headless-cdp-live-view:headless:-e=ENABLE_LIVE_VIEW=true=-p=8080:8080" ./run.sh +``` + +## Requirements + +- Docker with BuildKit +- Go 1.25+ +- python3 (for summary table generation; optional) + +## Output + +Results go to `results//`: + +``` +results/20260310-143000/ +├── SUMMARY.md # Combined comparison table +├── baseline/ +│ ├── results.md # Markdown latency table +│ ├── results.json # Machine-readable results +│ ├── docker-stats.csv # CPU/memory time series +│ ├── memory.txt # Idle + post-workload memory snapshots +│ ├── container.log # Full container logs +│ └── bench.log # Benchmark stderr +├── approach1/ +├── approach2/ +└── headful/ +``` + +## Running the Go benchmark standalone + +```bash +cd server +go build -o ../benchmarks/liveview/bench ../benchmarks/liveview/main.go + +# Against an already-running container +../benchmarks/liveview/bench \ + -cdp-url ws://127.0.0.1:9222 \ + -iterations 3 \ + -label mytest \ + -concurrent-workers 3 \ + -concurrent-duration 30s + +# JSON output +../benchmarks/liveview/bench -cdp-url ws://127.0.0.1:9222 -iterations 3 -label mytest -json + +# Quick run without concurrent test +../benchmarks/liveview/bench -cdp-url ws://127.0.0.1:9222 -iterations 2 -skip-concurrent -label quick +``` diff --git a/benchmarks/liveview/main.go b/benchmarks/liveview/main.go new file mode 100644 index 00000000..d558cc46 --- /dev/null +++ b/benchmarks/liveview/main.go @@ -0,0 +1,1078 @@ +package main + +import ( + "context" + "encoding/json" + "flag" + "fmt" + "io" + "log/slog" + "math" + "net/http" + "net/url" + "os" + "sort" + "strings" + "sync" + "time" + + "github.com/coder/websocket" +) + +// --------------------------------------------------------------------------- +// CDP client +// --------------------------------------------------------------------------- + +type cdpMsg struct { + ID int `json:"id"` + Method string `json:"method,omitempty"` + Params json.RawMessage `json:"params,omitempty"` + Result json.RawMessage `json:"result,omitempty"` + SessionID string `json:"sessionId,omitempty"` + Error *struct { + Code int `json:"code"` + Message string `json:"message"` + } `json:"error,omitempty"` +} + +type cdp struct { + ws *websocket.Conn + nextID int + sessionID string // set for session-mode (proxy) connections + log *slog.Logger +} + +func discoverPageWSURL(baseURL string) (string, error) { + resp, err := http.Get(baseURL + "/json/list") + if err != nil { + return "", fmt.Errorf("GET /json/list: %w", err) + } + defer resp.Body.Close() + body, _ := io.ReadAll(resp.Body) + + var targets []struct { + Type string `json:"type"` + WebSocketDebuggerURL string `json:"webSocketDebuggerUrl"` + } + if err := json.Unmarshal(body, &targets); err != nil { + return "", fmt.Errorf("parse /json/list: %w", err) + } + for _, t := range targets { + if t.Type == "page" { + return t.WebSocketDebuggerURL, nil + } + } + return "", fmt.Errorf("no page targets found in %d targets", len(targets)) +} + +func dialCDP(ctx context.Context, url string, log *slog.Logger) (*cdp, error) { + ws, _, err := websocket.Dial(ctx, url, nil) + if err != nil { + return nil, fmt.Errorf("dial %s: %w", url, err) + } + ws.SetReadLimit(64 * 1024 * 1024) + return &cdp{ws: ws, nextID: 1, log: log}, nil +} + +func (c *cdp) call(ctx context.Context, method string, params any) (json.RawMessage, error) { + id := c.nextID + c.nextID++ + + var rawParams json.RawMessage + if params != nil { + b, err := json.Marshal(params) + if err != nil { + return nil, err + } + rawParams = b + } + + outMsg := cdpMsg{ID: id, Method: method, Params: rawParams, SessionID: c.sessionID} + msg, _ := json.Marshal(outMsg) + if err := c.ws.Write(ctx, websocket.MessageText, msg); err != nil { + return nil, fmt.Errorf("write %s: %w", method, err) + } + + for { + _, data, err := c.ws.Read(ctx) + if err != nil { + return nil, fmt.Errorf("read %s: %w", method, err) + } + var resp cdpMsg + if err := json.Unmarshal(data, &resp); err != nil { + continue + } + if resp.ID == id { + if resp.Error != nil { + return nil, fmt.Errorf("CDP %s: code=%d msg=%s", method, resp.Error.Code, resp.Error.Message) + } + return resp.Result, nil + } + } +} + +func (c *cdp) close() { + c.ws.Close(websocket.StatusNormalClosure, "") +} + +// --------------------------------------------------------------------------- +// Stats +// --------------------------------------------------------------------------- + +type stats struct { + samples []time.Duration +} + +func (s *stats) add(d time.Duration) { + s.samples = append(s.samples, d) +} + +func (s *stats) compute() (min, max, median, p95, mean time.Duration) { + n := len(s.samples) + if n == 0 { + return + } + sorted := make([]time.Duration, n) + copy(sorted, s.samples) + sort.Slice(sorted, func(i, j int) bool { return sorted[i] < sorted[j] }) + + min = sorted[0] + max = sorted[n-1] + median = sorted[n/2] + p95 = sorted[int(math.Ceil(float64(n)*0.95))-1] + + var total time.Duration + for _, d := range sorted { + total += d + } + mean = total / time.Duration(n) + return +} + +func fmtDur(d time.Duration) string { + if d < time.Millisecond { + return fmt.Sprintf("%.0fµs", float64(d.Microseconds())) + } + if d < time.Second { + return fmt.Sprintf("%.1fms", float64(d.Microseconds())/1000) + } + return fmt.Sprintf("%.2fs", d.Seconds()) +} + +// --------------------------------------------------------------------------- +// Test sites — diverse mix of page weight, JS complexity, layout +// --------------------------------------------------------------------------- + +type testSite struct { + URL string + Category string // "static", "content", "spa", "media", "complex" +} + +var testSites = []testSite{ + {"https://example.com", "static"}, + {"https://news.ycombinator.com", "content"}, + {"https://en.wikipedia.org/wiki/Web_browser", "content"}, + {"https://github.com/nicknisi/dotfiles", "spa"}, + {"https://www.bbc.com/news", "media"}, +} + +// --------------------------------------------------------------------------- +// Individual benchmark operations +// --------------------------------------------------------------------------- + +type benchOp struct { + Name string + Fn func(ctx context.Context, c *cdp) (time.Duration, error) +} + +func navigateAndWait(ctx context.Context, c *cdp, url string) (time.Duration, error) { + start := time.Now() + _, err := c.call(ctx, "Page.navigate", map[string]string{"url": url}) + if err != nil { + return 0, err + } + waitCtx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + for { + _, data, err := c.ws.Read(waitCtx) + if err != nil { + return time.Since(start), fmt.Errorf("timeout waiting for load: %w", err) + } + var ev cdpMsg + json.Unmarshal(data, &ev) + if ev.Method == "Page.loadEventFired" { + break + } + } + return time.Since(start), nil +} + +func timeCall(ctx context.Context, c *cdp, method string, params any) (time.Duration, error) { + start := time.Now() + _, err := c.call(ctx, method, params) + return time.Since(start), err +} + +func timeCallResult(ctx context.Context, c *cdp, method string, params any) (json.RawMessage, time.Duration, error) { + start := time.Now() + result, err := c.call(ctx, method, params) + return result, time.Since(start), err +} + +func screenshotOps() []benchOp { + return []benchOp{ + {"Screenshot.JPEG.q80", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Page.captureScreenshot", map[string]any{ + "format": "jpeg", "quality": 80, + }) + }}, + {"Screenshot.PNG", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Page.captureScreenshot", map[string]any{ + "format": "png", + }) + }}, + {"Screenshot.FullPage", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Page.captureScreenshot", map[string]any{ + "format": "jpeg", "quality": 80, "captureBeyondViewport": true, + }) + }}, + {"Screenshot.ClipRegion", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Page.captureScreenshot", map[string]any{ + "format": "jpeg", "quality": 80, + "clip": map[string]any{"x": 0, "y": 0, "width": 400, "height": 300, "scale": 1}, + }) + }}, + } +} + +func jsEvalOps() []benchOp { + return []benchOp{ + {"Eval.Trivial", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": "1 + 1", "returnByValue": true, + }) + }}, + {"Eval.QuerySelectorAll", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": "document.querySelectorAll('*').length", "returnByValue": true, + }) + }}, + {"Eval.InnerText", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": "document.body.innerText.length", "returnByValue": true, + }) + }}, + {"Eval.GetComputedStyle", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": "JSON.stringify(window.getComputedStyle(document.body))", + "returnByValue": true, + }) + }}, + {"Eval.ScrollToBottom", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": "window.scrollTo(0, document.body.scrollHeight); window.scrollY", + "returnByValue": true, + }) + }}, + {"Eval.DOMManipulation", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": `(() => { + const div = document.createElement('div'); + div.id = 'bench-test'; + div.innerHTML = '

benchmark

'.repeat(100); + document.body.appendChild(div); + const result = div.children.length; + div.remove(); + return result; + })()`, + "returnByValue": true, + }) + }}, + {"Eval.BoundingRects", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": `(() => { + const els = document.querySelectorAll('a, button, input, [role="button"]'); + const rects = []; + for (let i = 0; i < Math.min(els.length, 50); i++) { + const r = els[i].getBoundingClientRect(); + rects.push({x: r.x, y: r.y, w: r.width, h: r.height}); + } + return rects.length; + })()`, + "returnByValue": true, + }) + }}, + } +} + +func domOps() []benchOp { + return []benchOp{ + {"DOM.GetDocument.Shallow", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "DOM.getDocument", map[string]any{"depth": 1}) + }}, + {"DOM.GetDocument.Deep", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "DOM.getDocument", map[string]any{"depth": 5}) + }}, + {"DOM.GetDocument.Full", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "DOM.getDocument", map[string]any{"depth": -1}) + }}, + {"DOM.QuerySelector", func(ctx context.Context, c *cdp) (time.Duration, error) { + result, _, err := timeCallResult(ctx, c, "DOM.getDocument", map[string]any{"depth": 0}) + if err != nil { + return 0, err + } + var doc struct { + Root struct { + NodeID int `json:"nodeId"` + } `json:"root"` + } + json.Unmarshal(result, &doc) + return timeCall(ctx, c, "DOM.querySelector", map[string]any{ + "nodeId": doc.Root.NodeID, "selector": "body", + }) + }}, + {"DOM.GetOuterHTML", func(ctx context.Context, c *cdp) (time.Duration, error) { + result, _, err := timeCallResult(ctx, c, "DOM.getDocument", map[string]any{"depth": 0}) + if err != nil { + return 0, err + } + var doc struct { + Root struct { + NodeID int `json:"nodeId"` + } `json:"root"` + } + json.Unmarshal(result, &doc) + return timeCall(ctx, c, "DOM.getOuterHTML", map[string]any{ + "nodeId": doc.Root.NodeID, + }) + }}, + } +} + +func inputOps() []benchOp { + return []benchOp{ + {"Input.MouseMove", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Input.dispatchMouseEvent", map[string]any{ + "type": "mouseMoved", "x": 500, "y": 400, + }) + }}, + {"Input.Click", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + c.call(ctx, "Input.dispatchMouseEvent", map[string]any{ + "type": "mousePressed", "x": 500, "y": 400, "button": "left", "clickCount": 1, + }) + _, err := c.call(ctx, "Input.dispatchMouseEvent", map[string]any{ + "type": "mouseReleased", "x": 500, "y": 400, "button": "left", "clickCount": 1, + }) + return time.Since(start), err + }}, + {"Input.TypeText", func(ctx context.Context, c *cdp) (time.Duration, error) { + text := "hello world benchmark" + start := time.Now() + for _, ch := range text { + s := string(ch) + c.call(ctx, "Input.dispatchKeyEvent", map[string]any{ + "type": "keyDown", "key": s, "text": s, + }) + c.call(ctx, "Input.dispatchKeyEvent", map[string]any{ + "type": "keyUp", "key": s, + }) + } + return time.Since(start), nil + }}, + {"Input.Scroll", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + for i := 0; i < 5; i++ { + c.call(ctx, "Input.dispatchMouseEvent", map[string]any{ + "type": "mouseWheel", "x": 500, "y": 400, "deltaX": 0, "deltaY": 300, + }) + } + return time.Since(start), nil + }}, + } +} + +func networkOps() []benchOp { + return []benchOp{ + {"Network.GetCookies", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Network.getCookies", nil) + }}, + {"Network.GetResponseBody", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": "fetch(location.href).then(r => r.text()).then(t => t.length)", + "awaitPromise": true, + "returnByValue": true, + }) + }}, + } +} + +func pageOps() []benchOp { + return []benchOp{ + {"Page.Reload", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + _, err := c.call(ctx, "Page.reload", nil) + if err != nil { + return 0, err + } + waitCtx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + for { + _, data, err := c.ws.Read(waitCtx) + if err != nil { + return time.Since(start), nil + } + var ev cdpMsg + json.Unmarshal(data, &ev) + if ev.Method == "Page.loadEventFired" { + break + } + } + return time.Since(start), nil + }}, + {"Page.GetNavigationHistory", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Page.getNavigationHistory", nil) + }}, + {"Page.GetLayoutMetrics", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Page.getLayoutMetrics", nil) + }}, + {"Page.PrintToPDF", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Page.printToPDF", map[string]any{ + "landscape": false, "printBackground": true, + }) + }}, + } +} + +func emulationOps() []benchOp { + return []benchOp{ + {"Emulation.SetViewport", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Emulation.setDeviceMetricsOverride", map[string]any{ + "width": 1920, "height": 1080, "deviceScaleFactor": 1, "mobile": false, + }) + }}, + {"Emulation.SetMobile", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + c.call(ctx, "Emulation.setDeviceMetricsOverride", map[string]any{ + "width": 375, "height": 812, "deviceScaleFactor": 3, "mobile": true, + }) + // Reset back + _, err := c.call(ctx, "Emulation.setDeviceMetricsOverride", map[string]any{ + "width": 1920, "height": 1080, "deviceScaleFactor": 1, "mobile": false, + }) + return time.Since(start), err + }}, + {"Emulation.SetGeolocation", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Emulation.setGeolocationOverride", map[string]any{ + "latitude": 37.7749, "longitude": -122.4194, "accuracy": 100, + }) + }}, + } +} + +func targetOps() []benchOp { + return []benchOp{ + {"Target.GetTargets", func(ctx context.Context, c *cdp) (time.Duration, error) { + return timeCall(ctx, c, "Target.getTargets", nil) + }}, + {"Target.CreateAndClose", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + result, err := c.call(ctx, "Target.createTarget", map[string]string{ + "url": "about:blank", + }) + if err != nil { + return 0, err + } + var created struct { + TargetID string `json:"targetId"` + } + json.Unmarshal(result, &created) + if created.TargetID != "" { + c.call(ctx, "Target.closeTarget", map[string]string{ + "targetId": created.TargetID, + }) + } + return time.Since(start), nil + }}, + } +} + +// Composite scenarios that chain multiple CDP calls like a real automation would. +func compositeOps() []benchOp { + return []benchOp{ + {"Composite.NavAndScreenshot", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + _, err := c.call(ctx, "Page.navigate", map[string]string{"url": "https://example.com"}) + if err != nil { + return 0, err + } + waitCtx, cancel := context.WithTimeout(ctx, 30*time.Second) + defer cancel() + for { + _, data, err := c.ws.Read(waitCtx) + if err != nil { + break + } + var ev cdpMsg + json.Unmarshal(data, &ev) + if ev.Method == "Page.loadEventFired" { + break + } + } + c.call(ctx, "Page.captureScreenshot", map[string]any{ + "format": "jpeg", "quality": 80, + }) + return time.Since(start), nil + }}, + {"Composite.ScrapeLinks", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": `Array.from(document.querySelectorAll('a[href]')).map(a => ({ + text: a.textContent.trim().slice(0, 100), + href: a.href + }))`, + "returnByValue": true, + }) + return time.Since(start), nil + }}, + {"Composite.FillForm", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + // Inject a form, fill it, read it back + c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": `(() => { + const form = document.createElement('form'); + form.id = 'bench-form'; + form.innerHTML = ''; + document.body.appendChild(form); + })()`, + }) + c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": `document.querySelector('#bench-form input[name="email"]').value = "test@example.com"`, + }) + c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": `document.querySelector('#bench-form input[name="pass"]').value = "hunter2"`, + }) + _, err := c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": `document.querySelector('#bench-form input[name="email"]').value`, + "returnByValue": true, + }) + // Cleanup + c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": `document.querySelector('#bench-form')?.remove()`, + }) + return time.Since(start), err + }}, + {"Composite.ClickAndWait", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + // Find first link, click it, wait for navigation + c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": `(() => { + const link = document.querySelector('a[href^="http"]'); + if (link) link.click(); + })()`, + }) + waitCtx, cancel := context.WithTimeout(ctx, 10*time.Second) + defer cancel() + for { + _, data, err := c.ws.Read(waitCtx) + if err != nil { + break + } + var ev cdpMsg + json.Unmarshal(data, &ev) + if ev.Method == "Page.loadEventFired" || ev.Method == "Page.frameNavigated" { + break + } + } + return time.Since(start), nil + }}, + {"Composite.RapidScreenshots", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + for i := 0; i < 10; i++ { + c.call(ctx, "Page.captureScreenshot", map[string]any{ + "format": "jpeg", "quality": 60, + }) + } + return time.Since(start), nil + }}, + {"Composite.ScrollAndCapture", func(ctx context.Context, c *cdp) (time.Duration, error) { + start := time.Now() + for i := 0; i < 5; i++ { + c.call(ctx, "Runtime.evaluate", map[string]any{ + "expression": fmt.Sprintf("window.scrollTo(0, %d); window.scrollY", i*500), + "returnByValue": true, + }) + time.Sleep(50 * time.Millisecond) + c.call(ctx, "Page.captureScreenshot", map[string]any{ + "format": "jpeg", "quality": 80, + }) + } + return time.Since(start), nil + }}, + } +} + +// --------------------------------------------------------------------------- +// Benchmark runner +// --------------------------------------------------------------------------- + +type benchResult struct { + Category string + Op string + Stats *stats +} + +func allOps() []struct { + category string + ops []benchOp +} { + return []struct { + category string + ops []benchOp + }{ + {"Screenshot", screenshotOps()}, + {"JS Evaluation", jsEvalOps()}, + {"DOM", domOps()}, + {"Input", inputOps()}, + {"Network", networkOps()}, + {"Page", pageOps()}, + {"Emulation", emulationOps()}, + {"Target", targetOps()}, + {"Composite", compositeOps()}, + } +} + +func enableDomains(ctx context.Context, c *cdp) { + c.call(ctx, "Page.enable", nil) + c.call(ctx, "DOM.enable", nil) + c.call(ctx, "Runtime.enable", nil) + c.call(ctx, "Network.enable", nil) +} + +func runBenchmark(ctx context.Context, c *cdp, iterations int, log *slog.Logger) []benchResult { + enableDomains(ctx, c) + + var results []benchResult + categories := allOps() + + for siteIdx := 0; siteIdx < len(testSites); siteIdx++ { + site := testSites[siteIdx] + log.Info("navigating to test site", "url", site.URL, "category", site.Category) + + d, err := navigateAndWait(ctx, c, site.URL) + if err != nil { + log.Error("navigate failed, skipping site", "url", site.URL, "error", err) + continue + } + + navKey := fmt.Sprintf("Navigate[%s]", site.Category) + found := false + for i := range results { + if results[i].Op == navKey { + results[i].Stats.add(d) + found = true + break + } + } + if !found { + s := &stats{} + s.add(d) + results = append(results, benchResult{Category: "Navigation", Op: navKey, Stats: s}) + } + + time.Sleep(500 * time.Millisecond) + + for _, cat := range categories { + for _, op := range cat.ops { + key := op.Name + var st *stats + for i := range results { + if results[i].Op == key { + st = results[i].Stats + break + } + } + if st == nil { + st = &stats{} + results = append(results, benchResult{Category: cat.category, Op: key, Stats: st}) + } + + d, err := op.Fn(ctx, c) + if err != nil { + log.Warn("op failed", "op", key, "site", site.URL, "error", err) + continue + } + st.add(d) + } + } + } + + // Run extra iterations cycling through sites + for iter := 1; iter < iterations; iter++ { + site := testSites[iter%len(testSites)] + log.Info("iteration", "i", iter+1, "of", iterations, "url", site.URL) + + d, err := navigateAndWait(ctx, c, site.URL) + if err != nil { + log.Error("navigate failed", "error", err) + continue + } + navKey := fmt.Sprintf("Navigate[%s]", site.Category) + for i := range results { + if results[i].Op == navKey { + results[i].Stats.add(d) + break + } + } + + time.Sleep(300 * time.Millisecond) + + for _, cat := range categories { + for _, op := range cat.ops { + for i := range results { + if results[i].Op == op.Name { + d, err := op.Fn(ctx, c) + if err != nil { + continue + } + results[i].Stats.add(d) + break + } + } + } + } + } + + return results +} + +// --------------------------------------------------------------------------- +// Concurrent load test — fire CDP calls in parallel to stress-test contention +// --------------------------------------------------------------------------- + +func runConcurrentBench(ctx context.Context, cdpBase string, sessionMode bool, workers int, duration time.Duration, log *slog.Logger) []benchResult { + type sample struct { + op string + d time.Duration + } + + var mu sync.Mutex + var allSamples []sample + deadline := time.Now().Add(duration) + + var wg sync.WaitGroup + for w := 0; w < workers; w++ { + wg.Add(1) + go func(workerID int) { + defer wg.Done() + var c *cdp + var err error + if sessionMode { + c, err = connectViaSession(ctx, cdpBase, log) + } else { + c, err = connectToPage(ctx, cdpBase, log) + } + if err != nil { + log.Error("worker dial failed", "worker", workerID, "error", err) + return + } + defer c.close() + enableDomains(ctx, c) + + for time.Now().Before(deadline) { + d, err := timeCall(ctx, c, "Page.captureScreenshot", map[string]any{ + "format": "jpeg", "quality": 80, + }) + if err == nil { + mu.Lock() + allSamples = append(allSamples, sample{"Concurrent.Screenshot", d}) + mu.Unlock() + } + + d, err = timeCall(ctx, c, "Runtime.evaluate", map[string]any{ + "expression": "document.title", "returnByValue": true, + }) + if err == nil { + mu.Lock() + allSamples = append(allSamples, sample{"Concurrent.Evaluate", d}) + mu.Unlock() + } + + d, err = timeCall(ctx, c, "DOM.getDocument", map[string]any{"depth": 2}) + if err == nil { + mu.Lock() + allSamples = append(allSamples, sample{"Concurrent.DOM", d}) + mu.Unlock() + } + } + }(w) + } + wg.Wait() + + grouped := map[string]*stats{} + for _, s := range allSamples { + if grouped[s.op] == nil { + grouped[s.op] = &stats{} + } + grouped[s.op].add(s.d) + } + + var results []benchResult + for op, st := range grouped { + results = append(results, benchResult{Category: "Concurrent", Op: op, Stats: st}) + } + sort.Slice(results, func(i, j int) bool { return results[i].Op < results[j].Op }) + return results +} + +// --------------------------------------------------------------------------- +// Output +// --------------------------------------------------------------------------- + +func printTable(label string, results []benchResult) { + fmt.Printf("\n## %s\n\n", label) + + currentCat := "" + fmt.Printf("| %-32s | %9s | %9s | %9s | %9s | %9s | %5s |\n", + "Operation", "Min", "Median", "Mean", "P95", "Max", "N") + fmt.Printf("|%s|%s|%s|%s|%s|%s|%s|\n", + strings.Repeat("-", 34), + strings.Repeat("-", 11), + strings.Repeat("-", 11), + strings.Repeat("-", 11), + strings.Repeat("-", 11), + strings.Repeat("-", 11), + strings.Repeat("-", 7)) + + for _, r := range results { + if r.Category != currentCat { + currentCat = r.Category + fmt.Printf("| **%-30s** | %9s | %9s | %9s | %9s | %9s | %5s |\n", + currentCat, "", "", "", "", "", "") + } + s := r.Stats + if len(s.samples) == 0 { + continue + } + min, max, median, p95, mean := s.compute() + fmt.Printf("| %-32s | %9s | %9s | %9s | %9s | %9s | %5d |\n", + r.Op, fmtDur(min), fmtDur(median), fmtDur(mean), fmtDur(p95), fmtDur(max), len(s.samples)) + } +} + +type jsonOpResult struct { + Category string `json:"category"` + Op string `json:"operation"` + N int `json:"n"` + MinMs float64 `json:"min_ms"` + MedianMs float64 `json:"median_ms"` + MeanMs float64 `json:"mean_ms"` + P95Ms float64 `json:"p95_ms"` + MaxMs float64 `json:"max_ms"` +} + +func printJSON(label string, results []benchResult) { + out := struct { + Label string `json:"label"` + Results []jsonOpResult `json:"results"` + }{Label: label} + + for _, r := range results { + s := r.Stats + if len(s.samples) == 0 { + continue + } + min, max, median, p95, mean := s.compute() + out.Results = append(out.Results, jsonOpResult{ + Category: r.Category, + Op: r.Op, + N: len(s.samples), + MinMs: float64(min.Microseconds()) / 1000, + MedianMs: float64(median.Microseconds()) / 1000, + MeanMs: float64(mean.Microseconds()) / 1000, + P95Ms: float64(p95.Microseconds()) / 1000, + MaxMs: float64(max.Microseconds()) / 1000, + }) + } + + b, _ := json.MarshalIndent(out, "", " ") + fmt.Println(string(b)) +} + +// --------------------------------------------------------------------------- +// Main +// --------------------------------------------------------------------------- + +func connectToPage(ctx context.Context, baseURL string, log *slog.Logger) (*cdp, error) { + pageWS, err := discoverPageWSURL(baseURL) + if err != nil { + return nil, fmt.Errorf("discover page target: %w", err) + } + log.Info("discovered page target", "ws", pageWS) + return dialCDP(ctx, pageWS, log) +} + +// connectViaSession connects to the browser-level WS and uses Target.attachToTarget +// to get a session. This works through the kernel-images-api proxy which doesn't +// route page-level WS connections properly. +func connectViaSession(ctx context.Context, baseURL string, log *slog.Logger) (*cdp, error) { + resp, err := http.Get(baseURL + "/json/version") + if err != nil { + return nil, fmt.Errorf("GET /json/version: %w", err) + } + defer resp.Body.Close() + body, _ := io.ReadAll(resp.Body) + + var ver struct { + WebSocketDebuggerURL string `json:"webSocketDebuggerUrl"` + } + if err := json.Unmarshal(body, &ver); err != nil { + return nil, fmt.Errorf("parse /json/version: %w", err) + } + + // The returned WS URL may reference 127.0.0.1 but we might be connecting + // via an external TLS endpoint (e.g. KraftCloud). Rewrite the WS URL to + // use the same host/scheme as baseURL. + wsURL := ver.WebSocketDebuggerURL + base, _ := url.Parse(baseURL) + parsed, _ := url.Parse(wsURL) + if base != nil && parsed != nil { + rewrite := false + if base.Hostname() != parsed.Hostname() { + parsed.Host = base.Host + rewrite = true + } + if base.Scheme == "https" && parsed.Scheme == "ws" { + parsed.Scheme = "wss" + rewrite = true + } + if rewrite { + wsURL = parsed.String() + log.Info("rewrote WS URL for remote access", "original", ver.WebSocketDebuggerURL, "rewritten", wsURL) + } + } + + c, err := dialCDP(ctx, wsURL, log) + if err != nil { + return nil, err + } + log.Info("connected to browser WS", "url", wsURL) + + // Get page targets + result, err := c.call(ctx, "Target.getTargets", nil) + if err != nil { + c.close() + return nil, fmt.Errorf("Target.getTargets: %w", err) + } + var targetsResp struct { + TargetInfos []struct { + TargetID string `json:"targetId"` + Type string `json:"type"` + } `json:"targetInfos"` + } + json.Unmarshal(result, &targetsResp) + + var pageTargetID string + for _, t := range targetsResp.TargetInfos { + if t.Type == "page" { + pageTargetID = t.TargetID + break + } + } + if pageTargetID == "" { + c.close() + return nil, fmt.Errorf("no page target found") + } + log.Info("found page target", "id", pageTargetID) + + // Attach to target; flatten=true so commands can include sessionId at top level + result, err = c.call(ctx, "Target.attachToTarget", map[string]any{ + "targetId": pageTargetID, + "flatten": true, + }) + if err != nil { + c.close() + return nil, fmt.Errorf("Target.attachToTarget: %w", err) + } + var attachResp struct { + SessionID string `json:"sessionId"` + } + json.Unmarshal(result, &attachResp) + if attachResp.SessionID == "" { + c.close() + return nil, fmt.Errorf("no session ID in attach response") + } + + c.sessionID = attachResp.SessionID + log.Info("attached to page session", "sessionId", c.sessionID) + return c, nil +} + +func main() { + cdpBase := flag.String("cdp-url", "http://127.0.0.1:9222", "HTTP base URL for CDP (used to discover page targets)") + sessionMode := flag.Bool("session-mode", false, "Use Target.attachToTarget session mode (for proxied CDP)") + iterations := flag.Int("iterations", 3, "Number of full site rotation iterations") + label := flag.String("label", "benchmark", "Label for this run") + outputJSON := flag.Bool("json", false, "Output as JSON") + warmup := flag.Int("warmup", 1, "Warmup iterations (discarded)") + concurrentWorkers := flag.Int("concurrent-workers", 3, "Number of parallel CDP connections for concurrent test") + concurrentDuration := flag.Duration("concurrent-duration", 30*time.Second, "Duration of concurrent load test") + skipConcurrent := flag.Bool("skip-concurrent", false, "Skip the concurrent load test") + flag.Parse() + + log := slog.New(slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{Level: slog.LevelInfo})) + + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Minute) + defer cancel() + + connect := func(ctx context.Context) (*cdp, error) { + if *sessionMode { + return connectViaSession(ctx, *cdpBase, log) + } + return connectToPage(ctx, *cdpBase, log) + } + + log.Info("connecting to CDP", "base", *cdpBase, "sessionMode", *sessionMode) + c, err := connect(ctx) + if err != nil { + log.Error("failed to connect", "error", err) + os.Exit(1) + } + defer c.close() + log.Info("connected", "sites", len(testSites), "iterations", *iterations) + + // Warmup + if *warmup > 0 { + log.Info("warmup", "iterations", *warmup) + runBenchmark(ctx, c, *warmup, log) + c.close() + time.Sleep(time.Second) + c, err = connect(ctx) + if err != nil { + log.Error("reconnect failed", "error", err) + os.Exit(1) + } + defer c.close() + } + + // Sequential benchmark + log.Info("starting sequential benchmark", "iterations", *iterations, "label", *label) + results := runBenchmark(ctx, c, *iterations, log) + + // Concurrent benchmark + if !*skipConcurrent { + c.call(ctx, "Page.enable", nil) + navigateAndWait(ctx, c, "https://en.wikipedia.org/wiki/Web_browser") + time.Sleep(time.Second) + + log.Info("starting concurrent benchmark", "workers", *concurrentWorkers, "duration", *concurrentDuration) + concResults := runConcurrentBench(ctx, *cdpBase, *sessionMode, *concurrentWorkers, *concurrentDuration, log) + results = append(results, concResults...) + } + + if *outputJSON { + printJSON(*label, results) + } else { + printTable(*label, results) + } +} diff --git a/benchmarks/liveview/results/20260310-172933/SUMMARY.md b/benchmarks/liveview/results/20260310-172933/SUMMARY.md new file mode 100644 index 00000000..d8c2cecc --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/SUMMARY.md @@ -0,0 +1,360 @@ +# Live View Benchmark Results + +Date: Tue Mar 10 05:41:40 PM EDT 2026 +Iterations: 2 (warmup: 1) + +### Resource Allocation +| Type | Memory | CPUs | +|---|---|---| +| Headless | 1024m | 4 | +| Headful | 8192m | 8 | + + +## baseline + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 22.7ms | 22.7ms | 22.7ms | 22.7ms | 22.7ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 48.6ms | 65.4ms | 100.9ms | 305.8ms | 305.8ms | 6 | +| Screenshot.PNG | 62.5ms | 112.2ms | 120.3ms | 215.2ms | 215.2ms | 6 | +| Screenshot.FullPage | 67.1ms | 462.7ms | 375.6ms | 841.0ms | 841.0ms | 6 | +| Screenshot.ClipRegion | 24.5ms | 36.3ms | 82.6ms | 229.0ms | 229.0ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 511µs | 570µs | 12.8ms | 70.4ms | 70.4ms | 6 | +| Eval.QuerySelectorAll | 311µs | 401µs | 12.1ms | 70.7ms | 70.7ms | 6 | +| Eval.InnerText | 482µs | 742µs | 1.3ms | 3.8ms | 3.8ms | 6 | +| Eval.GetComputedStyle | 3.9ms | 4.5ms | 5.2ms | 9.8ms | 9.8ms | 6 | +| Eval.ScrollToBottom | 284µs | 371µs | 426µs | 774µs | 774µs | 6 | +| Eval.DOMManipulation | 497µs | 629µs | 660µs | 1.0ms | 1.0ms | 6 | +| Eval.BoundingRects | 428µs | 829µs | 840µs | 1.5ms | 1.5ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 228µs | 295µs | 752µs | 3.1ms | 3.1ms | 6 | +| DOM.GetDocument.Deep | 272µs | 3.0ms | 2.4ms | 5.6ms | 5.6ms | 6 | +| DOM.GetDocument.Full | 231µs | 28.6ms | 22.5ms | 58.1ms | 58.1ms | 6 | +| DOM.QuerySelector | 207µs | 291µs | 1.7ms | 9.1ms | 9.1ms | 6 | +| DOM.GetOuterHTML | 171µs | 20.8ms | 12.3ms | 27.1ms | 27.1ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 1.3ms | 6.9ms | 7.1ms | 12.6ms | 12.6ms | 6 | +| Input.Click | 948µs | 3.1ms | 6.9ms | 28.5ms | 28.5ms | 6 | +| Input.TypeText | 7.4ms | 9.8ms | 70.3ms | 201.0ms | 201.0ms | 6 | +| Input.Scroll | 72.7ms | 81.6ms | 95.0ms | 156.0ms | 156.0ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 400µs | 635µs | 1.1ms | 3.4ms | 3.4ms | 6 | +| Network.GetResponseBody | 4.6ms | 66.1ms | 145.9ms | 667.6ms | 667.6ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 27.7ms | 158.3ms | 364.0ms | 1.27s | 1.27s | 6 | +| Page.GetNavigationHistory | 1.0ms | 1.2ms | 1.5ms | 3.5ms | 3.5ms | 6 | +| Page.GetLayoutMetrics | 390µs | 4.2ms | 9.0ms | 34.9ms | 34.9ms | 6 | +| Page.PrintToPDF | 30.0ms | 237.8ms | 373.9ms | 1.56s | 1.56s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 268µs | 469µs | 417µs | 548µs | 548µs | 6 | +| Emulation.SetMobile | 1.3ms | 114.4ms | 126.1ms | 457.8ms | 457.8ms | 6 | +| Emulation.SetGeolocation | 95µs | 173µs | 163µs | 221µs | 221µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 115µs | 143µs | 137µs | 150µs | 150µs | 6 | +| Target.CreateAndClose | 10.7ms | 14.7ms | 14.9ms | 20.2ms | 20.2ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 98.7ms | 135.3ms | 158.4ms | 282.8ms | 282.8ms | 6 | +| Composite.ScrapeLinks | 3.5ms | 4.0ms | 3.9ms | 4.5ms | 4.5ms | 6 | +| Composite.FillForm | 5.4ms | 7.9ms | 7.3ms | 8.8ms | 8.8ms | 6 | +| Composite.ClickAndWait | 22.5ms | 26.3ms | 25.2ms | 27.4ms | 27.4ms | 6 | +| Composite.RapidScreenshots | 594.7ms | 647.1ms | 643.8ms | 682.5ms | 682.5ms | 6 | +| Composite.ScrollAndCapture | 499.3ms | 502.9ms | 505.6ms | 523.3ms | 523.3ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 106.7ms | 111.8ms | 166.3ms | 280.3ms | 280.3ms | 3 | +| Navigate[spa] | 1.44s | 1.44s | 1.44s | 1.44s | 1.44s | 1 | +| Navigate[media] | 1.52s | 1.52s | 1.52s | 1.52s | 1.52s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 200µs | 365µs | 383µs | 599µs | 927µs | 471 | +| Concurrent.Evaluate | 192µs | 21.2ms | 20.7ms | 42.1ms | 53.6ms | 471 | +| Concurrent.Screenshot | 56.9ms | 107.0ms | 106.8ms | 134.1ms | 148.9ms | 471 | + +### baseline — Resource Usage +``` +config_memory: 1024m +config_cpus: 4 +image_type: headless +idle: 198.8MiB / 1GiB +after-workload: 274.2MiB / 1GiB +image_size: 2.1GB +``` + + +## approach1 + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 55.3ms | 55.3ms | 55.3ms | 55.3ms | 55.3ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 53.5ms | 85.4ms | 88.9ms | 156.9ms | 156.9ms | 6 | +| Screenshot.PNG | 86.7ms | 127.3ms | 194.9ms | 553.6ms | 553.6ms | 6 | +| Screenshot.FullPage | 75.2ms | 422.1ms | 367.6ms | 993.0ms | 993.0ms | 6 | +| Screenshot.ClipRegion | 29.0ms | 37.9ms | 116.9ms | 325.3ms | 325.3ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 402µs | 778µs | 37.6ms | 154.6ms | 154.6ms | 6 | +| Eval.QuerySelectorAll | 332µs | 542µs | 15.0ms | 76.9ms | 76.9ms | 6 | +| Eval.InnerText | 441µs | 2.0ms | 3.2ms | 12.3ms | 12.3ms | 6 | +| Eval.GetComputedStyle | 4.2ms | 5.1ms | 7.0ms | 16.1ms | 16.1ms | 6 | +| Eval.ScrollToBottom | 352µs | 413µs | 3.7ms | 20.4ms | 20.4ms | 6 | +| Eval.DOMManipulation | 530µs | 681µs | 1.1ms | 3.6ms | 3.6ms | 6 | +| Eval.BoundingRects | 493µs | 997µs | 983µs | 2.1ms | 2.1ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 232µs | 275µs | 1.1ms | 5.2ms | 5.2ms | 6 | +| DOM.GetDocument.Deep | 332µs | 3.1ms | 3.4ms | 10.8ms | 10.8ms | 6 | +| DOM.GetDocument.Full | 456µs | 18.7ms | 21.4ms | 54.0ms | 54.0ms | 6 | +| DOM.QuerySelector | 247µs | 336µs | 6.1ms | 35.1ms | 35.1ms | 6 | +| DOM.GetOuterHTML | 253µs | 22.7ms | 12.8ms | 24.9ms | 24.9ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 978µs | 9.7ms | 8.5ms | 15.7ms | 15.7ms | 6 | +| Input.Click | 1.1ms | 4.1ms | 6.6ms | 23.3ms | 23.3ms | 6 | +| Input.TypeText | 8.7ms | 10.7ms | 72.7ms | 206.9ms | 206.9ms | 6 | +| Input.Scroll | 71.7ms | 81.9ms | 93.6ms | 163.5ms | 163.5ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 312µs | 603µs | 4.4ms | 21.5ms | 21.5ms | 6 | +| Network.GetResponseBody | 3.0ms | 58.6ms | 42.2ms | 69.1ms | 69.1ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 53.1ms | 176.0ms | 379.8ms | 1.13s | 1.13s | 6 | +| Page.GetNavigationHistory | 749µs | 1.4ms | 1.4ms | 1.6ms | 1.6ms | 6 | +| Page.GetLayoutMetrics | 378µs | 2.8ms | 23.6ms | 116.8ms | 116.8ms | 6 | +| Page.PrintToPDF | 31.6ms | 223.2ms | 425.2ms | 1.89s | 1.89s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 275µs | 329µs | 742µs | 2.7ms | 2.7ms | 6 | +| Emulation.SetMobile | 1.4ms | 104.7ms | 122.8ms | 430.9ms | 430.9ms | 6 | +| Emulation.SetGeolocation | 95µs | 179µs | 250µs | 701µs | 701µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 93µs | 140µs | 149µs | 260µs | 260µs | 6 | +| Target.CreateAndClose | 11.9ms | 19.9ms | 18.7ms | 23.0ms | 23.0ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 121.4ms | 159.0ms | 175.2ms | 266.0ms | 266.0ms | 6 | +| Composite.ScrapeLinks | 4.0ms | 4.8ms | 4.6ms | 4.9ms | 4.9ms | 6 | +| Composite.FillForm | 5.6ms | 8.4ms | 7.4ms | 8.7ms | 8.7ms | 6 | +| Composite.ClickAndWait | 22.4ms | 25.5ms | 25.9ms | 31.5ms | 31.5ms | 6 | +| Composite.RapidScreenshots | 726.7ms | 869.1ms | 829.0ms | 975.5ms | 975.5ms | 6 | +| Composite.ScrollAndCapture | 612.2ms | 670.0ms | 656.1ms | 683.5ms | 683.5ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 118.7ms | 235.0ms | 215.4ms | 292.4ms | 292.4ms | 3 | +| Navigate[spa] | 1.50s | 1.50s | 1.50s | 1.50s | 1.50s | 1 | +| Navigate[media] | 1.13s | 1.13s | 1.13s | 1.13s | 1.13s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 226µs | 367µs | 768µs | 818µs | 29.3ms | 450 | +| Concurrent.Evaluate | 203µs | 948µs | 10.4ms | 39.6ms | 44.6ms | 450 | +| Concurrent.Screenshot | 69.7ms | 122.7ms | 122.3ms | 155.0ms | 184.4ms | 450 | + +### approach1 — Resource Usage +``` +config_memory: 1024m +config_cpus: 4 +image_type: headless +idle: 268MiB / 1GiB +after-workload: 279.1MiB / 1GiB +image_size: 2.22GB +``` + + +## approach2 + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 23.9ms | 23.9ms | 23.9ms | 23.9ms | 23.9ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 51.6ms | 71.8ms | 122.9ms | 392.8ms | 392.8ms | 6 | +| Screenshot.PNG | 79.3ms | 111.8ms | 125.9ms | 219.7ms | 219.7ms | 6 | +| Screenshot.FullPage | 69.8ms | 478.3ms | 372.2ms | 824.2ms | 824.2ms | 6 | +| Screenshot.ClipRegion | 24.9ms | 38.4ms | 93.9ms | 223.2ms | 223.2ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 461µs | 540µs | 12.4ms | 71.3ms | 71.3ms | 6 | +| Eval.QuerySelectorAll | 291µs | 457µs | 483µs | 886µs | 886µs | 6 | +| Eval.InnerText | 461µs | 917µs | 12.9ms | 72.0ms | 72.0ms | 6 | +| Eval.GetComputedStyle | 4.2ms | 4.8ms | 6.1ms | 12.9ms | 12.9ms | 6 | +| Eval.ScrollToBottom | 312µs | 382µs | 405µs | 604µs | 604µs | 6 | +| Eval.DOMManipulation | 514µs | 677µs | 765µs | 1.2ms | 1.2ms | 6 | +| Eval.BoundingRects | 495µs | 834µs | 841µs | 1.2ms | 1.2ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 229µs | 288µs | 745µs | 3.1ms | 3.1ms | 6 | +| DOM.GetDocument.Deep | 289µs | 2.2ms | 2.6ms | 6.4ms | 6.4ms | 6 | +| DOM.GetDocument.Full | 269µs | 22.2ms | 21.6ms | 54.2ms | 54.2ms | 6 | +| DOM.QuerySelector | 230µs | 338µs | 1.7ms | 8.5ms | 8.5ms | 6 | +| DOM.GetOuterHTML | 196µs | 21.9ms | 13.0ms | 26.4ms | 26.4ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 1.9ms | 7.3ms | 7.3ms | 13.6ms | 13.6ms | 6 | +| Input.Click | 1.3ms | 3.3ms | 6.3ms | 24.5ms | 24.5ms | 6 | +| Input.TypeText | 8.8ms | 9.4ms | 69.5ms | 215.8ms | 215.8ms | 6 | +| Input.Scroll | 69.9ms | 73.1ms | 94.6ms | 158.7ms | 158.7ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 299µs | 477µs | 718µs | 2.2ms | 2.2ms | 6 | +| Network.GetResponseBody | 3.7ms | 55.4ms | 77.5ms | 286.2ms | 286.2ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 33.6ms | 153.5ms | 388.9ms | 1.17s | 1.17s | 6 | +| Page.GetNavigationHistory | 854µs | 1.5ms | 1.5ms | 2.9ms | 2.9ms | 6 | +| Page.GetLayoutMetrics | 392µs | 3.2ms | 23.9ms | 115.8ms | 115.8ms | 6 | +| Page.PrintToPDF | 37.7ms | 227.2ms | 329.0ms | 1.31s | 1.31s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 225µs | 378µs | 352µs | 557µs | 557µs | 6 | +| Emulation.SetMobile | 1.3ms | 97.6ms | 109.8ms | 387.0ms | 387.0ms | 6 | +| Emulation.SetGeolocation | 114µs | 184µs | 182µs | 248µs | 248µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 113µs | 148µs | 148µs | 176µs | 176µs | 6 | +| Target.CreateAndClose | 14.6ms | 17.6ms | 17.2ms | 23.5ms | 23.5ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 105.5ms | 128.1ms | 170.4ms | 366.7ms | 366.7ms | 6 | +| Composite.ScrapeLinks | 3.3ms | 3.6ms | 3.6ms | 4.0ms | 4.0ms | 6 | +| Composite.FillForm | 5.1ms | 6.9ms | 6.5ms | 7.5ms | 7.5ms | 6 | +| Composite.ClickAndWait | 20.9ms | 28.0ms | 25.4ms | 29.0ms | 29.0ms | 6 | +| Composite.RapidScreenshots | 535.0ms | 683.1ms | 658.0ms | 709.5ms | 709.5ms | 6 | +| Composite.ScrollAndCapture | 497.7ms | 538.5ms | 522.7ms | 557.3ms | 557.3ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 107.0ms | 109.5ms | 146.5ms | 223.1ms | 223.1ms | 3 | +| Navigate[spa] | 1.33s | 1.33s | 1.33s | 1.33s | 1.33s | 1 | +| Navigate[media] | 1.63s | 1.63s | 1.63s | 1.63s | 1.63s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 191µs | 362µs | 383µs | 576µs | 2.3ms | 480 | +| Concurrent.Evaluate | 199µs | 19.7ms | 19.8ms | 41.5ms | 46.9ms | 480 | +| Concurrent.Screenshot | 60.7ms | 105.2ms | 105.1ms | 132.6ms | 143.5ms | 480 | + +### approach2 — Resource Usage +``` +config_memory: 1024m +config_cpus: 4 +image_type: headless +idle: 194.7MiB / 1GiB +after-workload: 343.1MiB / 1GiB +image_size: 2.11GB +``` + + +## headful + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 28.9ms | 28.9ms | 28.9ms | 28.9ms | 28.9ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 66.7ms | 104.5ms | 102.6ms | 187.6ms | 187.6ms | 6 | +| Screenshot.PNG | 133.9ms | 166.7ms | 177.9ms | 272.2ms | 272.2ms | 6 | +| Screenshot.FullPage | 102.6ms | 395.8ms | 320.5ms | 701.5ms | 701.5ms | 6 | +| Screenshot.ClipRegion | 76.1ms | 90.3ms | 154.8ms | 371.2ms | 371.2ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 502µs | 671µs | 14.3ms | 66.3ms | 66.3ms | 6 | +| Eval.QuerySelectorAll | 361µs | 447µs | 14.0ms | 70.7ms | 70.7ms | 6 | +| Eval.InnerText | 477µs | 1.0ms | 2.6ms | 10.8ms | 10.8ms | 6 | +| Eval.GetComputedStyle | 4.1ms | 4.5ms | 5.7ms | 10.6ms | 10.6ms | 6 | +| Eval.ScrollToBottom | 330µs | 501µs | 666µs | 1.9ms | 1.9ms | 6 | +| Eval.DOMManipulation | 517µs | 634µs | 682µs | 974µs | 974µs | 6 | +| Eval.BoundingRects | 427µs | 736µs | 869µs | 1.7ms | 1.7ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 221µs | 287µs | 845µs | 3.7ms | 3.7ms | 6 | +| DOM.GetDocument.Deep | 308µs | 2.2ms | 2.2ms | 5.6ms | 5.6ms | 6 | +| DOM.GetDocument.Full | 250µs | 25.4ms | 21.3ms | 53.0ms | 53.0ms | 6 | +| DOM.QuerySelector | 225µs | 317µs | 1.3ms | 6.3ms | 6.3ms | 6 | +| DOM.GetOuterHTML | 238µs | 23.0ms | 14.8ms | 32.3ms | 32.3ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 2.0ms | 12.0ms | 12.3ms | 23.9ms | 23.9ms | 6 | +| Input.Click | 1.2ms | 3.3ms | 7.1ms | 28.4ms | 28.4ms | 6 | +| Input.TypeText | 8.7ms | 9.8ms | 25.8ms | 100.3ms | 100.3ms | 6 | +| Input.Scroll | 188.5ms | 198.3ms | 345.4ms | 999.5ms | 999.5ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 260µs | 505µs | 542µs | 1.1ms | 1.1ms | 6 | +| Network.GetResponseBody | 2.8ms | 65.8ms | 52.8ms | 108.3ms | 108.3ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 33.5ms | 163.6ms | 275.8ms | 748.8ms | 748.8ms | 6 | +| Page.GetNavigationHistory | 796µs | 1.1ms | 1.0ms | 1.2ms | 1.2ms | 6 | +| Page.GetLayoutMetrics | 220µs | 7.0ms | 5.7ms | 15.0ms | 15.0ms | 6 | +| Page.PrintToPDF | 30.4ms | 242.0ms | 252.6ms | 820.5ms | 820.5ms | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 195µs | 418µs | 371µs | 516µs | 516µs | 6 | +| Emulation.SetMobile | 1.2ms | 101.3ms | 113.0ms | 404.6ms | 404.6ms | 6 | +| Emulation.SetGeolocation | 128µs | 219µs | 206µs | 315µs | 315µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 114µs | 163µs | 191µs | 375µs | 375µs | 6 | +| Target.CreateAndClose | 12.6ms | 17.2ms | 17.5ms | 27.2ms | 27.2ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 101.0ms | 274.3ms | 220.6ms | 289.5ms | 289.5ms | 6 | +| Composite.ScrapeLinks | 3.8ms | 4.6ms | 4.5ms | 5.3ms | 5.3ms | 6 | +| Composite.FillForm | 5.3ms | 6.1ms | 6.5ms | 8.1ms | 8.1ms | 6 | +| Composite.ClickAndWait | 17.6ms | 21.7ms | 21.1ms | 24.8ms | 24.8ms | 6 | +| Composite.RapidScreenshots | 1.04s | 1.16s | 1.13s | 1.30s | 1.30s | 6 | +| Composite.ScrollAndCapture | 597.4ms | 639.4ms | 621.2ms | 649.3ms | 649.3ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 116.8ms | 208.1ms | 185.8ms | 232.6ms | 232.6ms | 3 | +| Navigate[spa] | 1.27s | 1.27s | 1.27s | 1.27s | 1.27s | 1 | +| Navigate[media] | 958.6ms | 958.6ms | 958.6ms | 958.6ms | 958.6ms | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 225µs | 327µs | 425µs | 661µs | 19.9ms | 391 | +| Concurrent.Evaluate | 237µs | 504µs | 3.6ms | 19.5ms | 22.3ms | 391 | +| Concurrent.Screenshot | 95.7ms | 151.1ms | 150.0ms | 179.5ms | 225.9ms | 391 | + +### headful — Resource Usage +``` +config_memory: 8192m +config_cpus: 8 +image_type: headful +idle: 389.9MiB / 8GiB +after-workload: 862MiB / 8GiB +image_size: 2.66GB +``` + +## Side-by-side Comparison (Median) + +| Operation | baseline | approach1 | approach2 | headful | +|------------------------------------|--------------|--------------|--------------|--------------| +| **Navigation ** | | | | | +| Navigate[static] | 22.8ms | 30.4ms | 27.2ms | 35.1ms | +| **Screenshot ** | | | | | +| Screenshot.JPEG.q80 | 62.5ms | 83.7ms | 57.4ms | 94.4ms | +| Screenshot.PNG | 108.2ms | 120.5ms | 121.0ms | 171.9ms | +| Screenshot.FullPage | 461.4ms | 494.4ms | 446.3ms | 448.1ms | +| Screenshot.ClipRegion | 36.6ms | 42.9ms | 38.7ms | 84.9ms | +| **JS Evaluation ** | | | | | +| Eval.Trivial | 596µs | 684µs | 473µs | 579µs | +| Eval.QuerySelectorAll | 560µs | 469µs | 338µs | 386µs | +| Eval.InnerText | 964µs | 1.9ms | 739µs | 1.8ms | +| Eval.GetComputedStyle | 5.3ms | 6.7ms | 4.9ms | 4.0ms | +| Eval.ScrollToBottom | 376µs | 579µs | 490µs | 372µs | +| Eval.DOMManipulation | 627µs | 872µs | 652µs | 580µs | +| Eval.BoundingRects | 855µs | 760µs | 4.4ms | 658µs | +| **DOM ** | | | | | +| DOM.GetDocument.Shallow | 238µs | 355µs | 277µs | 219µs | +| DOM.GetDocument.Deep | 4.2ms | 3.3ms | 5.9ms | 4.6ms | +| DOM.GetDocument.Full | 17.8ms | 21.2ms | 22.1ms | 22.8ms | +| DOM.QuerySelector | 305µs | 326µs | 304µs | 314µs | +| DOM.GetOuterHTML | 23.0ms | 24.4ms | 24.2ms | 19.5ms | +| **Input ** | | | | | +| Input.MouseMove | 4.5ms | 8.0ms | 4.9ms | 15.6ms | +| Input.Click | 3.2ms | 3.2ms | 3.4ms | 3.1ms | +| Input.TypeText | 9.5ms | 9.9ms | 9.4ms | 11.3ms | +| Input.Scroll | 74.5ms | 72.9ms | 76.3ms | 198.8ms | +| **Network ** | | | | | +| Network.GetCookies | 483µs | 660µs | 394µs | 523µs | +| Network.GetResponseBody | 65.7ms | 59.2ms | 55.0ms | 68.3ms | +| **Page ** | | | | | +| Page.Reload | 139.8ms | 146.6ms | 135.1ms | 140.4ms | +| Page.GetNavigationHistory | 1.2ms | 1.6ms | 1.3ms | 1.5ms | +| Page.GetLayoutMetrics | 3.6ms | 3.3ms | 3.3ms | 2.3ms | +| Page.PrintToPDF | 221.7ms | 225.8ms | 216.9ms | 229.7ms | +| **Emulation ** | | | | | +| Emulation.SetViewport | 499µs | 322µs | 302µs | 692µs | +| Emulation.SetMobile | 101.0ms | 105.0ms | 110.4ms | 95.4ms | +| Emulation.SetGeolocation | 145µs | 172µs | 151µs | 212µs | +| **Target ** | | | | | +| Target.GetTargets | 124µs | 140µs | 121µs | 143µs | +| Target.CreateAndClose | 17.4ms | 17.7ms | 16.9ms | 17.2ms | +| **Composite ** | | | | | +| Composite.NavAndScreenshot | 135.7ms | 154.1ms | 156.7ms | 228.1ms | +| Composite.ScrapeLinks | 3.9ms | 4.7ms | 3.4ms | 4.1ms | +| Composite.FillForm | 6.7ms | 8.0ms | 6.7ms | 7.5ms | +| Composite.ClickAndWait | 24.6ms | 27.1ms | 26.8ms | 20.6ms | +| Composite.RapidScreenshots | 693.2ms | 865.6ms | 691.7ms | 1.13s | +| Composite.ScrollAndCapture | 520.8ms | 649.0ms | 503.5ms | 605.2ms | +| **Navigation ** | | | | | +| Navigate[content] | 119.4ms | 119.3ms | 214.4ms | 113.7ms | +| Navigate[spa] | 1.45s | 1.37s | 1.36s | 1.29s | +| Navigate[media] | 764.5ms | 965.9ms | 867.2ms | 790.2ms | +| **Concurrent ** | | | | | +| Concurrent.DOM | 339µs | 432µs | 328µs | 328µs | +| Concurrent.Evaluate | 19.1ms | 19.5ms | 18.4ms | 533µs | +| Concurrent.Screenshot | 106.3ms | 112.5ms | 98.5ms | 147.8ms | + diff --git a/benchmarks/liveview/results/20260310-172933/approach1/bench-json.log b/benchmarks/liveview/results/20260310-172933/approach1/bench-json.log new file mode 100644 index 00000000..ce848056 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach1/bench-json.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:34:07.320Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:34:07.321Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:34:07.322Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:34:07.322Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:34:07.328Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:34:09.594Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:34:12.493Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:34:16.292Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:34:27.854Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:34:35.410Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:34:35.411Z level=INFO msg="starting sequential benchmark" iterations=2 label=approach1 +time=2026-03-10T21:34:35.412Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:34:38.036Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:34:40.928Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:34:44.880Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:34:55.750Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:35:02.358Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:35:06.388Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:35:06.388Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:35:06.389Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:35:06.389Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD diff --git a/benchmarks/liveview/results/20260310-172933/approach1/bench.log b/benchmarks/liveview/results/20260310-172933/approach1/bench.log new file mode 100644 index 00000000..0249ed5f --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach1/bench.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:32:45.807Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:32:45.808Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:32:45.809Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:32:45.809Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:32:45.815Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:32:48.356Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:32:51.467Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:32:55.602Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:33:07.376Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:33:16.986Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:33:16.987Z level=INFO msg="starting sequential benchmark" iterations=2 label=approach1 +time=2026-03-10T21:33:16.988Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:33:19.524Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:33:22.619Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:33:26.636Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:33:36.207Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:33:43.014Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:33:47.152Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:33:47.153Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:33:47.153Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD +time=2026-03-10T21:33:47.153Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/5793A066CDEF4BB6E16CF453D2E794FD diff --git a/benchmarks/liveview/results/20260310-172933/approach1/container.log b/benchmarks/liveview/results/20260310-172933/approach1/container.log new file mode 100644 index 00000000..a5129385 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach1/container.log @@ -0,0 +1,157 @@ +[wrapper] Starting dynamic log aggregator for /var/log/supervisord +[wrapper] Starting supervisord +[wrapper] Waiting for supervisord socket... +[envoy-init] Required environment variables not set. Skipping Envoy initialization. +[wrapper] Starting system D-Bus daemon via supervisord +dbus: started +[wrapper] Starting Xvfb via supervisord +[xvfb] Starting Xvfb on :1 with 1920x1080x24, DPI 96 +xvfb: started +[wrapper] Starting Chromium via supervisord on internal port 9223 +chromium: started +[wrapper] Waiting for Chromium remote debugging on 127.0.0.1:9223... +[chromium] BASE_FLAGS: --accept-lang=en-US,en --allow-pre-commit-input --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --crash-dumps-dir=/tmp/chromium-dumps --disable-back-forward-cache --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-blink-features=AutomationControlled --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-crash-reporter --disable-crashpad --disable-dev-shm-usage --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --disable-field-trial-config --disable-gcm-registration --disable-gpu --disable-gpu-compositing --disable-hang-monitor --disable-ipc-flooding-protection --disable-notifications --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --enable-use-zoom-for-dsf=false --export-tagged-pdf --force-color-profile=srgb --hide-crash-restore-bubble --metrics-recording-only --mute-audio --no-default-browser-check --no-first-run --no-sandbox --no-service-autorun --password-store=basic --unsafely-disable-devtools-self-xss-warnings --use-angle=swiftshader --use-gl=angle --use-mock-keychain --window-size=1920,1080 --window-position=0,0 +[chromium] RUNTIME_FLAGS: +[chromium] FINAL_FLAGS: --accept-lang=en-US,en --allow-pre-commit-input --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --crash-dumps-dir=/tmp/chromium-dumps --disable-back-forward-cache --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-blink-features=AutomationControlled --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-crash-reporter --disable-crashpad --disable-dev-shm-usage --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --disable-field-trial-config --disable-gcm-registration --disable-gpu --disable-gpu-compositing --disable-hang-monitor --disable-ipc-flooding-protection --disable-notifications --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --enable-use-zoom-for-dsf=false --export-tagged-pdf --force-color-profile=srgb --hide-crash-restore-bubble --metrics-recording-only --mute-audio --no-default-browser-check --no-first-run --no-sandbox --no-service-autorun --password-store=basic --unsafely-disable-devtools-self-xss-warnings --use-angle=swiftshader --use-gl=angle --use-mock-keychain --window-size=1920,1080 --window-position=0,0 +[wrapper] Chromium remote debugging is ready on 127.0.0.1:9223 +[wrapper] ✨ Starting kernel-images API via supervisord. +[chromium] +[chromium] DevTools listening on ws://127.0.0.1:9223/devtools/browser/edb11c3f-3e35-4f99-b6c0-7bbad2600bab +[chromium] [93:93:0310/213234.067898:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.Properties.GetAll: object_path= /org/freedesktop/UPower/devices/DisplayDevice: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files +[kernel-images-api] time=2026-03-10T21:32:34.125Z level=INFO msg="server configuration" config="&{Port:10001 FrameRate:10 DisplayNum:1 MaxSizeInMB:500 OutputDir:/recordings PathToFFmpeg:ffmpeg DevToolsProxyPort:9222 LogCDPMessages:false ChromeDriverProxyPort:9224 ChromeDriverUpstreamAddr:127.0.0.1:9225 DevToolsProxyAddr:127.0.0.1:9222}" +[kernel-images-api] time=2026-03-10T21:32:34.140Z level=INFO msg="devtools upstream updated" url=ws://127.0.0.1:9223/devtools/browser/edb11c3f-3e35-4f99-b6c0-7bbad2600bab +[kernel-images-api] time=2026-03-10T21:32:34.239Z level=INFO msg="chromedriver proxy starting" addr=0.0.0.0:9224 +[kernel-images-api] time=2026-03-10T21:32:34.239Z level=INFO msg="http server starting" addr=:10001 +[kernel-images-api] time=2026-03-10T21:32:34.239Z level=INFO msg="devtools websocket proxy starting" addr=0.0.0.0:9222 +kernel-images-api: started +[wrapper] Waiting for kernel-images API on 127.0.0.1:10001... +[wrapper] kernel-images API is ready on 127.0.0.1:10001 +[wrapper] Starting ChromeDriver via supervisord +[chromedriver] Starting ChromeDriver 145.0.7632.159 (838c69b2e5b8cd00a916e35097249bc20eb25a0a-refs/branch-heads/7632@{#3673}) on port 9225 +[chromedriver] Remote connections are allowed by an allowlist (127.0.0.1). +[chromedriver] Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. +[chromedriver] ChromeDriver was started successfully on port 9225. +[chromium] [93:125:0310/213237.521829:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +chromedriver: started +[wrapper] Waiting for ChromeDriver on 127.0.0.1:9225... +[wrapper] ChromeDriver is ready on 127.0.0.1:9225 +[wrapper] Starting x11vnc via supervisord +[x11vnc] 10/03/2026 21:32:38 passing arg to libvncserver: -rfbport +[x11vnc] 10/03/2026 21:32:38 passing arg to libvncserver: 5900 +[x11vnc] 10/03/2026 21:32:38 x11vnc version: 0.9.16 lastmod: 2019-01-05 pid: 296 +[x11vnc] 10/03/2026 21:32:38 Using X display :1 +[x11vnc] 10/03/2026 21:32:38 rootwin: 0x50d reswin: 0xe00001 dpy: 0x9497e090 +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 ------------------ USEFUL INFORMATION ------------------ +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 Wireframing: -wireframe mode is in effect for window moves. +[x11vnc] 10/03/2026 21:32:38 If this yields undesired behavior (poor response, painting +[x11vnc] 10/03/2026 21:32:38 errors, etc) it may be disabled: +[x11vnc] 10/03/2026 21:32:38 - use '-nowf' to disable wireframing completely. +[x11vnc] 10/03/2026 21:32:38 - use '-nowcr' to disable the Copy Rectangle after the +[x11vnc] 10/03/2026 21:32:38 moved window is released in the new position. +[x11vnc] 10/03/2026 21:32:38 Also see the -help entry for tuning parameters. +[x11vnc] 10/03/2026 21:32:38 You can press 3 Alt_L's (Left "Alt" key) in a row to +[x11vnc] 10/03/2026 21:32:38 repaint the screen, also see the -fixscreen option for +[x11vnc] 10/03/2026 21:32:38 periodic repaints. +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 XFIXES available on display, resetting cursor mode +[x11vnc] 10/03/2026 21:32:38 to: '-cursor most'. +[x11vnc] 10/03/2026 21:32:38 to disable this behavior use: '-cursor arrow' +[x11vnc] 10/03/2026 21:32:38 or '-noxfixes'. +[x11vnc] 10/03/2026 21:32:38 using XFIXES for cursor drawing. +[x11vnc] 10/03/2026 21:32:38 GrabServer control via XTEST. +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 Scroll Detection: -scrollcopyrect mode is in effect to +[x11vnc] 10/03/2026 21:32:38 use RECORD extension to try to detect scrolling windows +[x11vnc] 10/03/2026 21:32:38 (induced by either user keystroke or mouse input). +[x11vnc] 10/03/2026 21:32:38 If this yields undesired behavior (poor response, painting +[x11vnc] 10/03/2026 21:32:38 errors, etc) it may be disabled via: '-noscr' +[x11vnc] 10/03/2026 21:32:38 Also see the -help entry for tuning parameters. +[x11vnc] 10/03/2026 21:32:38 You can press 3 Alt_L's (Left "Alt" key) in a row to +[x11vnc] 10/03/2026 21:32:38 repaint the screen, also see the -fixscreen option for +[x11vnc] 10/03/2026 21:32:38 periodic repaints. +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 XKEYBOARD: number of keysyms per keycode 7 is greater +[x11vnc] 10/03/2026 21:32:38 than 4 and 51 keysyms are mapped above 4. +[x11vnc] 10/03/2026 21:32:38 Automatically switching to -xkb mode. +[x11vnc] 10/03/2026 21:32:38 If this makes the key mapping worse you can +[x11vnc] 10/03/2026 21:32:38 disable it with the "-noxkb" option. +[x11vnc] 10/03/2026 21:32:38 Also, remember "-remap DEAD" for accenting characters. +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 X FBPM extension not supported. +[x11vnc] Xlib: extension "DPMS" missing on display ":1". +[x11vnc] 10/03/2026 21:32:38 X display is not capable of DPMS. +[x11vnc] 10/03/2026 21:32:38 -------------------------------------------------------- +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 Default visual ID: 0x21 +[x11vnc] 10/03/2026 21:32:38 Read initial data from X display into framebuffer. +[x11vnc] 10/03/2026 21:32:38 initialize_screen: fb_depth/fb_bpp/fb_Bpl 24/32/7680 +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 X display :1 is 32bpp depth=24 true color +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 Listening for VNC connections on TCP port 5900 +[x11vnc] 10/03/2026 21:32:38 Listening for VNC connections on TCP6 port 5900 +[x11vnc] 10/03/2026 21:32:38 listen6: bind: Address already in use +[x11vnc] 10/03/2026 21:32:38 Not listening on IPv6 interface. +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 Xinerama is present and active (e.g. multi-head). +[x11vnc] 10/03/2026 21:32:38 Xinerama: number of sub-screens: 1 +[x11vnc] 10/03/2026 21:32:38 Xinerama: no blackouts needed (only one sub-screen) +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] 10/03/2026 21:32:38 fb read rate: 1105 MB/sec +[x11vnc] 10/03/2026 21:32:38 fast read: reset -wait ms to: 10 +[x11vnc] 10/03/2026 21:32:38 fast read: reset -defer ms to: 10 +[x11vnc] 10/03/2026 21:32:38 The X server says there are 10 mouse buttons. +[x11vnc] 10/03/2026 21:32:38 screen setup finished. +[x11vnc] 10/03/2026 21:32:38 +[x11vnc] +[x11vnc] The VNC desktop is: add4ce841067:0 +[x11vnc] PORT=5900 +[x11vnc] +[x11vnc] ****************************************************************************** +[x11vnc] Have you tried the x11vnc '-ncache' VNC client-side pixel caching feature yet? +[x11vnc] +[x11vnc] The scheme stores pixel data offscreen on the VNC viewer side for faster +[x11vnc] retrieval. It should work with any VNC viewer. Try it by running: +[x11vnc] +[x11vnc] x11vnc -ncache 10 ... +[x11vnc] +[x11vnc] One can also add -ncache_cr for smooth 'copyrect' window motion. +[x11vnc] More info: http://www.karlrunge.com/x11vnc/faq.html#faq-client-caching +[x11vnc] +x11vnc: started +[wrapper] Waiting for x11vnc on 127.0.0.1:5900... +[wrapper] x11vnc is ready on 127.0.0.1:5900 +[wrapper] Starting noVNC via supervisord +[x11vnc] 10/03/2026 21:32:40 Got connection from client 127.0.0.1 +[x11vnc] 10/03/2026 21:32:40 0 other clients +[x11vnc] 10/03/2026 21:32:40 webSocketsHandshake: invalid client header +[x11vnc] 10/03/2026 21:32:40 Client 127.0.0.1 gone +[x11vnc] 10/03/2026 21:32:40 Statistics events Transmit/ RawEquiv ( saved) +[x11vnc] 10/03/2026 21:32:40 TOTALS : 0 | 0/ 0 ( 0.0%) +[x11vnc] 10/03/2026 21:32:40 Statistics events Received/ RawEquiv ( saved) +[x11vnc] 10/03/2026 21:32:40 TOTALS : 0 | 0/ 0 ( 0.0%) +[novnc] WebSocket server settings: +[novnc] - Listen on :8080 +[novnc] - Web server. Web root: /usr/share/novnc +[novnc] - No SSL/TLS support (no cert file) +[novnc] - proxying from :8080 to localhost:5900 +novnc: started +[wrapper] Waiting for noVNC on 127.0.0.1:8080... +[wrapper] noVNC is ready on 127.0.0.1:8080 +[wrapper] startup complete! +[chromium] [93:125:0310/213248.124427:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: INTERNAL_SERVER_ERROR +[chromium] [93:93:0310/213249.953991:ERROR:mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:748] Message 0 rejected by interface blink.mojom.WidgetHost +[chromium] [93:125:0310/213258.498436:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [137:137:0310/213309.737513:ERROR:gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc:1082] [GroupMarkerNotSet(crbug.com/242999)!:A0A01D00DC3A0000]Automatic fallback to software WebGL has been deprecated. Please use the --enable-unsafe-swiftshader (about:flags#enable-unsafe-swiftshader) flag to opt in to lower security guarantees for trusted content. +[chromium] [93:93:0310/213320.965564:ERROR:mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:748] Message 0 rejected by interface blink.mojom.WidgetHost +[chromium] [137:137:0310/213337.891207:ERROR:gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc:1082] [GroupMarkerNotSet(crbug.com/242999)!:A0A01D00DC3A0000]Automatic fallback to software WebGL has been deprecated. Please use the --enable-unsafe-swiftshader (about:flags#enable-unsafe-swiftshader) flag to opt in to lower security guarantees for trusted content. +[chromium] [93:125:0310/213341.317108:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [93:93:0310/213344.319015:ERROR:mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:748] Message 0 rejected by interface blink.mojom.WidgetHost +[chromium] [137:164:0310/213359.923967:ERROR:components/viz/service/display/display.cc:275] Frame latency is negative: -0.292 ms +[chromium] [137:164:0310/213403.668893:ERROR:components/viz/service/display/display.cc:275] Frame latency is negative: -0.591 ms +[chromium] [137:137:0310/213429.372628:ERROR:gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc:1082] [GroupMarkerNotSet(crbug.com/242999)!:A0D01D00DC3A0000]Automatic fallback to software WebGL has been deprecated. Please use the --enable-unsafe-swiftshader (about:flags#enable-unsafe-swiftshader) flag to opt in to lower security guarantees for trusted content. +[chromium] [137:137:0310/213457.222914:ERROR:gpu/command_buffer/service/gles2_cmd_decoder_passthrough.cc:1082] [GroupMarkerNotSet(crbug.com/242999)!:A0D01D00DC3A0000]Automatic fallback to software WebGL has been deprecated. Please use the --enable-unsafe-swiftshader (about:flags#enable-unsafe-swiftshader) flag to opt in to lower security guarantees for trusted content. +[chromium] [93:93:0310/213503.536031:ERROR:mojo/public/cpp/bindings/lib/interface_endpoint_client.cc:748] Message 0 rejected by interface blink.mojom.WidgetHost +[chromium] [93:125:0310/213504.277128:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT diff --git a/benchmarks/liveview/results/20260310-172933/approach1/docker-stats.csv b/benchmarks/liveview/results/20260310-172933/approach1/docker-stats.csv new file mode 100644 index 00000000..c3aef13e --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach1/docker-stats.csv @@ -0,0 +1,301 @@ +timestamp,cpu_pct,mem_usage,mem_limit,mem_pct,net_io,pids +1773178367,139.54%,282.5MiB / 1GiB,27.58%,3.91MB / 106kB,170 +1773178369,48.56%,267.7MiB / 1GiB,26.14%,3.94MB / 114kB,169 +1773178371,87.82%,276.3MiB / 1GiB,26.99%,4.18MB / 148kB,167 +1773178373,144.59%,372MiB / 1GiB,36.33%,4.66MB / 170kB,178 +1773178375,59.64%,289.7MiB / 1GiB,28.29%,4.67MB / 177kB,180 +1773178377,273.08%,465.2MiB / 1GiB,45.43%,19.3MB / 333kB,193 +1773178379,144.70%,489.1MiB / 1GiB,47.77%,19.3MB / 371kB,206 +1773178382,171.04%,513.7MiB / 1GiB,50.17%,25.9MB / 523kB,211 +1773178384,154.50%,710.7MiB / 1GiB,69.41%,25.9MB / 549kB,224 +1773178386,206.87%,336.8MiB / 1GiB,32.89%,25.9MB / 576kB,181 +1773178388,222.34%,360.5MiB / 1GiB,35.21%,27.7MB / 697kB,195 +1773178390,277.99%,554.1MiB / 1GiB,54.11%,31.2MB / 1.09MB,272 +1773178392,307.01%,558.2MiB / 1GiB,54.51%,32.9MB / 1.3MB,214 +1773178394,195.96%,614MiB / 1GiB,59.96%,33.2MB / 1.33MB,205 +1773178396,46.85%,311MiB / 1GiB,30.37%,33.3MB / 1.33MB,183 +1773178398,117.97%,318.5MiB / 1GiB,31.10%,33.3MB / 1.33MB,184 +1773178400,73.45%,313.1MiB / 1GiB,30.58%,33.3MB / 1.34MB,182 +1773178402,79.19%,321.2MiB / 1GiB,31.36%,33.3MB / 1.34MB,183 +1773178404,119.58%,368.1MiB / 1GiB,35.95%,33.3MB / 1.34MB,185 +1773178406,76.78%,320.5MiB / 1GiB,31.30%,33.3MB / 1.34MB,183 +1773178408,217.92%,420.5MiB / 1GiB,41.07%,33.5MB / 1.37MB,205 +1773178410,173.89%,488.3MiB / 1GiB,47.69%,33.5MB / 1.44MB,221 +1773178412,231.50%,690.8MiB / 1GiB,67.46%,40.1MB / 1.5MB,221 +1773178414,261.35%,408.5MiB / 1GiB,39.89%,40.4MB / 1.57MB,183 +1773178416,235.10%,402.8MiB / 1GiB,39.34%,60.1MB / 1.76MB,195 +1773178418,266.79%,705.3MiB / 1GiB,68.88%,62MB / 2.02MB,232 +1773178420,213.20%,655.5MiB / 1GiB,64.02%,62.9MB / 2.3MB,197 +1773178422,94.44%,386.1MiB / 1GiB,37.71%,65.8MB / 2.35MB,183 +1773178424,158.70%,416.1MiB / 1GiB,40.63%,68.3MB / 2.38MB,183 +1773178426,83.42%,427.8MiB / 1GiB,41.77%,68.3MB / 2.39MB,185 +1773178429,191.68%,449.6MiB / 1GiB,43.91%,68.3MB / 2.39MB,187 +1773178431,182.15%,438.9MiB / 1GiB,42.86%,68.3MB / 2.39MB,187 +1773178433,147.85%,464.2MiB / 1GiB,45.33%,68.3MB / 2.39MB,187 +1773178435,159.28%,448.3MiB / 1GiB,43.78%,68.3MB / 2.39MB,187 +1773178437,165.86%,458.5MiB / 1GiB,44.78%,68.3MB / 2.39MB,187 +1773178439,170.14%,454.6MiB / 1GiB,44.39%,68.3MB / 2.39MB,187 +1773178441,170.93%,445.9MiB / 1GiB,43.54%,68.3MB / 2.39MB,187 +1773178443,175.60%,443.6MiB / 1GiB,43.32%,68.3MB / 2.39MB,187 +1773178445,161.92%,447.8MiB / 1GiB,43.73%,68.3MB / 2.39MB,187 +1773178447,158.82%,386.1MiB / 1GiB,37.71%,68.3MB / 2.39MB,182 +1773178449,99.31%,412.6MiB / 1GiB,40.29%,68.3MB / 2.39MB,183 +1773178451,160.85%,406.5MiB / 1GiB,39.70%,68.4MB / 2.39MB,183 +1773178453,121.04%,441.5MiB / 1GiB,43.12%,68.4MB / 2.4MB,184 +1773178455,197.37%,404.9MiB / 1GiB,39.54%,68.4MB / 2.4MB,184 +1773178457,352.79%,502.7MiB / 1GiB,49.10%,81.4MB / 2.48MB,192 +1773178459,206.28%,611.4MiB / 1GiB,59.70%,81.4MB / 2.54MB,205 +1773178461,92.58%,602.7MiB / 1GiB,58.86%,88MB / 2.66MB,205 +1773178463,171.29%,825.6MiB / 1GiB,80.62%,88MB / 2.66MB,215 +1773178465,120.30%,760.4MiB / 1GiB,74.26%,88MB / 2.7MB,215 +1773178467,75.35%,303.1MiB / 1GiB,29.60%,88MB / 2.75MB,183 +1773178469,347.74%,520MiB / 1GiB,50.78%,88.4MB / 2.91MB,260 +1773178471,254.47%,517.7MiB / 1GiB,50.56%,88.9MB / 3.02MB,199 +1773178473,114.23%,316.6MiB / 1GiB,30.92%,89MB / 3.05MB,184 +1773178476,29.33%,297.3MiB / 1GiB,29.04%,89MB / 3.05MB,183 +1773178478,81.54%,317.8MiB / 1GiB,31.04%,89MB / 3.05MB,193 +1773178480,151.89%,325MiB / 1GiB,31.74%,89MB / 3.05MB,184 +1773178482,106.86%,448.4MiB / 1GiB,43.79%,89MB / 3.06MB,185 +1773178484,147.08%,330.4MiB / 1GiB,32.27%,89.1MB / 3.06MB,184 +1773178486,316.78%,429.4MiB / 1GiB,41.93%,89.2MB / 3.07MB,192 +1773178488,172.20%,510.9MiB / 1GiB,49.89%,89.2MB / 3.13MB,214 +1773178490,211.97%,631.3MiB / 1GiB,61.65%,95.8MB / 3.25MB,214 +1773178492,79.54%,801.1MiB / 1GiB,78.23%,95.8MB / 3.27MB,221 +1773178494,205.68%,272.2MiB / 1GiB,26.59%,95.8MB / 3.3MB,185 +1773178496,201.61%,323.8MiB / 1GiB,31.62%,95.8MB / 3.32MB,199 +1773178498,221.25%,446MiB / 1GiB,43.55%,96MB / 3.4MB,244 +1773178500,190.99%,545.1MiB / 1GiB,53.23%,97.3MB / 3.51MB,209 +1773178502,81.80%,261.4MiB / 1GiB,25.53%,97.3MB / 3.53MB,184 +1773178504,122.19%,282.8MiB / 1GiB,27.62%,97.3MB / 3.53MB,185 +1773178506,44.06%,298.7MiB / 1GiB,29.17%,97.3MB / 3.53MB,186 +1773178508,146.57%,298.9MiB / 1GiB,29.19%,97.3MB / 3.53MB,186 +1773178510,157.81%,325.9MiB / 1GiB,31.82%,97.3MB / 3.54MB,186 +1773178512,144.25%,312.6MiB / 1GiB,30.52%,97.3MB / 3.54MB,186 +1773178514,150.98%,301.2MiB / 1GiB,29.41%,97.3MB / 3.54MB,186 +1773178516,155.37%,311.6MiB / 1GiB,30.43%,97.4MB / 3.55MB,186 +1773178518,150.72%,321.8MiB / 1GiB,31.43%,97.4MB / 3.55MB,186 +1773178521,167.43%,314.8MiB / 1GiB,30.75%,97.4MB / 3.55MB,186 +1773178523,141.26%,313.5MiB / 1GiB,30.62%,97.4MB / 3.55MB,186 +1773178525,145.22%,312.4MiB / 1GiB,30.50%,97.4MB / 3.55MB,186 +1773178527,53.07%,279.4MiB / 1GiB,27.29%,97.4MB / 3.55MB,178 +1773178529,,,,, +1773178530,,,,, +1773178531,,,,, +1773178532,,,,, +1773178533,,,,, +1773178534,,,,, +1773178535,,,,, +1773178536,,,,, +1773178537,,,,, +1773178538,,,,, +1773178539,,,,, +1773178540,,,,, +1773178541,,,,, +1773178542,,,,, +1773178543,,,,, +1773178544,,,,, +1773178545,,,,, +1773178546,,,,, +1773178547,,,,, +1773178548,,,,, +1773178549,,,,, +1773178550,,,,, +1773178551,,,,, +1773178552,,,,, +1773178554,,,,, +1773178555,,,,, +1773178556,,,,, +1773178557,,,,, +1773178558,,,,, +1773178559,,,,, +1773178560,,,,, +1773178561,,,,, +1773178562,,,,, +1773178563,,,,, +1773178564,,,,, +1773178565,,,,, +1773178566,,,,, +1773178567,,,,, +1773178568,,,,, +1773178569,,,,, +1773178570,,,,, +1773178571,,,,, +1773178572,,,,, +1773178573,,,,, +1773178574,,,,, +1773178575,,,,, +1773178576,,,,, +1773178577,,,,, +1773178578,,,,, +1773178579,,,,, +1773178580,,,,, +1773178581,,,,, +1773178582,,,,, +1773178583,,,,, +1773178585,,,,, +1773178586,,,,, +1773178587,,,,, +1773178588,,,,, +1773178589,,,,, +1773178590,,,,, +1773178591,,,,, +1773178592,,,,, +1773178593,,,,, +1773178594,,,,, +1773178595,,,,, +1773178596,,,,, +1773178597,,,,, +1773178598,,,,, +1773178599,,,,, +1773178600,,,,, +1773178601,,,,, +1773178602,,,,, +1773178603,,,,, +1773178604,,,,, +1773178605,,,,, +1773178606,,,,, +1773178607,,,,, +1773178608,,,,, +1773178609,,,,, +1773178610,,,,, +1773178611,,,,, +1773178612,,,,, +1773178613,,,,, +1773178614,,,,, +1773178616,,,,, +1773178617,,,,, +1773178618,,,,, +1773178619,,,,, +1773178620,,,,, +1773178621,,,,, +1773178622,,,,, +1773178623,,,,, +1773178624,,,,, +1773178625,,,,, +1773178626,,,,, +1773178627,,,,, +1773178628,,,,, +1773178629,,,,, +1773178630,,,,, +1773178631,,,,, +1773178632,,,,, +1773178633,,,,, +1773178634,,,,, +1773178635,,,,, +1773178636,,,,, +1773178637,,,,, +1773178638,,,,, +1773178639,,,,, +1773178640,,,,, +1773178641,,,,, +1773178642,,,,, +1773178643,,,,, +1773178644,,,,, +1773178645,,,,, +1773178647,,,,, +1773178648,,,,, +1773178649,,,,, +1773178650,,,,, +1773178651,,,,, +1773178652,,,,, +1773178653,,,,, +1773178654,,,,, +1773178655,,,,, +1773178656,,,,, +1773178657,,,,, +1773178658,,,,, +1773178659,,,,, +1773178660,,,,, +1773178661,,,,, +1773178662,,,,, +1773178663,,,,, +1773178664,,,,, +1773178665,,,,, +1773178666,,,,, +1773178667,,,,, +1773178668,,,,, +1773178669,,,,, +1773178670,,,,, +1773178671,,,,, +1773178672,,,,, +1773178673,,,,, +1773178674,,,,, +1773178675,,,,, +1773178676,,,,, +1773178678,,,,, +1773178679,,,,, +1773178680,,,,, +1773178681,,,,, +1773178682,,,,, +1773178683,,,,, +1773178684,,,,, +1773178685,,,,, +1773178686,,,,, +1773178687,,,,, +1773178688,,,,, +1773178689,,,,, +1773178690,,,,, +1773178691,,,,, +1773178692,,,,, +1773178693,,,,, +1773178694,,,,, +1773178695,,,,, +1773178696,,,,, +1773178697,,,,, +1773178698,,,,, +1773178699,,,,, +1773178700,,,,, +1773178701,,,,, +1773178702,,,,, +1773178703,,,,, +1773178704,,,,, +1773178705,,,,, +1773178706,,,,, +1773178707,,,,, +1773178708,,,,, +1773178710,,,,, +1773178711,,,,, +1773178712,,,,, +1773178713,,,,, +1773178714,,,,, +1773178715,,,,, +1773178716,,,,, +1773178717,,,,, +1773178718,,,,, +1773178719,,,,, +1773178720,,,,, +1773178721,,,,, +1773178722,,,,, +1773178723,,,,, +1773178724,,,,, +1773178725,,,,, +1773178726,,,,, +1773178727,,,,, +1773178728,,,,, +1773178729,,,,, +1773178730,,,,, +1773178731,,,,, +1773178732,,,,, +1773178733,,,,, +1773178734,,,,, +1773178735,,,,, +1773178736,,,,, +1773178737,,,,, +1773178738,,,,, +1773178739,,,,, +1773178741,,,,, +1773178742,,,,, +1773178743,,,,, +1773178744,,,,, +1773178745,,,,, +1773178746,,,,, +1773178747,,,,, +1773178748,,,,, +1773178749,,,,, +1773178750,,,,, +1773178751,,,,, +1773178752,,,,, +1773178753,,,,, +1773178754,,,,, +1773178755,,,,, +1773178756,,,,, diff --git a/benchmarks/liveview/results/20260310-172933/approach1/memory.txt b/benchmarks/liveview/results/20260310-172933/approach1/memory.txt new file mode 100644 index 00000000..b3576483 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach1/memory.txt @@ -0,0 +1,6 @@ +config_memory: 1024m +config_cpus: 4 +image_type: headless +idle: 268MiB / 1GiB +after-workload: 279.1MiB / 1GiB +image_size: 2.22GB diff --git a/benchmarks/liveview/results/20260310-172933/approach1/results.json b/benchmarks/liveview/results/20260310-172933/approach1/results.json new file mode 100644 index 00000000..5bbce850 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach1/results.json @@ -0,0 +1,445 @@ +{ + "label": "approach1", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 30.408, + "median_ms": 30.408, + "mean_ms": 30.408, + "p95_ms": 30.408, + "max_ms": 30.408 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 66.891, + "median_ms": 83.684, + "mean_ms": 84.2, + "p95_ms": 120.708, + "max_ms": 120.708 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 82.994, + "median_ms": 120.53, + "mean_ms": 154.909, + "p95_ms": 350.249, + "max_ms": 350.249 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 64.943, + "median_ms": 494.379, + "mean_ms": 460.297, + "p95_ms": 1252.193, + "max_ms": 1252.193 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 25.724, + "median_ms": 42.947, + "mean_ms": 128.054, + "p95_ms": 316.038, + "max_ms": 316.038 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 0.489, + "median_ms": 0.684, + "mean_ms": 25.879, + "p95_ms": 152.001, + "max_ms": 152.001 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 0.337, + "median_ms": 0.469, + "mean_ms": 1.698, + "p95_ms": 8.06, + "max_ms": 8.06 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 0.542, + "median_ms": 1.925, + "mean_ms": 13.037, + "p95_ms": 66.95, + "max_ms": 66.95 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 4.007, + "median_ms": 6.671, + "mean_ms": 8.413, + "p95_ms": 19.217, + "max_ms": 19.217 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 0.362, + "median_ms": 0.579, + "mean_ms": 0.759, + "p95_ms": 2.118, + "max_ms": 2.118 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 0.597, + "median_ms": 0.872, + "mean_ms": 2.034, + "p95_ms": 6.187, + "max_ms": 6.187 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 0.452, + "median_ms": 0.76, + "mean_ms": 1.529, + "p95_ms": 4.639, + "max_ms": 4.639 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 0.235, + "median_ms": 0.355, + "mean_ms": 0.339, + "p95_ms": 0.476, + "max_ms": 0.476 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 0.28, + "median_ms": 3.332, + "mean_ms": 2.004, + "p95_ms": 4.001, + "max_ms": 4.001 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 0.253, + "median_ms": 21.187, + "mean_ms": 20.941, + "p95_ms": 48.223, + "max_ms": 48.223 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 0.28, + "median_ms": 0.326, + "mean_ms": 4.131, + "p95_ms": 23.271, + "max_ms": 23.271 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 0.232, + "median_ms": 24.362, + "mean_ms": 14.093, + "p95_ms": 30.373, + "max_ms": 30.373 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 2.237, + "median_ms": 8.048, + "mean_ms": 8.422, + "p95_ms": 16.631, + "max_ms": 16.631 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 1.177, + "median_ms": 3.17, + "mean_ms": 6.468, + "p95_ms": 24.852, + "max_ms": 24.852 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 8.88, + "median_ms": 9.889, + "mean_ms": 54.474, + "p95_ms": 184.331, + "max_ms": 184.331 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 70.769, + "median_ms": 72.882, + "mean_ms": 105.395, + "p95_ms": 183.054, + "max_ms": 183.054 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 0.287, + "median_ms": 0.66, + "mean_ms": 0.624, + "p95_ms": 1.335, + "max_ms": 1.335 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 3.133, + "median_ms": 59.152, + "mean_ms": 41.754, + "p95_ms": 69.779, + "max_ms": 69.779 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 27.56, + "median_ms": 146.569, + "mean_ms": 398.635, + "p95_ms": 1209.797, + "max_ms": 1209.797 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 1.147, + "median_ms": 1.579, + "mean_ms": 1.697, + "p95_ms": 3.109, + "max_ms": 3.109 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 0.182, + "median_ms": 3.331, + "mean_ms": 5.924, + "p95_ms": 26.266, + "max_ms": 26.266 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 31.222, + "median_ms": 225.842, + "mean_ms": 631.916, + "p95_ms": 3138.485, + "max_ms": 3138.485 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 0.208, + "median_ms": 0.322, + "mean_ms": 0.395, + "p95_ms": 0.653, + "max_ms": 0.653 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 1.413, + "median_ms": 104.974, + "mean_ms": 118.318, + "p95_ms": 421.36, + "max_ms": 421.36 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 0.129, + "median_ms": 0.172, + "mean_ms": 0.175, + "p95_ms": 0.229, + "max_ms": 0.229 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 0.109, + "median_ms": 0.14, + "mean_ms": 0.143, + "p95_ms": 0.188, + "max_ms": 0.188 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 15.989, + "median_ms": 17.662, + "mean_ms": 18.015, + "p95_ms": 21.447, + "max_ms": 21.447 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 111.022, + "median_ms": 154.144, + "mean_ms": 172.275, + "p95_ms": 259.208, + "max_ms": 259.208 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 2.931, + "median_ms": 4.687, + "mean_ms": 5.75, + "p95_ms": 10.939, + "max_ms": 10.939 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 5.352, + "median_ms": 7.956, + "mean_ms": 7.226, + "p95_ms": 10.104, + "max_ms": 10.104 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 22.561, + "median_ms": 27.056, + "mean_ms": 25.692, + "p95_ms": 27.43, + "max_ms": 27.43 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 737.698, + "median_ms": 865.599, + "mean_ms": 846.495, + "p95_ms": 976.927, + "max_ms": 976.927 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 584.914, + "median_ms": 649.005, + "mean_ms": 632.593, + "p95_ms": 673.559, + "max_ms": 673.559 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 111.428, + "median_ms": 119.309, + "mean_ms": 159.084, + "p95_ms": 246.514, + "max_ms": 246.514 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 1369.425, + "median_ms": 1369.425, + "mean_ms": 1369.425, + "p95_ms": 1369.425, + "max_ms": 1369.425 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 965.909, + "median_ms": 965.909, + "mean_ms": 965.909, + "p95_ms": 965.909, + "max_ms": 965.909 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 451, + "min_ms": 0.212, + "median_ms": 0.432, + "mean_ms": 0.466, + "p95_ms": 0.739, + "max_ms": 3.472 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 451, + "min_ms": 0.239, + "median_ms": 19.472, + "mean_ms": 18.352, + "p95_ms": 43.085, + "max_ms": 49.673 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 451, + "min_ms": 70.287, + "median_ms": 112.495, + "mean_ms": 114.588, + "p95_ms": 153.093, + "max_ms": 191.56 + } + ] +} diff --git a/benchmarks/liveview/results/20260310-172933/approach1/results.md b/benchmarks/liveview/results/20260310-172933/approach1/results.md new file mode 100644 index 00000000..569ae59f --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach1/results.md @@ -0,0 +1,61 @@ + +## approach1 + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 55.3ms | 55.3ms | 55.3ms | 55.3ms | 55.3ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 53.5ms | 85.4ms | 88.9ms | 156.9ms | 156.9ms | 6 | +| Screenshot.PNG | 86.7ms | 127.3ms | 194.9ms | 553.6ms | 553.6ms | 6 | +| Screenshot.FullPage | 75.2ms | 422.1ms | 367.6ms | 993.0ms | 993.0ms | 6 | +| Screenshot.ClipRegion | 29.0ms | 37.9ms | 116.9ms | 325.3ms | 325.3ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 402µs | 778µs | 37.6ms | 154.6ms | 154.6ms | 6 | +| Eval.QuerySelectorAll | 332µs | 542µs | 15.0ms | 76.9ms | 76.9ms | 6 | +| Eval.InnerText | 441µs | 2.0ms | 3.2ms | 12.3ms | 12.3ms | 6 | +| Eval.GetComputedStyle | 4.2ms | 5.1ms | 7.0ms | 16.1ms | 16.1ms | 6 | +| Eval.ScrollToBottom | 352µs | 413µs | 3.7ms | 20.4ms | 20.4ms | 6 | +| Eval.DOMManipulation | 530µs | 681µs | 1.1ms | 3.6ms | 3.6ms | 6 | +| Eval.BoundingRects | 493µs | 997µs | 983µs | 2.1ms | 2.1ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 232µs | 275µs | 1.1ms | 5.2ms | 5.2ms | 6 | +| DOM.GetDocument.Deep | 332µs | 3.1ms | 3.4ms | 10.8ms | 10.8ms | 6 | +| DOM.GetDocument.Full | 456µs | 18.7ms | 21.4ms | 54.0ms | 54.0ms | 6 | +| DOM.QuerySelector | 247µs | 336µs | 6.1ms | 35.1ms | 35.1ms | 6 | +| DOM.GetOuterHTML | 253µs | 22.7ms | 12.8ms | 24.9ms | 24.9ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 978µs | 9.7ms | 8.5ms | 15.7ms | 15.7ms | 6 | +| Input.Click | 1.1ms | 4.1ms | 6.6ms | 23.3ms | 23.3ms | 6 | +| Input.TypeText | 8.7ms | 10.7ms | 72.7ms | 206.9ms | 206.9ms | 6 | +| Input.Scroll | 71.7ms | 81.9ms | 93.6ms | 163.5ms | 163.5ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 312µs | 603µs | 4.4ms | 21.5ms | 21.5ms | 6 | +| Network.GetResponseBody | 3.0ms | 58.6ms | 42.2ms | 69.1ms | 69.1ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 53.1ms | 176.0ms | 379.8ms | 1.13s | 1.13s | 6 | +| Page.GetNavigationHistory | 749µs | 1.4ms | 1.4ms | 1.6ms | 1.6ms | 6 | +| Page.GetLayoutMetrics | 378µs | 2.8ms | 23.6ms | 116.8ms | 116.8ms | 6 | +| Page.PrintToPDF | 31.6ms | 223.2ms | 425.2ms | 1.89s | 1.89s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 275µs | 329µs | 742µs | 2.7ms | 2.7ms | 6 | +| Emulation.SetMobile | 1.4ms | 104.7ms | 122.8ms | 430.9ms | 430.9ms | 6 | +| Emulation.SetGeolocation | 95µs | 179µs | 250µs | 701µs | 701µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 93µs | 140µs | 149µs | 260µs | 260µs | 6 | +| Target.CreateAndClose | 11.9ms | 19.9ms | 18.7ms | 23.0ms | 23.0ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 121.4ms | 159.0ms | 175.2ms | 266.0ms | 266.0ms | 6 | +| Composite.ScrapeLinks | 4.0ms | 4.8ms | 4.6ms | 4.9ms | 4.9ms | 6 | +| Composite.FillForm | 5.6ms | 8.4ms | 7.4ms | 8.7ms | 8.7ms | 6 | +| Composite.ClickAndWait | 22.4ms | 25.5ms | 25.9ms | 31.5ms | 31.5ms | 6 | +| Composite.RapidScreenshots | 726.7ms | 869.1ms | 829.0ms | 975.5ms | 975.5ms | 6 | +| Composite.ScrollAndCapture | 612.2ms | 670.0ms | 656.1ms | 683.5ms | 683.5ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 118.7ms | 235.0ms | 215.4ms | 292.4ms | 292.4ms | 3 | +| Navigate[spa] | 1.50s | 1.50s | 1.50s | 1.50s | 1.50s | 1 | +| Navigate[media] | 1.13s | 1.13s | 1.13s | 1.13s | 1.13s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 226µs | 367µs | 768µs | 818µs | 29.3ms | 450 | +| Concurrent.Evaluate | 203µs | 948µs | 10.4ms | 39.6ms | 44.6ms | 450 | +| Concurrent.Screenshot | 69.7ms | 122.7ms | 122.3ms | 155.0ms | 184.4ms | 450 | diff --git a/benchmarks/liveview/results/20260310-172933/approach2/bench-json.log b/benchmarks/liveview/results/20260310-172933/approach2/bench-json.log new file mode 100644 index 00000000..94b532b8 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach2/bench-json.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:37:08.047Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:37:08.048Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:37:08.048Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:37:08.048Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:37:08.051Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:37:10.338Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:37:13.103Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:37:16.603Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:37:26.416Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:37:34.451Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:37:34.451Z level=INFO msg="starting sequential benchmark" iterations=2 label=approach2 +time=2026-03-10T21:37:34.452Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:37:36.771Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:37:39.467Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:37:42.917Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:37:51.215Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:37:58.069Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:38:01.781Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:38:01.781Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:38:01.782Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:38:01.782Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B diff --git a/benchmarks/liveview/results/20260310-172933/approach2/bench.log b/benchmarks/liveview/results/20260310-172933/approach2/bench.log new file mode 100644 index 00000000..d6b1475c --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach2/bench.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:35:52.324Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:35:52.325Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:35:52.325Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:35:52.326Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:35:52.331Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:35:54.624Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:35:57.440Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:36:01.309Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:36:11.757Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:36:20.508Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:36:20.509Z level=INFO msg="starting sequential benchmark" iterations=2 label=approach2 +time=2026-03-10T21:36:20.510Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:36:22.840Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:36:25.741Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:36:29.304Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:36:37.511Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:36:44.319Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:36:47.883Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:36:47.884Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:36:47.884Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B +time=2026-03-10T21:36:47.884Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/29794C5EE667BBDC1FDA878AB5DC241B diff --git a/benchmarks/liveview/results/20260310-172933/approach2/container.log b/benchmarks/liveview/results/20260310-172933/approach2/container.log new file mode 100644 index 00000000..0f5c6fda --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach2/container.log @@ -0,0 +1,49 @@ +[wrapper] Starting dynamic log aggregator for /var/log/supervisord +[wrapper] Starting supervisord +[wrapper] Waiting for supervisord socket... +[envoy-init] Required environment variables not set. Skipping Envoy initialization. +[wrapper] Starting system D-Bus daemon via supervisord +dbus: started +[wrapper] Starting Xvfb via supervisord +[xvfb] Starting Xvfb on :1 with 1920x1080x24, DPI 96 +xvfb: started +[wrapper] Starting Chromium via supervisord on internal port 9223 +chromium: started +[wrapper] Waiting for Chromium remote debugging on 127.0.0.1:9223... +[chromium] BASE_FLAGS: --accept-lang=en-US,en --allow-pre-commit-input --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --crash-dumps-dir=/tmp/chromium-dumps --disable-back-forward-cache --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-blink-features=AutomationControlled --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-crash-reporter --disable-crashpad --disable-dev-shm-usage --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --disable-field-trial-config --disable-gcm-registration --disable-gpu --disable-gpu-compositing --disable-hang-monitor --disable-ipc-flooding-protection --disable-notifications --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --disable-software-rasterizer --enable-use-zoom-for-dsf=false --export-tagged-pdf --force-color-profile=srgb --hide-crash-restore-bubble --hide-scrollbars --metrics-recording-only --mute-audio --no-default-browser-check --no-first-run --no-sandbox --no-service-autorun --ozone-platform=headless --password-store=basic --unsafely-disable-devtools-self-xss-warnings --use-angle=swiftshader --use-gl=angle --use-mock-keychain +[chromium] RUNTIME_FLAGS: +[chromium] FINAL_FLAGS: --accept-lang=en-US,en --allow-pre-commit-input --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --crash-dumps-dir=/tmp/chromium-dumps --disable-back-forward-cache --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-blink-features=AutomationControlled --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-crash-reporter --disable-crashpad --disable-dev-shm-usage --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --disable-field-trial-config --disable-gcm-registration --disable-gpu --disable-gpu-compositing --disable-hang-monitor --disable-ipc-flooding-protection --disable-notifications --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --disable-software-rasterizer --enable-use-zoom-for-dsf=false --export-tagged-pdf --force-color-profile=srgb --hide-crash-restore-bubble --hide-scrollbars --metrics-recording-only --mute-audio --no-default-browser-check --no-first-run --no-sandbox --no-service-autorun --ozone-platform=headless --password-store=basic --unsafely-disable-devtools-self-xss-warnings --use-angle=swiftshader --use-gl=angle --use-mock-keychain +[chromium] +[chromium] DevTools listening on ws://127.0.0.1:9223/devtools/browser/fb046c2c-35c3-4bb6-828b-f9c54be58335 +[wrapper] Chromium remote debugging is ready on 127.0.0.1:9223 +[wrapper] ✨ Starting kernel-images API via supervisord. +[chromium] [95:95:0310/213540.436479:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.Properties.GetAll: object_path= /org/freedesktop/UPower/devices/DisplayDevice: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files +[kernel-images-api] time=2026-03-10T21:35:40.585Z level=INFO msg="server configuration" config="&{Port:10001 FrameRate:10 DisplayNum:1 MaxSizeInMB:500 OutputDir:/recordings PathToFFmpeg:ffmpeg DevToolsProxyPort:9222 LogCDPMessages:false ChromeDriverProxyPort:9224 ChromeDriverUpstreamAddr:127.0.0.1:9225 DevToolsProxyAddr:127.0.0.1:9222}" +[kernel-images-api] time=2026-03-10T21:35:40.599Z level=INFO msg="devtools upstream updated" url=ws://127.0.0.1:9223/devtools/browser/fb046c2c-35c3-4bb6-828b-f9c54be58335 +[kernel-images-api] time=2026-03-10T21:35:40.698Z level=INFO msg="chromedriver proxy starting" addr=0.0.0.0:9224 +[kernel-images-api] time=2026-03-10T21:35:40.698Z level=INFO msg="http server starting" addr=:10001 +[kernel-images-api] time=2026-03-10T21:35:40.698Z level=INFO msg="devtools websocket proxy starting" addr=0.0.0.0:9222 +kernel-images-api: started +[wrapper] Waiting for kernel-images API on 127.0.0.1:10001... +[wrapper] kernel-images API is ready on 127.0.0.1:10001 +[wrapper] Starting ChromeDriver via supervisord +[chromedriver] Starting ChromeDriver 145.0.7632.159 (838c69b2e5b8cd00a916e35097249bc20eb25a0a-refs/branch-heads/7632@{#3673}) on port 9225 +[chromedriver] Remote connections are allowed by an allowlist (127.0.0.1). +[chromedriver] Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. +[chromedriver] ChromeDriver was started successfully on port 9225. +[chromium] [95:125:0310/213543.883444:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +chromedriver: started +[wrapper] Waiting for ChromeDriver on 127.0.0.1:9225... +[wrapper] ChromeDriver is ready on 127.0.0.1:9225 +[wrapper] Starting CDP live view via supervisord +[cdp-live-view] time=2026-03-10T21:35:45.050Z level=INFO msg="starting cdp-live-view" listen=:8080 cdpPort=9223 +cdp-live-view: started +[wrapper] Waiting for cdp-live-view on 127.0.0.1:8080... +[wrapper] cdp-live-view is ready on 127.0.0.1:8080 +[wrapper] startup complete! +[chromium] [95:125:0310/213610.479449:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [95:125:0310/213707.222258:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [136:143:0310/213756.806807:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:385] SharedImageManager::ProduceMemory: Trying to Produce a Memory representation from a non-existent mailbox. +[chromium] [136:143:0310/213756.806973:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:385] SharedImageManager::ProduceMemory: Trying to Produce a Memory representation from a non-existent mailbox. +[chromium] [136:143:0310/213756.807027:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:385] SharedImageManager::ProduceMemory: Trying to Produce a Memory representation from a non-existent mailbox. +[chromium] [136:143:0310/213756.807076:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:385] SharedImageManager::ProduceMemory: Trying to Produce a Memory representation from a non-existent mailbox. diff --git a/benchmarks/liveview/results/20260310-172933/approach2/docker-stats.csv b/benchmarks/liveview/results/20260310-172933/approach2/docker-stats.csv new file mode 100644 index 00000000..174cd12b --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach2/docker-stats.csv @@ -0,0 +1,301 @@ +timestamp,cpu_pct,mem_usage,mem_limit,mem_pct,net_io,pids +1773178554,127.08%,205.9MiB / 1GiB,20.11%,3.9MB / 98.5kB,151 +1773178556,98.71%,184.2MiB / 1GiB,17.99%,3.93MB / 106kB,150 +1773178558,117.08%,223.3MiB / 1GiB,21.80%,4.57MB / 154kB,153 +1773178560,180.49%,208.1MiB / 1GiB,20.32%,4.64MB / 159kB,152 +1773178562,219.91%,325.9MiB / 1GiB,31.83%,12.8MB / 238kB,182 +1773178564,172.17%,336.5MiB / 1GiB,32.86%,19.3MB / 317kB,194 +1773178566,19.13%,340.5MiB / 1GiB,33.25%,19.4MB / 397kB,194 +1773178568,197.28%,448.4MiB / 1GiB,43.79%,25.9MB / 480kB,201 +1773178570,245.70%,226.6MiB / 1GiB,22.13%,25.9MB / 507kB,172 +1773178572,216.14%,286.8MiB / 1GiB,28.01%,28.1MB / 649kB,183 +1773178574,287.17%,520.4MiB / 1GiB,50.82%,31.2MB / 1.04MB,266 +1773178576,278.65%,486MiB / 1GiB,47.46%,33MB / 1.21MB,189 +1773178578,230.21%,242.3MiB / 1GiB,23.66%,33.2MB / 1.24MB,172 +1773178580,20.45%,221.1MiB / 1GiB,21.59%,33.2MB / 1.24MB,171 +1773178582,72.54%,246.8MiB / 1GiB,24.10%,33.2MB / 1.25MB,174 +1773178584,129.81%,248.2MiB / 1GiB,24.24%,33.2MB / 1.25MB,171 +1773178586,91.59%,369.9MiB / 1GiB,36.13%,33.2MB / 1.25MB,173 +1773178588,116.51%,251.8MiB / 1GiB,24.59%,33.2MB / 1.25MB,171 +1773178591,202.36%,357.9MiB / 1GiB,34.95%,33.3MB / 1.27MB,178 +1773178593,127.15%,381.3MiB / 1GiB,37.24%,33.5MB / 1.38MB,199 +1773178595,207.44%,589.9MiB / 1GiB,57.60%,39.9MB / 1.45MB,206 +1773178597,129.38%,251MiB / 1GiB,24.51%,39.9MB / 1.47MB,173 +1773178599,225.33%,387.7MiB / 1GiB,37.86%,40MB / 1.52MB,213 +1773178601,231.12%,465.5MiB / 1GiB,45.46%,41.6MB / 1.63MB,213 +1773178603,282.45%,255.2MiB / 1GiB,24.92%,42.5MB / 1.72MB,171 +1773178605,79.54%,268.9MiB / 1GiB,26.26%,43.5MB / 1.73MB,179 +1773178607,100.86%,294MiB / 1GiB,28.71%,44.4MB / 1.77MB,172 +1773178609,196.78%,337.7MiB / 1GiB,32.98%,63.6MB / 1.94MB,173 +1773178611,208.90%,361.4MiB / 1GiB,35.29%,68.1MB / 1.98MB,173 +1773178613,136.92%,361.4MiB / 1GiB,35.30%,68.2MB / 1.99MB,173 +1773178615,139.99%,365.6MiB / 1GiB,35.70%,68.2MB / 1.99MB,173 +1773178617,130.92%,361.2MiB / 1GiB,35.27%,68.2MB / 1.99MB,173 +1773178619,125.84%,362.3MiB / 1GiB,35.38%,68.2MB / 1.99MB,173 +1773178621,128.12%,351MiB / 1GiB,34.28%,68.2MB / 1.99MB,173 +1773178623,140.04%,360.8MiB / 1GiB,35.24%,68.2MB / 1.99MB,173 +1773178625,131.29%,360.6MiB / 1GiB,35.22%,68.2MB / 1.99MB,173 +1773178627,136.20%,367.5MiB / 1GiB,35.89%,68.2MB / 1.99MB,173 +1773178629,120.04%,316.9MiB / 1GiB,30.95%,68.2MB / 2MB,172 +1773178631,106.01%,311.7MiB / 1GiB,30.44%,68.2MB / 2MB,180 +1773178633,102.98%,349.6MiB / 1GiB,34.14%,68.3MB / 2.01MB,173 +1773178636,175.68%,336.5MiB / 1GiB,32.86%,68.3MB / 2.01MB,173 +1773178638,302.81%,411.7MiB / 1GiB,40.21%,74.8MB / 2.05MB,179 +1773178640,220.83%,470.4MiB / 1GiB,45.93%,81.3MB / 2.15MB,196 +1773178642,104.38%,508.9MiB / 1GiB,49.70%,87.9MB / 2.28MB,196 +1773178644,159.15%,747.8MiB / 1GiB,73.03%,87.9MB / 2.3MB,203 +1773178646,132.74%,332.2MiB / 1GiB,32.44%,87.9MB / 2.33MB,172 +1773178648,309.61%,544MiB / 1GiB,53.13%,88.3MB / 2.56MB,248 +1773178650,217.62%,575.2MiB / 1GiB,56.17%,88.6MB / 2.73MB,201 +1773178652,259.05%,360.2MiB / 1GiB,35.17%,88.9MB / 2.75MB,173 +1773178654,7.21%,334.1MiB / 1GiB,32.63%,88.9MB / 2.75MB,173 +1773178656,98.11%,350.6MiB / 1GiB,34.24%,88.9MB / 2.75MB,172 +1773178658,136.19%,335.9MiB / 1GiB,32.80%,88.9MB / 2.75MB,174 +1773178660,109.82%,386MiB / 1GiB,37.70%,88.9MB / 2.75MB,173 +1773178662,130.69%,339.7MiB / 1GiB,33.18%,88.9MB / 2.75MB,173 +1773178664,195.62%,435.7MiB / 1GiB,42.55%,89.1MB / 2.78MB,197 +1773178666,131.87%,487.7MiB / 1GiB,47.62%,89.1MB / 2.85MB,197 +1773178668,195.10%,655.9MiB / 1GiB,64.05%,95.7MB / 2.94MB,204 +1773178670,179.31%,335.7MiB / 1GiB,32.78%,95.7MB / 2.97MB,172 +1773178672,291.60%,511.8MiB / 1GiB,49.99%,95.8MB / 3.03MB,238 +1773178674,195.16%,541MiB / 1GiB,52.83%,95.9MB / 3.15MB,189 +1773178676,339.53%,665.1MiB / 1GiB,64.96%,96.7MB / 3.32MB,202 +1773178678,67.18%,325.4MiB / 1GiB,31.78%,96.7MB / 3.34MB,172 +1773178680,110.94%,360.3MiB / 1GiB,35.19%,96.8MB / 3.34MB,173 +1773178683,126.60%,372.5MiB / 1GiB,36.37%,96.8MB / 3.34MB,173 +1773178685,128.21%,377.6MiB / 1GiB,36.87%,96.8MB / 3.34MB,173 +1773178687,132.64%,369.4MiB / 1GiB,36.08%,96.8MB / 3.34MB,173 +1773178689,121.51%,393.6MiB / 1GiB,38.43%,96.8MB / 3.34MB,173 +1773178691,128.01%,382.3MiB / 1GiB,37.34%,96.8MB / 3.34MB,173 +1773178693,123.74%,358.8MiB / 1GiB,35.04%,96.8MB / 3.34MB,173 +1773178695,120.13%,373.1MiB / 1GiB,36.44%,96.8MB / 3.34MB,173 +1773178697,121.15%,364.4MiB / 1GiB,35.59%,96.8MB / 3.34MB,173 +1773178699,127.37%,370.9MiB / 1GiB,36.22%,96.8MB / 3.34MB,173 +1773178701,123.54%,368.2MiB / 1GiB,35.96%,96.8MB / 3.34MB,173 +1773178704,,,,, +1773178705,,,,, +1773178706,,,,, +1773178707,,,,, +1773178708,,,,, +1773178709,,,,, +1773178710,,,,, +1773178711,,,,, +1773178712,,,,, +1773178713,,,,, +1773178714,,,,, +1773178715,,,,, +1773178716,,,,, +1773178717,,,,, +1773178718,,,,, +1773178719,,,,, +1773178720,,,,, +1773178721,,,,, +1773178723,,,,, +1773178724,,,,, +1773178725,,,,, +1773178726,,,,, +1773178727,,,,, +1773178728,,,,, +1773178729,,,,, +1773178730,,,,, +1773178731,,,,, +1773178732,,,,, +1773178733,,,,, +1773178734,,,,, +1773178735,,,,, +1773178736,,,,, +1773178737,,,,, +1773178738,,,,, +1773178739,,,,, +1773178740,,,,, +1773178741,,,,, +1773178742,,,,, +1773178743,,,,, +1773178744,,,,, +1773178745,,,,, +1773178746,,,,, +1773178747,,,,, +1773178748,,,,, +1773178749,,,,, +1773178750,,,,, +1773178751,,,,, +1773178752,,,,, +1773178753,,,,, +1773178755,,,,, +1773178756,,,,, +1773178757,,,,, +1773178758,,,,, +1773178759,,,,, +1773178760,,,,, +1773178761,,,,, +1773178762,,,,, +1773178763,,,,, +1773178764,,,,, +1773178765,,,,, +1773178766,,,,, +1773178767,,,,, +1773178768,,,,, +1773178769,,,,, +1773178770,,,,, +1773178771,,,,, +1773178772,,,,, +1773178773,,,,, +1773178774,,,,, +1773178775,,,,, +1773178776,,,,, +1773178777,,,,, +1773178778,,,,, +1773178779,,,,, +1773178780,,,,, +1773178781,,,,, +1773178782,,,,, +1773178783,,,,, +1773178784,,,,, +1773178785,,,,, +1773178787,,,,, +1773178788,,,,, +1773178789,,,,, +1773178790,,,,, +1773178791,,,,, +1773178792,,,,, +1773178793,,,,, +1773178794,,,,, +1773178795,,,,, +1773178796,,,,, +1773178797,,,,, +1773178798,,,,, +1773178799,,,,, +1773178800,,,,, +1773178801,,,,, +1773178802,,,,, +1773178803,,,,, +1773178804,,,,, +1773178805,,,,, +1773178806,,,,, +1773178807,,,,, +1773178808,,,,, +1773178809,,,,, +1773178810,,,,, +1773178811,,,,, +1773178812,,,,, +1773178813,,,,, +1773178814,,,,, +1773178815,,,,, +1773178816,,,,, +1773178818,,,,, +1773178819,,,,, +1773178820,,,,, +1773178821,,,,, +1773178822,,,,, +1773178823,,,,, +1773178824,,,,, +1773178825,,,,, +1773178826,,,,, +1773178827,,,,, +1773178828,,,,, +1773178829,,,,, +1773178830,,,,, +1773178831,,,,, +1773178832,,,,, +1773178833,,,,, +1773178834,,,,, +1773178835,,,,, +1773178836,,,,, +1773178837,,,,, +1773178838,,,,, +1773178839,,,,, +1773178840,,,,, +1773178841,,,,, +1773178842,,,,, +1773178843,,,,, +1773178844,,,,, +1773178845,,,,, +1773178846,,,,, +1773178847,,,,, +1773178848,,,,, +1773178850,,,,, +1773178851,,,,, +1773178852,,,,, +1773178853,,,,, +1773178854,,,,, +1773178855,,,,, +1773178856,,,,, +1773178857,,,,, +1773178858,,,,, +1773178859,,,,, +1773178860,,,,, +1773178861,,,,, +1773178862,,,,, +1773178863,,,,, +1773178864,,,,, +1773178865,,,,, +1773178866,,,,, +1773178867,,,,, +1773178868,,,,, +1773178869,,,,, +1773178870,,,,, +1773178871,,,,, +1773178872,,,,, +1773178873,,,,, +1773178874,,,,, +1773178875,,,,, +1773178876,,,,, +1773178877,,,,, +1773178878,,,,, +1773178879,,,,, +1773178880,,,,, +1773178882,,,,, +1773178883,,,,, +1773178884,,,,, +1773178885,,,,, +1773178886,,,,, +1773178887,,,,, +1773178888,,,,, +1773178889,,,,, +1773178890,,,,, +1773178891,,,,, +1773178892,,,,, +1773178893,,,,, +1773178894,,,,, +1773178895,,,,, +1773178896,,,,, +1773178897,,,,, +1773178898,,,,, +1773178899,,,,, +1773178900,,,,, +1773178901,,,,, +1773178902,,,,, +1773178903,,,,, +1773178904,,,,, +1773178905,,,,, +1773178906,,,,, +1773178907,,,,, +1773178908,,,,, +1773178909,,,,, +1773178910,,,,, +1773178911,,,,, +1773178912,,,,, +1773178914,,,,, +1773178915,,,,, +1773178916,,,,, +1773178917,,,,, +1773178918,,,,, +1773178919,,,,, +1773178920,,,,, +1773178921,,,,, +1773178922,,,,, +1773178923,,,,, +1773178924,,,,, +1773178925,,,,, +1773178926,,,,, +1773178927,,,,, +1773178928,,,,, +1773178929,,,,, +1773178930,,,,, +1773178931,,,,, +1773178932,,,,, +1773178933,,,,, +1773178934,,,,, +1773178935,,,,, +1773178936,,,,, +1773178937,,,,, diff --git a/benchmarks/liveview/results/20260310-172933/approach2/memory.txt b/benchmarks/liveview/results/20260310-172933/approach2/memory.txt new file mode 100644 index 00000000..e3c8e438 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach2/memory.txt @@ -0,0 +1,6 @@ +config_memory: 1024m +config_cpus: 4 +image_type: headless +idle: 194.7MiB / 1GiB +after-workload: 343.1MiB / 1GiB +image_size: 2.11GB diff --git a/benchmarks/liveview/results/20260310-172933/approach2/results.json b/benchmarks/liveview/results/20260310-172933/approach2/results.json new file mode 100644 index 00000000..5187f28b --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach2/results.json @@ -0,0 +1,445 @@ +{ + "label": "approach2", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 27.224, + "median_ms": 27.224, + "mean_ms": 27.224, + "p95_ms": 27.224, + "max_ms": 27.224 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 50.914, + "median_ms": 57.438, + "mean_ms": 65.076, + "p95_ms": 109.509, + "max_ms": 109.509 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 63.155, + "median_ms": 120.992, + "mean_ms": 133.695, + "p95_ms": 277.353, + "max_ms": 277.353 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 64.37, + "median_ms": 446.255, + "mean_ms": 372.494, + "p95_ms": 880.495, + "max_ms": 880.495 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 27.499, + "median_ms": 38.714, + "mean_ms": 92.825, + "p95_ms": 241.784, + "max_ms": 241.784 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 0.379, + "median_ms": 0.473, + "mean_ms": 12.424, + "p95_ms": 71.959, + "max_ms": 71.959 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 0.275, + "median_ms": 0.338, + "mean_ms": 13.735, + "p95_ms": 80.778, + "max_ms": 80.778 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 0.434, + "median_ms": 0.739, + "mean_ms": 1.182, + "p95_ms": 2.97, + "max_ms": 2.97 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 4.01, + "median_ms": 4.9, + "mean_ms": 6.353, + "p95_ms": 15.082, + "max_ms": 15.082 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 0.27, + "median_ms": 0.49, + "mean_ms": 7.788, + "p95_ms": 28.2, + "max_ms": 28.2 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 0.455, + "median_ms": 0.652, + "mean_ms": 1.618, + "p95_ms": 4.935, + "max_ms": 4.935 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 0.432, + "median_ms": 4.425, + "mean_ms": 6.749, + "p95_ms": 27.402, + "max_ms": 27.402 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 0.21, + "median_ms": 0.277, + "mean_ms": 6.904, + "p95_ms": 36.173, + "max_ms": 36.173 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 0.268, + "median_ms": 5.919, + "mean_ms": 6.32, + "p95_ms": 20.872, + "max_ms": 20.872 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 0.224, + "median_ms": 22.129, + "mean_ms": 21.578, + "p95_ms": 54.873, + "max_ms": 54.873 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 0.185, + "median_ms": 0.304, + "mean_ms": 1.926, + "p95_ms": 10.228, + "max_ms": 10.228 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 0.155, + "median_ms": 24.249, + "mean_ms": 18.641, + "p95_ms": 56.774, + "max_ms": 56.774 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 1.457, + "median_ms": 4.851, + "mean_ms": 4.512, + "p95_ms": 7.461, + "max_ms": 7.461 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 0.869, + "median_ms": 3.375, + "mean_ms": 4.508, + "p95_ms": 12.604, + "max_ms": 12.604 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 5.963, + "median_ms": 9.377, + "mean_ms": 43.176, + "p95_ms": 187.579, + "max_ms": 187.579 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 71.868, + "median_ms": 76.264, + "mean_ms": 107.119, + "p95_ms": 184.897, + "max_ms": 184.897 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 0.289, + "median_ms": 0.394, + "mean_ms": 0.455, + "p95_ms": 0.989, + "max_ms": 0.989 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 3.432, + "median_ms": 54.98, + "mean_ms": 37.067, + "p95_ms": 70.222, + "max_ms": 70.222 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 33.84, + "median_ms": 135.05, + "mean_ms": 302.978, + "p95_ms": 1004.812, + "max_ms": 1004.812 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 0.842, + "median_ms": 1.287, + "mean_ms": 1.161, + "p95_ms": 1.334, + "max_ms": 1.334 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 0.282, + "median_ms": 3.29, + "mean_ms": 36.581, + "p95_ms": 129.804, + "max_ms": 129.804 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 32.068, + "median_ms": 216.865, + "mean_ms": 506.086, + "p95_ms": 1624.06, + "max_ms": 1624.06 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 0.209, + "median_ms": 0.302, + "mean_ms": 0.333, + "p95_ms": 0.51, + "max_ms": 0.51 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 1.248, + "median_ms": 110.363, + "mean_ms": 154.168, + "p95_ms": 395.524, + "max_ms": 395.524 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 0.103, + "median_ms": 0.151, + "mean_ms": 0.147, + "p95_ms": 0.194, + "max_ms": 0.194 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 0.107, + "median_ms": 0.121, + "mean_ms": 0.152, + "p95_ms": 0.321, + "max_ms": 0.321 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 9.911, + "median_ms": 16.903, + "mean_ms": 14.92, + "p95_ms": 20.474, + "max_ms": 20.474 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 139.147, + "median_ms": 156.656, + "mean_ms": 173.018, + "p95_ms": 275.843, + "max_ms": 275.843 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 3.054, + "median_ms": 3.424, + "mean_ms": 3.573, + "p95_ms": 4.918, + "max_ms": 4.918 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 5.71, + "median_ms": 6.734, + "mean_ms": 6.616, + "p95_ms": 7.832, + "max_ms": 7.832 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 25.105, + "median_ms": 26.754, + "mean_ms": 26.698, + "p95_ms": 28.718, + "max_ms": 28.718 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 590.215, + "median_ms": 691.679, + "mean_ms": 662.348, + "p95_ms": 720.257, + "max_ms": 720.257 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 500.693, + "median_ms": 503.454, + "mean_ms": 505.252, + "p95_ms": 516.985, + "max_ms": 516.985 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 113.849, + "median_ms": 214.432, + "mean_ms": 182.973, + "p95_ms": 220.637, + "max_ms": 220.637 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 1364.118, + "median_ms": 1364.118, + "mean_ms": 1364.118, + "p95_ms": 1364.118, + "max_ms": 1364.118 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 867.178, + "median_ms": 867.178, + "mean_ms": 867.178, + "p95_ms": 867.178, + "max_ms": 867.178 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 507, + "min_ms": 0.18, + "median_ms": 0.328, + "mean_ms": 0.333, + "p95_ms": 0.496, + "max_ms": 0.736 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 507, + "min_ms": 0.198, + "median_ms": 18.368, + "mean_ms": 18.874, + "p95_ms": 37.714, + "max_ms": 65.762 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 507, + "min_ms": 59.846, + "median_ms": 98.546, + "mean_ms": 99.875, + "p95_ms": 128.578, + "max_ms": 135.701 + } + ] +} diff --git a/benchmarks/liveview/results/20260310-172933/approach2/results.md b/benchmarks/liveview/results/20260310-172933/approach2/results.md new file mode 100644 index 00000000..6526bfb3 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/approach2/results.md @@ -0,0 +1,61 @@ + +## approach2 + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 23.9ms | 23.9ms | 23.9ms | 23.9ms | 23.9ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 51.6ms | 71.8ms | 122.9ms | 392.8ms | 392.8ms | 6 | +| Screenshot.PNG | 79.3ms | 111.8ms | 125.9ms | 219.7ms | 219.7ms | 6 | +| Screenshot.FullPage | 69.8ms | 478.3ms | 372.2ms | 824.2ms | 824.2ms | 6 | +| Screenshot.ClipRegion | 24.9ms | 38.4ms | 93.9ms | 223.2ms | 223.2ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 461µs | 540µs | 12.4ms | 71.3ms | 71.3ms | 6 | +| Eval.QuerySelectorAll | 291µs | 457µs | 483µs | 886µs | 886µs | 6 | +| Eval.InnerText | 461µs | 917µs | 12.9ms | 72.0ms | 72.0ms | 6 | +| Eval.GetComputedStyle | 4.2ms | 4.8ms | 6.1ms | 12.9ms | 12.9ms | 6 | +| Eval.ScrollToBottom | 312µs | 382µs | 405µs | 604µs | 604µs | 6 | +| Eval.DOMManipulation | 514µs | 677µs | 765µs | 1.2ms | 1.2ms | 6 | +| Eval.BoundingRects | 495µs | 834µs | 841µs | 1.2ms | 1.2ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 229µs | 288µs | 745µs | 3.1ms | 3.1ms | 6 | +| DOM.GetDocument.Deep | 289µs | 2.2ms | 2.6ms | 6.4ms | 6.4ms | 6 | +| DOM.GetDocument.Full | 269µs | 22.2ms | 21.6ms | 54.2ms | 54.2ms | 6 | +| DOM.QuerySelector | 230µs | 338µs | 1.7ms | 8.5ms | 8.5ms | 6 | +| DOM.GetOuterHTML | 196µs | 21.9ms | 13.0ms | 26.4ms | 26.4ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 1.9ms | 7.3ms | 7.3ms | 13.6ms | 13.6ms | 6 | +| Input.Click | 1.3ms | 3.3ms | 6.3ms | 24.5ms | 24.5ms | 6 | +| Input.TypeText | 8.8ms | 9.4ms | 69.5ms | 215.8ms | 215.8ms | 6 | +| Input.Scroll | 69.9ms | 73.1ms | 94.6ms | 158.7ms | 158.7ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 299µs | 477µs | 718µs | 2.2ms | 2.2ms | 6 | +| Network.GetResponseBody | 3.7ms | 55.4ms | 77.5ms | 286.2ms | 286.2ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 33.6ms | 153.5ms | 388.9ms | 1.17s | 1.17s | 6 | +| Page.GetNavigationHistory | 854µs | 1.5ms | 1.5ms | 2.9ms | 2.9ms | 6 | +| Page.GetLayoutMetrics | 392µs | 3.2ms | 23.9ms | 115.8ms | 115.8ms | 6 | +| Page.PrintToPDF | 37.7ms | 227.2ms | 329.0ms | 1.31s | 1.31s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 225µs | 378µs | 352µs | 557µs | 557µs | 6 | +| Emulation.SetMobile | 1.3ms | 97.6ms | 109.8ms | 387.0ms | 387.0ms | 6 | +| Emulation.SetGeolocation | 114µs | 184µs | 182µs | 248µs | 248µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 113µs | 148µs | 148µs | 176µs | 176µs | 6 | +| Target.CreateAndClose | 14.6ms | 17.6ms | 17.2ms | 23.5ms | 23.5ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 105.5ms | 128.1ms | 170.4ms | 366.7ms | 366.7ms | 6 | +| Composite.ScrapeLinks | 3.3ms | 3.6ms | 3.6ms | 4.0ms | 4.0ms | 6 | +| Composite.FillForm | 5.1ms | 6.9ms | 6.5ms | 7.5ms | 7.5ms | 6 | +| Composite.ClickAndWait | 20.9ms | 28.0ms | 25.4ms | 29.0ms | 29.0ms | 6 | +| Composite.RapidScreenshots | 535.0ms | 683.1ms | 658.0ms | 709.5ms | 709.5ms | 6 | +| Composite.ScrollAndCapture | 497.7ms | 538.5ms | 522.7ms | 557.3ms | 557.3ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 107.0ms | 109.5ms | 146.5ms | 223.1ms | 223.1ms | 3 | +| Navigate[spa] | 1.33s | 1.33s | 1.33s | 1.33s | 1.33s | 1 | +| Navigate[media] | 1.63s | 1.63s | 1.63s | 1.63s | 1.63s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 191µs | 362µs | 383µs | 576µs | 2.3ms | 480 | +| Concurrent.Evaluate | 199µs | 19.7ms | 19.8ms | 41.5ms | 46.9ms | 480 | +| Concurrent.Screenshot | 60.7ms | 105.2ms | 105.1ms | 132.6ms | 143.5ms | 480 | diff --git a/benchmarks/liveview/results/20260310-172933/baseline/bench-json.log b/benchmarks/liveview/results/20260310-172933/baseline/bench-json.log new file mode 100644 index 00000000..4628bb2e --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/baseline/bench-json.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:31:08.051Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:31:08.052Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:31:08.053Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:31:08.053Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:31:08.056Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:31:10.316Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:31:13.020Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:31:16.613Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:31:26.118Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:31:33.406Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:31:33.406Z level=INFO msg="starting sequential benchmark" iterations=2 label=baseline +time=2026-03-10T21:31:33.407Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:31:35.801Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:31:38.485Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:31:41.986Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:31:50.464Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:31:56.464Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:32:00.272Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:32:00.273Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:32:00.273Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:32:00.273Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE diff --git a/benchmarks/liveview/results/20260310-172933/baseline/bench.log b/benchmarks/liveview/results/20260310-172933/baseline/bench.log new file mode 100644 index 00000000..87b11bdb --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/baseline/bench.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:29:51.852Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:29:51.853Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:29:51.853Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:29:51.853Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:29:51.855Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:29:55.054Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:29:58.054Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:30:01.701Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:30:11.436Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:30:20.402Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:30:20.402Z level=INFO msg="starting sequential benchmark" iterations=2 label=baseline +time=2026-03-10T21:30:20.403Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:30:22.615Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:30:25.172Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:30:28.767Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:30:37.249Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:30:44.117Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:30:47.852Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:30:47.853Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:30:47.853Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE +time=2026-03-10T21:30:47.853Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/F5A9CBC00327BEDE851035590C32E9DE diff --git a/benchmarks/liveview/results/20260310-172933/baseline/container.log b/benchmarks/liveview/results/20260310-172933/baseline/container.log new file mode 100644 index 00000000..8c863398 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/baseline/container.log @@ -0,0 +1,43 @@ +[wrapper] Starting dynamic log aggregator for /var/log/supervisord +[wrapper] Starting supervisord +[wrapper] Waiting for supervisord socket... +[envoy-init] Required environment variables not set. Skipping Envoy initialization. +[wrapper] Starting system D-Bus daemon via supervisord +dbus: started +[wrapper] Starting Xvfb via supervisord +[xvfb] Starting Xvfb on :1 with 1920x1080x24, DPI 96 +xvfb: started +[wrapper] Starting Chromium via supervisord on internal port 9223 +chromium: started +[wrapper] Waiting for Chromium remote debugging on 127.0.0.1:9223... +[chromium] BASE_FLAGS: --accept-lang=en-US,en --allow-pre-commit-input --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --crash-dumps-dir=/tmp/chromium-dumps --disable-back-forward-cache --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-blink-features=AutomationControlled --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-crash-reporter --disable-crashpad --disable-dev-shm-usage --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --disable-field-trial-config --disable-gcm-registration --disable-gpu --disable-gpu-compositing --disable-hang-monitor --disable-ipc-flooding-protection --disable-notifications --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --disable-software-rasterizer --enable-use-zoom-for-dsf=false --export-tagged-pdf --force-color-profile=srgb --hide-crash-restore-bubble --hide-scrollbars --metrics-recording-only --mute-audio --no-default-browser-check --no-first-run --no-sandbox --no-service-autorun --ozone-platform=headless --password-store=basic --unsafely-disable-devtools-self-xss-warnings --use-angle=swiftshader --use-gl=angle --use-mock-keychain +[chromium] RUNTIME_FLAGS: +[chromium] FINAL_FLAGS: --accept-lang=en-US,en --allow-pre-commit-input --blink-settings=primaryHoverType=2,availableHoverTypes=2,primaryPointerType=4,availablePointerTypes=4 --crash-dumps-dir=/tmp/chromium-dumps --disable-back-forward-cache --disable-background-timer-throttling --disable-backgrounding-occluded-windows --disable-blink-features=AutomationControlled --disable-breakpad --disable-client-side-phishing-detection --disable-component-extensions-with-background-pages --disable-crash-reporter --disable-crashpad --disable-dev-shm-usage --disable-features=AcceptCHFrame,AutoExpandDetailsElement,AvoidUnnecessaryBeforeUnloadCheckSync,CertificateTransparencyComponentUpdater,DeferRendererTasksAfterInput,DestroyProfileOnBrowserClose,DialMediaRouteProvider,ExtensionManifestV2Disabled,GlobalMediaControls,HttpsUpgrades,ImprovedCookieControls,LazyFrameLoading,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate --disable-field-trial-config --disable-gcm-registration --disable-gpu --disable-gpu-compositing --disable-hang-monitor --disable-ipc-flooding-protection --disable-notifications --disable-popup-blocking --disable-prompt-on-repost --disable-renderer-backgrounding --disable-search-engine-choice-screen --disable-software-rasterizer --enable-use-zoom-for-dsf=false --export-tagged-pdf --force-color-profile=srgb --hide-crash-restore-bubble --hide-scrollbars --metrics-recording-only --mute-audio --no-default-browser-check --no-first-run --no-sandbox --no-service-autorun --ozone-platform=headless --password-store=basic --unsafely-disable-devtools-self-xss-warnings --use-angle=swiftshader --use-gl=angle --use-mock-keychain +[chromium] +[chromium] DevTools listening on ws://127.0.0.1:9223/devtools/browser/709596cf-9198-4693-98a5-9046c30dd5e9 +[wrapper] Chromium remote debugging is ready on 127.0.0.1:9223 +[wrapper] ✨ Starting kernel-images API via supervisord. +[chromium] [94:94:0310/212939.995723:ERROR:dbus/object_proxy.cc:572] Failed to call method: org.freedesktop.DBus.Properties.GetAll: object_path= /org/freedesktop/UPower/devices/DisplayDevice: org.freedesktop.DBus.Error.ServiceUnknown: The name org.freedesktop.UPower was not provided by any .service files +[kernel-images-api] time=2026-03-10T21:29:40.189Z level=INFO msg="server configuration" config="&{Port:10001 FrameRate:10 DisplayNum:1 MaxSizeInMB:500 OutputDir:/recordings PathToFFmpeg:ffmpeg DevToolsProxyPort:9222 LogCDPMessages:false ChromeDriverProxyPort:9224 ChromeDriverUpstreamAddr:127.0.0.1:9225 DevToolsProxyAddr:127.0.0.1:9222}" +[kernel-images-api] time=2026-03-10T21:29:40.204Z level=INFO msg="devtools upstream updated" url=ws://127.0.0.1:9223/devtools/browser/709596cf-9198-4693-98a5-9046c30dd5e9 +[kernel-images-api] time=2026-03-10T21:29:40.303Z level=INFO msg="http server starting" addr=:10001 +[kernel-images-api] time=2026-03-10T21:29:40.303Z level=INFO msg="chromedriver proxy starting" addr=0.0.0.0:9224 +[kernel-images-api] time=2026-03-10T21:29:40.303Z level=INFO msg="devtools websocket proxy starting" addr=0.0.0.0:9222 +kernel-images-api: started +[wrapper] Waiting for kernel-images API on 127.0.0.1:10001... +[wrapper] kernel-images API is ready on 127.0.0.1:10001 +[wrapper] Starting ChromeDriver via supervisord +[chromedriver] Starting ChromeDriver 145.0.7632.159 (838c69b2e5b8cd00a916e35097249bc20eb25a0a-refs/branch-heads/7632@{#3673}) on port 9225 +[chromedriver] Remote connections are allowed by an allowlist (127.0.0.1). +[chromedriver] Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. +[chromedriver] ChromeDriver was started successfully on port 9225. +[chromium] [94:124:0310/212943.456376:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +chromedriver: started +[wrapper] Waiting for ChromeDriver on 127.0.0.1:9225... +[wrapper] ChromeDriver is ready on 127.0.0.1:9225 +[wrapper] startup complete! +[chromium] [94:124:0310/213007.020408:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [136:143:0310/213045.402806:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:385] SharedImageManager::ProduceMemory: Trying to Produce a Memory representation from a non-existent mailbox. +[chromium] [136:143:0310/213045.402992:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:385] SharedImageManager::ProduceMemory: Trying to Produce a Memory representation from a non-existent mailbox. +[chromium] [136:143:0310/213045.403063:ERROR:gpu/command_buffer/service/shared_image/shared_image_manager.cc:385] SharedImageManager::ProduceMemory: Trying to Produce a Memory representation from a non-existent mailbox. +[chromium] [94:124:0310/213102.350917:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT diff --git a/benchmarks/liveview/results/20260310-172933/baseline/docker-stats.csv b/benchmarks/liveview/results/20260310-172933/baseline/docker-stats.csv new file mode 100644 index 00000000..b9172ce6 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/baseline/docker-stats.csv @@ -0,0 +1,301 @@ +timestamp,cpu_pct,mem_usage,mem_limit,mem_pct,net_io,pids +1773178193,33.07%,179.7MiB / 1GiB,17.55%,1.72MB / 72.6kB,130 +1773178195,46.10%,182.2MiB / 1GiB,17.79%,3.93MB / 110kB,131 +1773178197,78.95%,206.2MiB / 1GiB,20.14%,3.95MB / 113kB,132 +1773178199,101.59%,254.1MiB / 1GiB,24.82%,4.6MB / 164kB,135 +1773178201,59.77%,210.7MiB / 1GiB,20.57%,4.67MB / 173kB,142 +1773178203,243.46%,384.2MiB / 1GiB,37.52%,19.3MB / 330kB,154 +1773178206,129.94%,342.3MiB / 1GiB,33.43%,19.3MB / 406kB,179 +1773178208,192.02%,416.1MiB / 1GiB,40.63%,25.9MB / 489kB,179 +1773178210,169.21%,455.6MiB / 1GiB,44.49%,25.9MB / 540kB,191 +1773178212,176.95%,266.6MiB / 1GiB,26.03%,27.7MB / 645kB,157 +1773178214,284.15%,463.4MiB / 1GiB,45.25%,31.2MB / 1.02MB,226 +1773178216,248.26%,514.1MiB / 1GiB,50.21%,33.1MB / 1.23MB,190 +1773178218,295.78%,232.3MiB / 1GiB,22.69%,33.2MB / 1.26MB,156 +1773178220,7.32%,230.3MiB / 1GiB,22.49%,33.2MB / 1.26MB,156 +1773178222,98.43%,232.1MiB / 1GiB,22.66%,33.2MB / 1.26MB,156 +1773178224,136.67%,241.2MiB / 1GiB,23.56%,33.3MB / 1.26MB,156 +1773178226,76.08%,368.5MiB / 1GiB,35.98%,33.3MB / 1.27MB,159 +1773178228,111.82%,239.8MiB / 1GiB,23.42%,33.3MB / 1.27MB,156 +1773178230,218.17%,353.8MiB / 1GiB,34.55%,33.4MB / 1.3MB,164 +1773178232,137.32%,382.7MiB / 1GiB,37.37%,33.5MB / 1.41MB,182 +1773178234,203.67%,534.6MiB / 1GiB,52.21%,40MB / 1.47MB,189 +1773178236,185.65%,249.8MiB / 1GiB,24.39%,40MB / 1.5MB,156 +1773178238,246.23%,392.4MiB / 1GiB,38.32%,40.1MB / 1.54MB,187 +1773178240,264.88%,495.2MiB / 1GiB,48.36%,54.4MB / 1.79MB,198 +1773178242,259.95%,590.2MiB / 1GiB,57.63%,59.9MB / 1.87MB,194 +1773178244,74.19%,277.7MiB / 1GiB,27.12%,60MB / 1.88MB,155 +1773178246,122.98%,297.1MiB / 1GiB,29.01%,60MB / 1.89MB,164 +1773178248,135.22%,328.3MiB / 1GiB,32.06%,60.4MB / 1.89MB,166 +1773178250,122.00%,338.7MiB / 1GiB,33.08%,60.4MB / 1.9MB,166 +1773178253,181.98%,326MiB / 1GiB,31.84%,67.8MB / 1.99MB,166 +1773178255,127.37%,346MiB / 1GiB,33.79%,67.8MB / 1.99MB,166 +1773178257,125.86%,344.5MiB / 1GiB,33.64%,67.8MB / 1.99MB,166 +1773178259,133.47%,361.5MiB / 1GiB,35.30%,67.8MB / 1.99MB,166 +1773178261,132.06%,345.2MiB / 1GiB,33.71%,67.8MB / 1.99MB,166 +1773178263,128.70%,378.2MiB / 1GiB,36.93%,67.8MB / 2MB,166 +1773178265,118.26%,346.7MiB / 1GiB,33.86%,67.8MB / 2MB,166 +1773178267,124.46%,345.7MiB / 1GiB,33.76%,67.8MB / 2MB,166 +1773178269,102.55%,322.9MiB / 1GiB,31.53%,67.8MB / 2.01MB,157 +1773178271,49.07%,302.4MiB / 1GiB,29.53%,67.8MB / 2.01MB,156 +1773178273,109.67%,336.7MiB / 1GiB,32.88%,67.9MB / 2.02MB,157 +1773178275,172.64%,313.2MiB / 1GiB,30.59%,67.9MB / 2.03MB,157 +1773178277,235.57%,448.2MiB / 1GiB,43.77%,74.4MB / 2.07MB,171 +1773178279,180.93%,529.8MiB / 1GiB,51.74%,80.9MB / 2.15MB,183 +1773178281,54.49%,504.2MiB / 1GiB,49.24%,87.5MB / 2.29MB,183 +1773178283,140.11%,639.8MiB / 1GiB,62.48%,87.5MB / 2.31MB,190 +1773178285,176.66%,327MiB / 1GiB,31.94%,87.5MB / 2.34MB,157 +1773178287,316.31%,543.8MiB / 1GiB,53.10%,88MB / 2.56MB,242 +1773178289,226.45%,577.4MiB / 1GiB,56.39%,88.5MB / 2.73MB,192 +1773178291,164.17%,334.8MiB / 1GiB,32.70%,88.6MB / 2.76MB,157 +1773178293,19.66%,312.8MiB / 1GiB,30.55%,88.6MB / 2.76MB,156 +1773178295,79.40%,325.1MiB / 1GiB,31.75%,88.6MB / 2.77MB,157 +1773178298,140.97%,335.2MiB / 1GiB,32.74%,88.6MB / 2.77MB,157 +1773178300,105.48%,378.4MiB / 1GiB,36.95%,88.6MB / 2.77MB,158 +1773178302,109.14%,348.7MiB / 1GiB,34.05%,88.7MB / 2.77MB,163 +1773178304,161.80%,420.6MiB / 1GiB,41.08%,88.7MB / 2.8MB,177 +1773178306,142.24%,533.3MiB / 1GiB,52.08%,88.9MB / 2.91MB,183 +1773178308,172.47%,728.1MiB / 1GiB,71.11%,95.4MB / 2.98MB,190 +1773178310,116.37%,264.1MiB / 1GiB,25.79%,95.4MB / 3MB,158 +1773178312,293.43%,469.7MiB / 1GiB,45.87%,95.4MB / 3.06MB,224 +1773178314,218.04%,499.3MiB / 1GiB,48.76%,95.9MB / 3.17MB,178 +1773178316,72.66%,269.1MiB / 1GiB,26.27%,96MB / 3.18MB,157 +1773178318,145.30%,270.9MiB / 1GiB,26.45%,96MB / 3.19MB,158 +1773178320,32.48%,310.7MiB / 1GiB,30.34%,96MB / 3.19MB,159 +1773178322,142.46%,302.2MiB / 1GiB,29.52%,96MB / 3.19MB,159 +1773178324,128.14%,319.6MiB / 1GiB,31.21%,96MB / 3.19MB,159 +1773178326,129.23%,301.7MiB / 1GiB,29.46%,96MB / 3.19MB,159 +1773178328,126.32%,291.5MiB / 1GiB,28.46%,96MB / 3.19MB,159 +1773178330,119.65%,307.2MiB / 1GiB,30.00%,96MB / 3.19MB,159 +1773178332,130.39%,305.9MiB / 1GiB,29.88%,96MB / 3.19MB,159 +1773178334,123.83%,300.5MiB / 1GiB,29.35%,96MB / 3.19MB,159 +1773178336,123.08%,296.7MiB / 1GiB,28.97%,96MB / 3.19MB,159 +1773178338,124.02%,291.1MiB / 1GiB,28.43%,96MB / 3.19MB,159 +1773178340,59.98%,274.5MiB / 1GiB,26.81%,96MB / 3.19MB,151 +1773178342,,,,, +1773178343,,,,, +1773178344,,,,, +1773178345,,,,, +1773178346,,,,, +1773178347,,,,, +1773178348,,,,, +1773178350,,,,, +1773178351,,,,, +1773178352,,,,, +1773178353,,,,, +1773178354,,,,, +1773178355,,,,, +1773178356,,,,, +1773178357,,,,, +1773178358,,,,, +1773178359,,,,, +1773178360,,,,, +1773178361,,,,, +1773178362,,,,, +1773178363,,,,, +1773178364,,,,, +1773178365,,,,, +1773178366,,,,, +1773178367,,,,, +1773178368,,,,, +1773178369,,,,, +1773178370,,,,, +1773178371,,,,, +1773178372,,,,, +1773178373,,,,, +1773178374,,,,, +1773178375,,,,, +1773178376,,,,, +1773178377,,,,, +1773178378,,,,, +1773178379,,,,, +1773178381,,,,, +1773178382,,,,, +1773178383,,,,, +1773178384,,,,, +1773178385,,,,, +1773178386,,,,, +1773178387,,,,, +1773178388,,,,, +1773178389,,,,, +1773178390,,,,, +1773178391,,,,, +1773178392,,,,, +1773178393,,,,, +1773178394,,,,, +1773178395,,,,, +1773178396,,,,, +1773178397,,,,, +1773178398,,,,, +1773178399,,,,, +1773178400,,,,, +1773178401,,,,, +1773178402,,,,, +1773178403,,,,, +1773178404,,,,, +1773178405,,,,, +1773178406,,,,, +1773178407,,,,, +1773178408,,,,, +1773178409,,,,, +1773178410,,,,, +1773178411,,,,, +1773178413,,,,, +1773178414,,,,, +1773178415,,,,, +1773178416,,,,, +1773178417,,,,, +1773178418,,,,, +1773178419,,,,, +1773178420,,,,, +1773178421,,,,, +1773178422,,,,, +1773178423,,,,, +1773178424,,,,, +1773178425,,,,, +1773178426,,,,, +1773178427,,,,, +1773178428,,,,, +1773178429,,,,, +1773178430,,,,, +1773178431,,,,, +1773178432,,,,, +1773178433,,,,, +1773178434,,,,, +1773178435,,,,, +1773178436,,,,, +1773178437,,,,, +1773178438,,,,, +1773178439,,,,, +1773178440,,,,, +1773178441,,,,, +1773178442,,,,, +1773178444,,,,, +1773178445,,,,, +1773178446,,,,, +1773178447,,,,, +1773178448,,,,, +1773178449,,,,, +1773178450,,,,, +1773178451,,,,, +1773178452,,,,, +1773178453,,,,, +1773178454,,,,, +1773178455,,,,, +1773178456,,,,, +1773178457,,,,, +1773178458,,,,, +1773178459,,,,, +1773178460,,,,, +1773178461,,,,, +1773178462,,,,, +1773178463,,,,, +1773178464,,,,, +1773178465,,,,, +1773178466,,,,, +1773178467,,,,, +1773178468,,,,, +1773178469,,,,, +1773178470,,,,, +1773178471,,,,, +1773178472,,,,, +1773178473,,,,, +1773178474,,,,, +1773178476,,,,, +1773178477,,,,, +1773178478,,,,, +1773178479,,,,, +1773178480,,,,, +1773178481,,,,, +1773178482,,,,, +1773178483,,,,, +1773178484,,,,, +1773178485,,,,, +1773178486,,,,, +1773178487,,,,, +1773178488,,,,, +1773178489,,,,, +1773178490,,,,, +1773178491,,,,, +1773178492,,,,, +1773178493,,,,, +1773178494,,,,, +1773178495,,,,, +1773178496,,,,, +1773178497,,,,, +1773178498,,,,, +1773178499,,,,, +1773178500,,,,, +1773178501,,,,, +1773178502,,,,, +1773178503,,,,, +1773178504,,,,, +1773178505,,,,, +1773178506,,,,, +1773178508,,,,, +1773178509,,,,, +1773178510,,,,, +1773178511,,,,, +1773178512,,,,, +1773178513,,,,, +1773178514,,,,, +1773178515,,,,, +1773178516,,,,, +1773178517,,,,, +1773178518,,,,, +1773178519,,,,, +1773178520,,,,, +1773178521,,,,, +1773178522,,,,, +1773178523,,,,, +1773178524,,,,, +1773178525,,,,, +1773178526,,,,, +1773178527,,,,, +1773178528,,,,, +1773178529,,,,, +1773178530,,,,, +1773178531,,,,, +1773178532,,,,, +1773178533,,,,, +1773178534,,,,, +1773178535,,,,, +1773178536,,,,, +1773178537,,,,, +1773178539,,,,, +1773178540,,,,, +1773178541,,,,, +1773178542,,,,, +1773178543,,,,, +1773178544,,,,, +1773178545,,,,, +1773178546,,,,, +1773178547,,,,, +1773178548,,,,, +1773178549,,,,, +1773178550,,,,, +1773178551,,,,, +1773178552,,,,, +1773178553,,,,, +1773178554,,,,, +1773178555,,,,, +1773178556,,,,, +1773178557,,,,, +1773178558,,,,, +1773178559,,,,, +1773178560,,,,, +1773178561,,,,, +1773178562,,,,, +1773178563,,,,, +1773178564,,,,, +1773178565,,,,, +1773178566,,,,, +1773178567,,,,, +1773178568,,,,, +1773178570,,,,, +1773178571,,,,, +1773178572,,,,, +1773178573,,,,, +1773178574,,,,, +1773178575,,,,, +1773178576,,,,, diff --git a/benchmarks/liveview/results/20260310-172933/baseline/memory.txt b/benchmarks/liveview/results/20260310-172933/baseline/memory.txt new file mode 100644 index 00000000..a7e24651 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/baseline/memory.txt @@ -0,0 +1,6 @@ +config_memory: 1024m +config_cpus: 4 +image_type: headless +idle: 198.8MiB / 1GiB +after-workload: 274.2MiB / 1GiB +image_size: 2.1GB diff --git a/benchmarks/liveview/results/20260310-172933/baseline/results.json b/benchmarks/liveview/results/20260310-172933/baseline/results.json new file mode 100644 index 00000000..b7bb40f5 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/baseline/results.json @@ -0,0 +1,445 @@ +{ + "label": "baseline", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 22.845, + "median_ms": 22.845, + "mean_ms": 22.845, + "p95_ms": 22.845, + "max_ms": 22.845 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 51.345, + "median_ms": 62.523, + "mean_ms": 75.413, + "p95_ms": 167.162, + "max_ms": 167.162 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 79.646, + "median_ms": 108.226, + "mean_ms": 124.158, + "p95_ms": 210.735, + "max_ms": 210.735 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 65.87, + "median_ms": 461.37, + "mean_ms": 413.155, + "p95_ms": 1152.749, + "max_ms": 1152.749 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 23.273, + "median_ms": 36.583, + "mean_ms": 83.059, + "p95_ms": 197.611, + "max_ms": 197.611 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 0.473, + "median_ms": 0.596, + "mean_ms": 10.577, + "p95_ms": 56.702, + "max_ms": 56.702 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 0.353, + "median_ms": 0.56, + "mean_ms": 2.326, + "p95_ms": 7.489, + "max_ms": 7.489 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 0.435, + "median_ms": 0.964, + "mean_ms": 13.809, + "p95_ms": 78.083, + "max_ms": 78.083 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 4.216, + "median_ms": 5.284, + "mean_ms": 5.787, + "p95_ms": 10.527, + "max_ms": 10.527 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 0.296, + "median_ms": 0.376, + "mean_ms": 0.356, + "p95_ms": 0.385, + "max_ms": 0.385 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 0.518, + "median_ms": 0.627, + "mean_ms": 0.965, + "p95_ms": 2.841, + "max_ms": 2.841 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 0.497, + "median_ms": 0.855, + "mean_ms": 1.047, + "p95_ms": 2.683, + "max_ms": 2.683 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 0.19, + "median_ms": 0.238, + "mean_ms": 0.25, + "p95_ms": 0.348, + "max_ms": 0.348 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 0.279, + "median_ms": 4.163, + "mean_ms": 2.885, + "p95_ms": 6.158, + "max_ms": 6.158 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 0.235, + "median_ms": 17.816, + "mean_ms": 20.188, + "p95_ms": 50.79, + "max_ms": 50.79 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 0.206, + "median_ms": 0.305, + "mean_ms": 2.025, + "p95_ms": 10.827, + "max_ms": 10.827 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 0.177, + "median_ms": 22.957, + "mean_ms": 39.177, + "p95_ms": 183.755, + "max_ms": 183.755 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 1.942, + "median_ms": 4.502, + "mean_ms": 5.853, + "p95_ms": 14.707, + "max_ms": 14.707 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 1.196, + "median_ms": 3.2, + "mean_ms": 6.487, + "p95_ms": 25.497, + "max_ms": 25.497 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 7.124, + "median_ms": 9.456, + "mean_ms": 53.205, + "p95_ms": 172.115, + "max_ms": 172.115 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 70.026, + "median_ms": 74.519, + "mean_ms": 103.205, + "p95_ms": 164.052, + "max_ms": 164.052 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 0.252, + "median_ms": 0.483, + "mean_ms": 0.544, + "p95_ms": 1.285, + "max_ms": 1.285 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 3.346, + "median_ms": 65.738, + "mean_ms": 137.784, + "p95_ms": 613.692, + "max_ms": 613.692 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 26.626, + "median_ms": 139.828, + "mean_ms": 300.225, + "p95_ms": 965.358, + "max_ms": 965.358 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 0.865, + "median_ms": 1.234, + "mean_ms": 1.231, + "p95_ms": 2.033, + "max_ms": 2.033 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 0.205, + "median_ms": 3.612, + "mean_ms": 26.151, + "p95_ms": 144.11, + "max_ms": 144.11 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 35.56, + "median_ms": 221.729, + "mean_ms": 366.42, + "p95_ms": 1520.307, + "max_ms": 1520.307 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 0.297, + "median_ms": 0.499, + "mean_ms": 0.487, + "p95_ms": 0.702, + "max_ms": 0.702 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 1.289, + "median_ms": 100.962, + "mean_ms": 118.123, + "p95_ms": 420.471, + "max_ms": 420.471 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 0.097, + "median_ms": 0.145, + "mean_ms": 0.136, + "p95_ms": 0.169, + "max_ms": 0.169 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 0.096, + "median_ms": 0.124, + "mean_ms": 0.126, + "p95_ms": 0.183, + "max_ms": 0.183 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 12.798, + "median_ms": 17.442, + "mean_ms": 17.435, + "p95_ms": 27.41, + "max_ms": 27.41 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 115.336, + "median_ms": 135.711, + "mean_ms": 155.396, + "p95_ms": 233.329, + "max_ms": 233.329 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 3.102, + "median_ms": 3.926, + "mean_ms": 6.457, + "p95_ms": 19.926, + "max_ms": 19.926 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 5.17, + "median_ms": 6.719, + "mean_ms": 6.592, + "p95_ms": 7.96, + "max_ms": 7.96 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 19.302, + "median_ms": 24.592, + "mean_ms": 24.888, + "p95_ms": 29.243, + "max_ms": 29.243 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 657.837, + "median_ms": 693.157, + "mean_ms": 701.507, + "p95_ms": 773.309, + "max_ms": 773.309 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 502.867, + "median_ms": 520.764, + "mean_ms": 516.32, + "p95_ms": 532.23, + "max_ms": 532.23 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 109.03, + "median_ms": 119.408, + "mean_ms": 153.589, + "p95_ms": 232.33, + "max_ms": 232.33 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 1447.248, + "median_ms": 1447.248, + "mean_ms": 1447.248, + "p95_ms": 1447.248, + "max_ms": 1447.248 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 764.462, + "median_ms": 764.462, + "mean_ms": 764.462, + "p95_ms": 764.462, + "max_ms": 764.462 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 480, + "min_ms": 0.197, + "median_ms": 0.339, + "mean_ms": 0.344, + "p95_ms": 0.483, + "max_ms": 0.782 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 480, + "min_ms": 0.209, + "median_ms": 19.081, + "mean_ms": 19.385, + "p95_ms": 39.419, + "max_ms": 61.04 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 480, + "min_ms": 64.238, + "median_ms": 106.302, + "mean_ms": 105.599, + "p95_ms": 133.143, + "max_ms": 154.575 + } + ] +} diff --git a/benchmarks/liveview/results/20260310-172933/baseline/results.md b/benchmarks/liveview/results/20260310-172933/baseline/results.md new file mode 100644 index 00000000..c62ee3d1 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/baseline/results.md @@ -0,0 +1,61 @@ + +## baseline + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 22.7ms | 22.7ms | 22.7ms | 22.7ms | 22.7ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 48.6ms | 65.4ms | 100.9ms | 305.8ms | 305.8ms | 6 | +| Screenshot.PNG | 62.5ms | 112.2ms | 120.3ms | 215.2ms | 215.2ms | 6 | +| Screenshot.FullPage | 67.1ms | 462.7ms | 375.6ms | 841.0ms | 841.0ms | 6 | +| Screenshot.ClipRegion | 24.5ms | 36.3ms | 82.6ms | 229.0ms | 229.0ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 511µs | 570µs | 12.8ms | 70.4ms | 70.4ms | 6 | +| Eval.QuerySelectorAll | 311µs | 401µs | 12.1ms | 70.7ms | 70.7ms | 6 | +| Eval.InnerText | 482µs | 742µs | 1.3ms | 3.8ms | 3.8ms | 6 | +| Eval.GetComputedStyle | 3.9ms | 4.5ms | 5.2ms | 9.8ms | 9.8ms | 6 | +| Eval.ScrollToBottom | 284µs | 371µs | 426µs | 774µs | 774µs | 6 | +| Eval.DOMManipulation | 497µs | 629µs | 660µs | 1.0ms | 1.0ms | 6 | +| Eval.BoundingRects | 428µs | 829µs | 840µs | 1.5ms | 1.5ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 228µs | 295µs | 752µs | 3.1ms | 3.1ms | 6 | +| DOM.GetDocument.Deep | 272µs | 3.0ms | 2.4ms | 5.6ms | 5.6ms | 6 | +| DOM.GetDocument.Full | 231µs | 28.6ms | 22.5ms | 58.1ms | 58.1ms | 6 | +| DOM.QuerySelector | 207µs | 291µs | 1.7ms | 9.1ms | 9.1ms | 6 | +| DOM.GetOuterHTML | 171µs | 20.8ms | 12.3ms | 27.1ms | 27.1ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 1.3ms | 6.9ms | 7.1ms | 12.6ms | 12.6ms | 6 | +| Input.Click | 948µs | 3.1ms | 6.9ms | 28.5ms | 28.5ms | 6 | +| Input.TypeText | 7.4ms | 9.8ms | 70.3ms | 201.0ms | 201.0ms | 6 | +| Input.Scroll | 72.7ms | 81.6ms | 95.0ms | 156.0ms | 156.0ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 400µs | 635µs | 1.1ms | 3.4ms | 3.4ms | 6 | +| Network.GetResponseBody | 4.6ms | 66.1ms | 145.9ms | 667.6ms | 667.6ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 27.7ms | 158.3ms | 364.0ms | 1.27s | 1.27s | 6 | +| Page.GetNavigationHistory | 1.0ms | 1.2ms | 1.5ms | 3.5ms | 3.5ms | 6 | +| Page.GetLayoutMetrics | 390µs | 4.2ms | 9.0ms | 34.9ms | 34.9ms | 6 | +| Page.PrintToPDF | 30.0ms | 237.8ms | 373.9ms | 1.56s | 1.56s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 268µs | 469µs | 417µs | 548µs | 548µs | 6 | +| Emulation.SetMobile | 1.3ms | 114.4ms | 126.1ms | 457.8ms | 457.8ms | 6 | +| Emulation.SetGeolocation | 95µs | 173µs | 163µs | 221µs | 221µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 115µs | 143µs | 137µs | 150µs | 150µs | 6 | +| Target.CreateAndClose | 10.7ms | 14.7ms | 14.9ms | 20.2ms | 20.2ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 98.7ms | 135.3ms | 158.4ms | 282.8ms | 282.8ms | 6 | +| Composite.ScrapeLinks | 3.5ms | 4.0ms | 3.9ms | 4.5ms | 4.5ms | 6 | +| Composite.FillForm | 5.4ms | 7.9ms | 7.3ms | 8.8ms | 8.8ms | 6 | +| Composite.ClickAndWait | 22.5ms | 26.3ms | 25.2ms | 27.4ms | 27.4ms | 6 | +| Composite.RapidScreenshots | 594.7ms | 647.1ms | 643.8ms | 682.5ms | 682.5ms | 6 | +| Composite.ScrollAndCapture | 499.3ms | 502.9ms | 505.6ms | 523.3ms | 523.3ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 106.7ms | 111.8ms | 166.3ms | 280.3ms | 280.3ms | 3 | +| Navigate[spa] | 1.44s | 1.44s | 1.44s | 1.44s | 1.44s | 1 | +| Navigate[media] | 1.52s | 1.52s | 1.52s | 1.52s | 1.52s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 200µs | 365µs | 383µs | 599µs | 927µs | 471 | +| Concurrent.Evaluate | 192µs | 21.2ms | 20.7ms | 42.1ms | 53.6ms | 471 | +| Concurrent.Screenshot | 56.9ms | 107.0ms | 106.8ms | 134.1ms | 148.9ms | 471 | diff --git a/benchmarks/liveview/results/20260310-172933/headful/bench-json.log b/benchmarks/liveview/results/20260310-172933/headful/bench-json.log new file mode 100644 index 00000000..bf210e04 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/headful/bench-json.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:40:12.180Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:40:12.181Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:40:12.181Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:40:12.181Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:40:12.184Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:40:15.353Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:40:18.905Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:40:23.191Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:40:33.029Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:40:41.034Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:40:41.035Z level=INFO msg="starting sequential benchmark" iterations=2 label=headful +time=2026-03-10T21:40:41.036Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:40:44.269Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:40:47.669Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:40:52.150Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:41:00.666Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:41:07.387Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:41:12.094Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:41:12.095Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:41:12.095Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:41:12.095Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A diff --git a/benchmarks/liveview/results/20260310-172933/headful/bench.log b/benchmarks/liveview/results/20260310-172933/headful/bench.log new file mode 100644 index 00000000..e5ee8420 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/headful/bench.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:38:49.808Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:38:49.809Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:38:49.809Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:38:49.809Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:38:49.812Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:38:53.229Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:38:56.108Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:39:00.872Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:39:11.868Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:39:21.306Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:39:21.306Z level=INFO msg="starting sequential benchmark" iterations=2 label=headful +time=2026-03-10T21:39:21.307Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:39:24.549Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:39:27.947Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:39:32.383Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:39:40.147Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:39:47.146Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:39:51.960Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:39:51.961Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:39:51.961Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A +time=2026-03-10T21:39:51.961Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/EE209B45E9D227B4C56E04AB8948FC6A diff --git a/benchmarks/liveview/results/20260310-172933/headful/container.log b/benchmarks/liveview/results/20260310-172933/headful/container.log new file mode 100644 index 00000000..5a4193ae --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/headful/container.log @@ -0,0 +1,119 @@ +[wrapper] Starting dynamic log aggregator for /var/log/supervisord +[wrapper] Starting supervisord +[wrapper] Waiting for supervisord socket... +[envoy-init] Required environment variables not set. Skipping Envoy initialization. +[wrapper] Starting Xorg via supervisord +[xorg] +[xorg] X.Org X Server 1.21.1.4 +[xorg] X Protocol Version 11, Revision 0 +[xorg] Current Operating System: Linux 2363f1e15416 6.1.0-39-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.148-1 (2025-08-26) x86_64 +[xorg] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.1.0-39-amd64 root=UUID=5f07ede4-b79f-4c1a-a1a6-04a7f27b6295 ro quiet +[xorg] xorg-server 2:21.1.4-2ubuntu1.7~22.04.16 (For technical support please see http://www.ubuntu.com/support) +[xorg] Current version of pixman: 0.40.0 +[xorg] Before reporting problems, check http://wiki.x.org +[xorg] to make sure that you have the latest version. +[xorg] Markers: (--) probed, (**) from config file, (==) default setting, +[xorg] (++) from command line, (!!) notice, (II) informational, +[xorg] (WW) warning, (EE) error, (NI) not implemented, (??) unknown. +[xorg] (==) Log file: "/var/log/Xorg.1.log", Time: Tue Mar 10 21:38:30 2026 +[xorg] (++) Using config file: "/etc/neko/xorg.conf" +[xorg] (==) Using system config directory "/usr/share/X11/xorg.conf.d" +xorg: started +[wrapper] Waiting for Xorg to open display :1... +[wrapper] Starting Mutter via supervisord +[mutter] libmutter-Message: 21:38:33.160: Running Mutter (using mutter 42.9) as a X11 window and compositing manager +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] +[mutter] (mutter:57): libmutter-WARNING **: 21:38:33.315: Impossible to set scaling on crtc 62 to 1.000000, error id 2 +[mutter] Window manager warning: Scalig CRTC 62 at 1.000000 failed +[mutter] +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] +[mutter] (mutter:57): libmutter-WARNING **: 21:38:33.368: No cursor theme available, please install a cursor theme +[mutter] Xlib: extension "DPMS" missing on display ":1". +mutter: started +[wrapper] Waiting for Mutter to be ready... +[wrapper] Starting system D-Bus daemon via supervisord +dbus: started +[wrapper] Waiting for D-Bus system bus socket... +[wrapper] Starting Chromium via supervisord on internal port 9223 +chromium: started +[wrapper] Waiting for Chromium remote debugging on 127.0.0.1:9223... +[wrapper] Chromium remote debugging is ready on 127.0.0.1:9223 +[wrapper] ✨ Starting neko (webrtc server) via supervisord. +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] Xlib: extension "DPMS" missing on display ":1". +[dbus] dbus-daemon[157]: [system] Activating service name='org.freedesktop.UPower' requested by ':1.0' (uid=1000 pid=195 comm="/usr/lib/chromium/chromium --show-component-extens") (using servicehelper) +[dbus] dbus-daemon[157]: [system] Activating service name='org.freedesktop.login1' requested by ':1.4' (uid=0 pid=390 comm="/usr/libexec/upowerd ") (using servicehelper) +[dbus] dbus-daemon[157]: [system] Activated service 'org.freedesktop.login1' failed: Launch helper exited with unknown return code 1 +[dbus] +[dbus] (upowerd:390): GLib-GIO-CRITICAL **: 21:38:38.224: g_dbus_proxy_get_connection: assertion 'G_IS_DBUS_PROXY (proxy)' failed +[dbus] +[dbus] (upowerd:390): GLib-GIO-CRITICAL **: 21:38:38.224: g_dbus_connection_signal_subscribe: assertion 'G_IS_DBUS_CONNECTION (connection)' failed +[dbus] +[dbus] (upowerd:390): GLib-GIO-CRITICAL **: 21:38:38.224: g_dbus_proxy_call_sync_internal: assertion 'G_IS_DBUS_PROXY (proxy)' failed +[dbus] +[dbus] (upowerd:390): UPower-Linux-WARNING **: 21:38:38.224: Could not acquire inhibitor lock: Unknown reason +[dbus] dbus-daemon[157]: [system] Successfully activated service 'org.freedesktop.UPower' +[chromium] BASE_FLAGS: +[chromium] RUNTIME_FLAGS: +[chromium] FINAL_FLAGS: +[chromium] +[chromium] DevTools listening on ws://127.0.0.1:9223/devtools/browser/1ee8d73f-efd9-4ffe-8b17-26398bf71f6e +[neko]  +[neko] _ __ __ +[neko] / | / /__ / /______ \ /\ +[neko] / |/ / _ \/ //_/ __ \ ) ( ') +[neko] / /| / __/ ,< / /_/ / ( / ) +[neko] /_/ |_/\___/_/|_|\____/ \(__)| +[neko]  nurdism/m1k1o server dev@dev +[neko] {"level":"info","time":"2026-03-10T21:38:38Z","message":"legacy configuration is enabled"} +[neko] 9:38PM INF preflight complete with config file config=/etc/neko/neko.yaml log-dir= log-json=false log-level=info log-time=UNIX +[neko] 9:38PM WRN no video pipelines specified, using default +[neko] 9:38PM WRN no TCP, UDP mux or epr specified, using default epr range max=59100 min=59000 +[neko] 9:38PM INF starting neko server service=neko +[neko] 9:38PM INF setting initial screen size module=desktop screen_size=1920x1080@25 +[neko] 9:38PM INF syntax check for video stream pipeline passed module=capture pipeline="ximagesrc display-name=:1 show-pointer=false use-damage=false ! capsfilter caps=video/x-raw,framerate=2500/100 name=framerate ! videoconvert ! queue ! vp8enc name=encoder max-quantizer=20 cpu-used=4 end-usage=cbr buffer-size=12288 buffer-initial-size=6144 buffer-optimal-size=9216 target-bitrate=1996800 threads=4 deadline=1 undershoot=95 keyframe-max-dist=25 min-quantizer=4 ! appsink name=appsink" video_id=main +[neko] 9:38PM INF syntax check for video stream pipeline passed module=capture pipeline="ximagesrc display-name=:1 show-pointer=true use-damage=false ! capsfilter caps=video/x-raw,framerate=2500/100 name=framerate ! videoconvert ! queue ! vp8enc name=encoder min-quantizer=4 max-quantizer=20 cpu-used=4 end-usage=cbr buffer-size=12288 buffer-initial-size=6144 buffer-optimal-size=9216 target-bitrate=1996800 threads=4 deadline=1 undershoot=95 keyframe-max-dist=25 ! appsink name=appsink" video_id=legacy +[neko] 9:38PM INF starting module=webrtc submodule=cursor-image +[neko] 9:38PM INF webrtc starting epr=59000-59100 icelite=false iceservers-backend=[{"urls":["stun:stun.l.google.com:19302"]}] iceservers-frontend=[{"urls":["stun:stun.l.google.com:19302"]}] icetrickle=true module=webrtc nat1to1=216.246.84.226 tcpmux=0 udpmux=0 +[neko] 9:38PM INF websocket starting module=websocket +[neko] 9:38PM INF plugin started module=plugins plugin=filetransfer +[neko] 9:38PM INF plugin started module=plugins plugin=chat +[neko] 9:38PM INF plugin enabled module=scaletozero +[neko] 9:38PM INF no operation needed; skipping toggle currently_connected_sessions=0 currently_disabled=false module=scaletozero previously_disabled=false +[neko] 9:38PM INF plugin started module=plugins plugin=scaletozero +[neko] 9:38PM INF http listening on 0.0.0.0:8080 module=http +[neko] 9:38PM INF neko ready service=neko +neko: started +[wrapper] Waiting for neko on 127.0.0.1:8080... +[wrapper] neko is ready on 127.0.0.1:8080 +[wrapper] ✨ Starting kernel-images API. +[kernel-images-api] time=2026-03-10T21:38:40.797Z level=INFO msg="server configuration" config="&{Port:10001 FrameRate:10 DisplayNum:1 MaxSizeInMB:500 OutputDir:/recordings PathToFFmpeg:ffmpeg DevToolsProxyPort:9222 LogCDPMessages:false ChromeDriverProxyPort:9224 ChromeDriverUpstreamAddr:127.0.0.1:9225 DevToolsProxyAddr:127.0.0.1:9222}" +[kernel-images-api] time=2026-03-10T21:38:40.811Z level=INFO msg="devtools upstream updated" url=ws://127.0.0.1:9223/devtools/browser/1ee8d73f-efd9-4ffe-8b17-26398bf71f6e +[kernel-images-api] time=2026-03-10T21:38:40.910Z level=INFO msg="chromedriver proxy starting" addr=0.0.0.0:9224 +[kernel-images-api] time=2026-03-10T21:38:40.910Z level=INFO msg="http server starting" addr=:10001 +[kernel-images-api] time=2026-03-10T21:38:40.910Z level=INFO msg="devtools websocket proxy starting" addr=0.0.0.0:9222 +[chromium] [195:229:0310/213841.700781:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +kernel-images-api: started +[wrapper] Waiting for kernel-images API on 127.0.0.1:10001... +[wrapper] kernel-images API is ready on 127.0.0.1:10001 +[wrapper] Starting ChromeDriver via supervisord +[chromedriver] Starting ChromeDriver 145.0.7632.116 (7d28075c6a9ba147e6df449209001258bb82a122-refs/branch-heads/7632@{#3100}) on port 9225 +[chromedriver] Remote connections are allowed by an allowlist (127.0.0.1). +[chromedriver] Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. +[chromedriver] ChromeDriver was started successfully on port 9225. +chromedriver: started +[wrapper] Waiting for ChromeDriver on 127.0.0.1:9225... +[wrapper] ChromeDriver is ready on 127.0.0.1:9225 +[wrapper] Starting PulseAudio daemon via supervisord +pulseaudio: started +[chromium] [195:229:0310/213911.292065:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [243:243:0310/213914.500724:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] [243:243:0310/213942.314792:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] [195:229:0310/214001.928906:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [243:243:0310/214035.204743:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] [243:243:0310/214102.786315:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] [195:229:0310/214133.217942:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT diff --git a/benchmarks/liveview/results/20260310-172933/headful/docker-stats.csv b/benchmarks/liveview/results/20260310-172933/headful/docker-stats.csv new file mode 100644 index 00000000..1ab266f1 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/headful/docker-stats.csv @@ -0,0 +1,301 @@ +timestamp,cpu_pct,mem_usage,mem_limit,mem_pct,net_io,pids +1773178731,137.73%,439.8MiB / 8GiB,5.37%,3.91MB / 106kB,341 +1773178733,91.60%,455.6MiB / 8GiB,5.56%,3.93MB / 113kB,353 +1773178735,174.94%,499.1MiB / 8GiB,6.09%,3.95MB / 116kB,369 +1773178737,125.77%,562.1MiB / 8GiB,6.86%,4.63MB / 196kB,383 +1773178739,173.11%,526.1MiB / 8GiB,6.42%,4.71MB / 201kB,395 +1773178741,282.67%,635.7MiB / 8GiB,7.76%,12.8MB / 283kB,445 +1773178743,198.92%,637.9MiB / 8GiB,7.79%,19.3MB / 378kB,449 +1773178746,116.37%,653.9MiB / 8GiB,7.98%,19.4MB / 473kB,449 +1773178748,232.05%,871.9MiB / 8GiB,10.64%,26MB / 573kB,468 +1773178750,242.11%,525.9MiB / 8GiB,6.42%,26MB / 655kB,431 +1773178752,172.08%,548.3MiB / 8GiB,6.69%,27.1MB / 734kB,445 +1773178754,344.51%,758.8MiB / 8GiB,9.26%,30.6MB / 1.14MB,528 +1773178756,312.82%,812.8MiB / 8GiB,9.92%,31.8MB / 1.34MB,510 +1773178758,281.33%,842MiB / 8GiB,10.28%,33.3MB / 1.41MB,461 +1773178760,95.96%,547.6MiB / 8GiB,6.68%,33.3MB / 1.41MB,435 +1773178762,57.95%,528.8MiB / 8GiB,6.46%,33.3MB / 1.41MB,433 +1773178764,85.47%,550.8MiB / 8GiB,6.72%,33.3MB / 1.41MB,433 +1773178766,185.84%,561.3MiB / 8GiB,6.85%,33.3MB / 1.41MB,433 +1773178768,151.30%,570.6MiB / 8GiB,6.97%,33.3MB / 1.41MB,436 +1773178770,201.89%,549.4MiB / 8GiB,6.71%,33.3MB / 1.42MB,433 +1773178772,160.52%,588.5MiB / 8GiB,7.18%,33.4MB / 1.42MB,438 +1773178774,164.97%,668.9MiB / 8GiB,8.17%,33.5MB / 1.45MB,458 +1773178776,207.83%,714.2MiB / 8GiB,8.72%,33.7MB / 1.6MB,458 +1773178778,277.00%,559.1MiB / 8GiB,6.83%,44.8MB / 1.73MB,433 +1773178780,239.79%,617MiB / 8GiB,7.53%,45.7MB / 1.8MB,443 +1773178782,317.12%,819.2MiB / 8GiB,10.00%,60.5MB / 2.13MB,495 +1773178784,309.27%,996MiB / 8GiB,12.16%,66.8MB / 2.36MB,488 +1773178786,112.47%,1009MiB / 8GiB,12.32%,66.9MB / 2.39MB,493 +1773178788,151.50%,999.7MiB / 8GiB,12.20%,68.1MB / 2.41MB,493 +1773178791,134.50%,1.009GiB / 8GiB,12.61%,68.1MB / 2.42MB,499 +1773178793,177.25%,1.023GiB / 8GiB,12.79%,68.1MB / 2.42MB,500 +1773178795,187.63%,1.02GiB / 8GiB,12.74%,68.1MB / 2.42MB,500 +1773178797,178.77%,1.044GiB / 8GiB,13.05%,68.1MB / 2.43MB,500 +1773178799,191.62%,1.044GiB / 8GiB,13.05%,68.1MB / 2.43MB,500 +1773178801,224.12%,1.043GiB / 8GiB,13.03%,68.1MB / 2.43MB,500 +1773178803,228.03%,1.033GiB / 8GiB,12.92%,68.1MB / 2.44MB,500 +1773178805,219.75%,1.029GiB / 8GiB,12.86%,68.1MB / 2.44MB,500 +1773178807,186.43%,1.043GiB / 8GiB,13.04%,68.1MB / 2.44MB,500 +1773178809,162.87%,1.032GiB / 8GiB,12.90%,68.1MB / 2.44MB,500 +1773178811,222.31%,907.6MiB / 8GiB,11.08%,68.1MB / 2.44MB,502 +1773178813,104.19%,854.1MiB / 8GiB,10.43%,68.1MB / 2.44MB,500 +1773178815,104.46%,656.9MiB / 8GiB,8.02%,68.1MB / 2.44MB,437 +1773178817,165.51%,670.3MiB / 8GiB,8.18%,68.1MB / 2.44MB,438 +1773178819,158.78%,699.3MiB / 8GiB,8.54%,68.2MB / 2.44MB,442 +1773178821,222.57%,655.8MiB / 8GiB,8.00%,68.2MB / 2.44MB,436 +1773178823,145.32%,675.4MiB / 8GiB,8.24%,74.7MB / 2.48MB,441 +1773178825,164.09%,764.8MiB / 8GiB,9.34%,81.2MB / 2.55MB,453 +1773178827,137.65%,771.4MiB / 8GiB,9.42%,81.3MB / 2.64MB,453 +1773178829,223.16%,1.006GiB / 8GiB,12.57%,87.8MB / 2.73MB,475 +1773178831,248.75%,629.5MiB / 8GiB,7.68%,87.8MB / 2.81MB,436 +1773178833,258.56%,719.1MiB / 8GiB,8.78%,88MB / 2.87MB,449 +1773178835,334.13%,848.6MiB / 8GiB,10.36%,88.4MB / 3.1MB,472 +1773178837,344.49%,787MiB / 8GiB,9.61%,88.8MB / 3.13MB,436 +1773178840,92.10%,663.6MiB / 8GiB,8.10%,88.8MB / 3.13MB,436 +1773178842,88.89%,629.7MiB / 8GiB,7.69%,88.8MB / 3.13MB,436 +1773178844,92.42%,653.5MiB / 8GiB,7.98%,88.8MB / 3.14MB,436 +1773178846,182.60%,648.6MiB / 8GiB,7.92%,88.8MB / 3.14MB,436 +1773178848,161.54%,677.1MiB / 8GiB,8.27%,88.8MB / 3.14MB,435 +1773178850,205.17%,656.6MiB / 8GiB,8.01%,88.8MB / 3.15MB,434 +1773178852,138.90%,680.4MiB / 8GiB,8.31%,88.9MB / 3.15MB,443 +1773178854,162.11%,770.2MiB / 8GiB,9.40%,88.9MB / 3.18MB,456 +1773178856,248.66%,809.7MiB / 8GiB,9.88%,89.1MB / 3.29MB,456 +1773178858,234.10%,992.1MiB / 8GiB,12.11%,95.5MB / 3.35MB,461 +1773178860,93.56%,656.6MiB / 8GiB,8.02%,95.5MB / 3.37MB,436 +1773178862,231.07%,827.3MiB / 8GiB,10.10%,95.6MB / 3.44MB,489 +1773178864,295.97%,979MiB / 8GiB,11.95%,96.1MB / 3.54MB,484 +1773178866,134.88%,1.002GiB / 8GiB,12.53%,96.1MB / 3.55MB,500 +1773178868,82.36%,1.019GiB / 8GiB,12.74%,96.2MB / 3.55MB,500 +1773178870,101.62%,1020MiB / 8GiB,12.45%,96.2MB / 3.55MB,500 +1773178872,101.44%,1.045GiB / 8GiB,13.06%,96.2MB / 3.55MB,503 +1773178874,233.41%,1.06GiB / 8GiB,13.25%,96.2MB / 3.55MB,503 +1773178876,188.94%,1.051GiB / 8GiB,13.14%,96.2MB / 3.55MB,503 +1773178878,219.77%,1.047GiB / 8GiB,13.09%,96.2MB / 3.55MB,503 +1773178880,229.27%,1.05GiB / 8GiB,13.13%,96.2MB / 3.55MB,503 +1773178882,186.60%,1.046GiB / 8GiB,13.07%,96.2MB / 3.55MB,503 +1773178884,161.88%,1.033GiB / 8GiB,12.91%,96.2MB / 3.55MB,503 +1773178887,169.05%,1.033GiB / 8GiB,12.91%,96.2MB / 3.55MB,503 +1773178889,166.49%,1.051GiB / 8GiB,13.14%,96.2MB / 3.56MB,503 +1773178891,196.36%,920.9MiB / 8GiB,11.24%,96.2MB / 3.56MB,503 +1773178893,28.22%,866.8MiB / 8GiB,10.58%,96.2MB / 3.56MB,494 +1773178895,,,,, +1773178896,,,,, +1773178897,,,,, +1773178898,,,,, +1773178899,,,,, +1773178900,,,,, +1773178901,,,,, +1773178902,,,,, +1773178903,,,,, +1773178904,,,,, +1773178905,,,,, +1773178906,,,,, +1773178907,,,,, +1773178908,,,,, +1773178909,,,,, +1773178910,,,,, +1773178911,,,,, +1773178912,,,,, +1773178913,,,,, +1773178914,,,,, +1773178915,,,,, +1773178916,,,,, +1773178917,,,,, +1773178918,,,,, +1773178919,,,,, +1773178920,,,,, +1773178922,,,,, +1773178923,,,,, +1773178924,,,,, +1773178925,,,,, +1773178926,,,,, +1773178927,,,,, +1773178928,,,,, +1773178929,,,,, +1773178930,,,,, +1773178931,,,,, +1773178932,,,,, +1773178933,,,,, +1773178934,,,,, +1773178935,,,,, +1773178936,,,,, +1773178937,,,,, +1773178938,,,,, +1773178939,,,,, +1773178940,,,,, +1773178941,,,,, +1773178942,,,,, +1773178943,,,,, +1773178944,,,,, +1773178945,,,,, +1773178946,,,,, +1773178947,,,,, +1773178948,,,,, +1773178949,,,,, +1773178950,,,,, +1773178951,,,,, +1773178953,,,,, +1773178954,,,,, +1773178955,,,,, +1773178956,,,,, +1773178957,,,,, +1773178958,,,,, +1773178959,,,,, +1773178960,,,,, +1773178961,,,,, +1773178962,,,,, +1773178963,,,,, +1773178964,,,,, +1773178965,,,,, +1773178966,,,,, +1773178967,,,,, +1773178968,,,,, +1773178969,,,,, +1773178970,,,,, +1773178971,,,,, +1773178972,,,,, +1773178973,,,,, +1773178974,,,,, +1773178975,,,,, +1773178976,,,,, +1773178977,,,,, +1773178978,,,,, +1773178979,,,,, +1773178980,,,,, +1773178981,,,,, +1773178982,,,,, +1773178983,,,,, +1773178985,,,,, +1773178986,,,,, +1773178987,,,,, +1773178988,,,,, +1773178989,,,,, +1773178990,,,,, +1773178991,,,,, +1773178992,,,,, +1773178993,,,,, +1773178994,,,,, +1773178995,,,,, +1773178996,,,,, +1773178997,,,,, +1773178998,,,,, +1773178999,,,,, +1773179000,,,,, +1773179001,,,,, +1773179002,,,,, +1773179003,,,,, +1773179004,,,,, +1773179005,,,,, +1773179006,,,,, +1773179007,,,,, +1773179008,,,,, +1773179009,,,,, +1773179010,,,,, +1773179011,,,,, +1773179012,,,,, +1773179013,,,,, +1773179014,,,,, +1773179015,,,,, +1773179017,,,,, +1773179018,,,,, +1773179019,,,,, +1773179020,,,,, +1773179021,,,,, +1773179022,,,,, +1773179023,,,,, +1773179024,,,,, +1773179025,,,,, +1773179026,,,,, +1773179027,,,,, +1773179028,,,,, +1773179029,,,,, +1773179030,,,,, +1773179031,,,,, +1773179032,,,,, +1773179033,,,,, +1773179034,,,,, +1773179035,,,,, +1773179036,,,,, +1773179037,,,,, +1773179038,,,,, +1773179039,,,,, +1773179040,,,,, +1773179041,,,,, +1773179042,,,,, +1773179043,,,,, +1773179044,,,,, +1773179045,,,,, +1773179046,,,,, +1773179048,,,,, +1773179049,,,,, +1773179050,,,,, +1773179051,,,,, +1773179052,,,,, +1773179053,,,,, +1773179054,,,,, +1773179055,,,,, +1773179056,,,,, +1773179057,,,,, +1773179058,,,,, +1773179059,,,,, +1773179060,,,,, +1773179061,,,,, +1773179062,,,,, +1773179063,,,,, +1773179064,,,,, +1773179065,,,,, +1773179066,,,,, +1773179067,,,,, +1773179068,,,,, +1773179069,,,,, +1773179070,,,,, +1773179071,,,,, +1773179072,,,,, +1773179073,,,,, +1773179074,,,,, +1773179075,,,,, +1773179076,,,,, +1773179077,,,,, +1773179078,,,,, +1773179080,,,,, +1773179081,,,,, +1773179082,,,,, +1773179083,,,,, +1773179084,,,,, +1773179085,,,,, +1773179086,,,,, +1773179087,,,,, +1773179088,,,,, +1773179089,,,,, +1773179090,,,,, +1773179091,,,,, +1773179092,,,,, +1773179093,,,,, +1773179094,,,,, +1773179095,,,,, +1773179096,,,,, +1773179097,,,,, +1773179098,,,,, +1773179099,,,,, +1773179100,,,,, +1773179101,,,,, +1773179102,,,,, +1773179103,,,,, +1773179104,,,,, +1773179105,,,,, +1773179106,,,,, +1773179107,,,,, +1773179108,,,,, +1773179110,,,,, +1773179111,,,,, +1773179112,,,,, +1773179113,,,,, +1773179114,,,,, +1773179115,,,,, +1773179116,,,,, +1773179117,,,,, +1773179118,,,,, +1773179119,,,,, +1773179120,,,,, +1773179121,,,,, diff --git a/benchmarks/liveview/results/20260310-172933/headful/memory.txt b/benchmarks/liveview/results/20260310-172933/headful/memory.txt new file mode 100644 index 00000000..0ed7b429 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/headful/memory.txt @@ -0,0 +1,6 @@ +config_memory: 8192m +config_cpus: 8 +image_type: headful +idle: 389.9MiB / 8GiB +after-workload: 862MiB / 8GiB +image_size: 2.66GB diff --git a/benchmarks/liveview/results/20260310-172933/headful/results.json b/benchmarks/liveview/results/20260310-172933/headful/results.json new file mode 100644 index 00000000..35938bdf --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/headful/results.json @@ -0,0 +1,445 @@ +{ + "label": "headful", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 35.084, + "median_ms": 35.084, + "mean_ms": 35.084, + "p95_ms": 35.084, + "max_ms": 35.084 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 54.887, + "median_ms": 94.368, + "mean_ms": 98.212, + "p95_ms": 197.695, + "max_ms": 197.695 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 133.619, + "median_ms": 171.86, + "mean_ms": 178.921, + "p95_ms": 277.041, + "max_ms": 277.041 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 106.187, + "median_ms": 448.138, + "mean_ms": 358.034, + "p95_ms": 827.188, + "max_ms": 827.188 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 79.876, + "median_ms": 84.9, + "mean_ms": 148.187, + "p95_ms": 400.74, + "max_ms": 400.74 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 0.402, + "median_ms": 0.579, + "mean_ms": 12.693, + "p95_ms": 71.414, + "max_ms": 71.414 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 0.298, + "median_ms": 0.386, + "mean_ms": 12.066, + "p95_ms": 70.592, + "max_ms": 70.592 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 0.448, + "median_ms": 1.796, + "mean_ms": 1.772, + "p95_ms": 4.44, + "max_ms": 4.44 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 3.819, + "median_ms": 4.004, + "mean_ms": 5.424, + "p95_ms": 11.652, + "max_ms": 11.652 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 0.273, + "median_ms": 0.372, + "mean_ms": 0.373, + "p95_ms": 0.479, + "max_ms": 0.479 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 0.435, + "median_ms": 0.58, + "mean_ms": 1.005, + "p95_ms": 3.316, + "max_ms": 3.316 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 0.473, + "median_ms": 0.658, + "mean_ms": 0.751, + "p95_ms": 1.379, + "max_ms": 1.379 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 0.189, + "median_ms": 0.219, + "mean_ms": 0.27, + "p95_ms": 0.56, + "max_ms": 0.56 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 0.268, + "median_ms": 4.608, + "mean_ms": 3.147, + "p95_ms": 7.311, + "max_ms": 7.311 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 0.231, + "median_ms": 22.753, + "mean_ms": 20.075, + "p95_ms": 49.133, + "max_ms": 49.133 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 0.206, + "median_ms": 0.314, + "mean_ms": 1.176, + "p95_ms": 5.613, + "max_ms": 5.613 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 0.223, + "median_ms": 19.521, + "mean_ms": 11.904, + "p95_ms": 24.723, + "max_ms": 24.723 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 7.708, + "median_ms": 15.581, + "mean_ms": 17.317, + "p95_ms": 26.71, + "max_ms": 26.71 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 1.095, + "median_ms": 3.132, + "mean_ms": 5.895, + "p95_ms": 21.547, + "max_ms": 21.547 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 7.493, + "median_ms": 11.325, + "mean_ms": 26.211, + "p95_ms": 101.396, + "max_ms": 101.396 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 185.822, + "median_ms": 198.765, + "mean_ms": 330.5, + "p95_ms": 884.91, + "max_ms": 884.91 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 0.257, + "median_ms": 0.523, + "mean_ms": 0.933, + "p95_ms": 3.565, + "max_ms": 3.565 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 3.648, + "median_ms": 68.288, + "mean_ms": 46.749, + "p95_ms": 71.742, + "max_ms": 71.742 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 39.345, + "median_ms": 140.396, + "mean_ms": 264.838, + "p95_ms": 740.767, + "max_ms": 740.767 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 1.193, + "median_ms": 1.533, + "mean_ms": 1.642, + "p95_ms": 2.96, + "max_ms": 2.96 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 0.228, + "median_ms": 2.336, + "mean_ms": 35.154, + "p95_ms": 200.22, + "max_ms": 200.22 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 33.091, + "median_ms": 229.744, + "mean_ms": 342.07, + "p95_ms": 1384.387, + "max_ms": 1384.387 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 0.288, + "median_ms": 0.692, + "mean_ms": 0.588, + "p95_ms": 0.936, + "max_ms": 0.936 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 1.45, + "median_ms": 95.418, + "mean_ms": 121.035, + "p95_ms": 449.739, + "max_ms": 449.739 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 0.105, + "median_ms": 0.212, + "mean_ms": 0.178, + "p95_ms": 0.217, + "max_ms": 0.217 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 0.105, + "median_ms": 0.143, + "mean_ms": 0.237, + "p95_ms": 0.664, + "max_ms": 0.664 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 14.671, + "median_ms": 17.163, + "mean_ms": 17.583, + "p95_ms": 21.281, + "max_ms": 21.281 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 142.6, + "median_ms": 228.1, + "mean_ms": 225.382, + "p95_ms": 282.756, + "max_ms": 282.756 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 3.182, + "median_ms": 4.128, + "mean_ms": 3.929, + "p95_ms": 4.471, + "max_ms": 4.471 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 5.413, + "median_ms": 7.463, + "mean_ms": 6.62, + "p95_ms": 7.691, + "max_ms": 7.691 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 18.868, + "median_ms": 20.607, + "mean_ms": 21.455, + "p95_ms": 26.459, + "max_ms": 26.459 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 1051.501, + "median_ms": 1134.74, + "mean_ms": 1131.779, + "p95_ms": 1246.605, + "max_ms": 1246.605 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 596.403, + "median_ms": 605.192, + "mean_ms": 618.892, + "p95_ms": 675.742, + "max_ms": 675.742 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 108.23, + "median_ms": 113.681, + "mean_ms": 146.848, + "p95_ms": 218.634, + "max_ms": 218.634 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 1287.811, + "median_ms": 1287.811, + "mean_ms": 1287.811, + "p95_ms": 1287.811, + "max_ms": 1287.811 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 790.224, + "median_ms": 790.224, + "mean_ms": 790.224, + "p95_ms": 790.224, + "max_ms": 790.224 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 394, + "min_ms": 0.204, + "median_ms": 0.328, + "mean_ms": 0.356, + "p95_ms": 0.448, + "max_ms": 3.148 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 394, + "min_ms": 0.196, + "median_ms": 0.533, + "mean_ms": 4.21, + "p95_ms": 20.147, + "max_ms": 37.251 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 394, + "min_ms": 95.403, + "median_ms": 147.835, + "mean_ms": 148.201, + "p95_ms": 164.567, + "max_ms": 221.277 + } + ] +} diff --git a/benchmarks/liveview/results/20260310-172933/headful/results.md b/benchmarks/liveview/results/20260310-172933/headful/results.md new file mode 100644 index 00000000..096d9e86 --- /dev/null +++ b/benchmarks/liveview/results/20260310-172933/headful/results.md @@ -0,0 +1,61 @@ + +## headful + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 28.9ms | 28.9ms | 28.9ms | 28.9ms | 28.9ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 66.7ms | 104.5ms | 102.6ms | 187.6ms | 187.6ms | 6 | +| Screenshot.PNG | 133.9ms | 166.7ms | 177.9ms | 272.2ms | 272.2ms | 6 | +| Screenshot.FullPage | 102.6ms | 395.8ms | 320.5ms | 701.5ms | 701.5ms | 6 | +| Screenshot.ClipRegion | 76.1ms | 90.3ms | 154.8ms | 371.2ms | 371.2ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 502µs | 671µs | 14.3ms | 66.3ms | 66.3ms | 6 | +| Eval.QuerySelectorAll | 361µs | 447µs | 14.0ms | 70.7ms | 70.7ms | 6 | +| Eval.InnerText | 477µs | 1.0ms | 2.6ms | 10.8ms | 10.8ms | 6 | +| Eval.GetComputedStyle | 4.1ms | 4.5ms | 5.7ms | 10.6ms | 10.6ms | 6 | +| Eval.ScrollToBottom | 330µs | 501µs | 666µs | 1.9ms | 1.9ms | 6 | +| Eval.DOMManipulation | 517µs | 634µs | 682µs | 974µs | 974µs | 6 | +| Eval.BoundingRects | 427µs | 736µs | 869µs | 1.7ms | 1.7ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 221µs | 287µs | 845µs | 3.7ms | 3.7ms | 6 | +| DOM.GetDocument.Deep | 308µs | 2.2ms | 2.2ms | 5.6ms | 5.6ms | 6 | +| DOM.GetDocument.Full | 250µs | 25.4ms | 21.3ms | 53.0ms | 53.0ms | 6 | +| DOM.QuerySelector | 225µs | 317µs | 1.3ms | 6.3ms | 6.3ms | 6 | +| DOM.GetOuterHTML | 238µs | 23.0ms | 14.8ms | 32.3ms | 32.3ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 2.0ms | 12.0ms | 12.3ms | 23.9ms | 23.9ms | 6 | +| Input.Click | 1.2ms | 3.3ms | 7.1ms | 28.4ms | 28.4ms | 6 | +| Input.TypeText | 8.7ms | 9.8ms | 25.8ms | 100.3ms | 100.3ms | 6 | +| Input.Scroll | 188.5ms | 198.3ms | 345.4ms | 999.5ms | 999.5ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 260µs | 505µs | 542µs | 1.1ms | 1.1ms | 6 | +| Network.GetResponseBody | 2.8ms | 65.8ms | 52.8ms | 108.3ms | 108.3ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 33.5ms | 163.6ms | 275.8ms | 748.8ms | 748.8ms | 6 | +| Page.GetNavigationHistory | 796µs | 1.1ms | 1.0ms | 1.2ms | 1.2ms | 6 | +| Page.GetLayoutMetrics | 220µs | 7.0ms | 5.7ms | 15.0ms | 15.0ms | 6 | +| Page.PrintToPDF | 30.4ms | 242.0ms | 252.6ms | 820.5ms | 820.5ms | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 195µs | 418µs | 371µs | 516µs | 516µs | 6 | +| Emulation.SetMobile | 1.2ms | 101.3ms | 113.0ms | 404.6ms | 404.6ms | 6 | +| Emulation.SetGeolocation | 128µs | 219µs | 206µs | 315µs | 315µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 114µs | 163µs | 191µs | 375µs | 375µs | 6 | +| Target.CreateAndClose | 12.6ms | 17.2ms | 17.5ms | 27.2ms | 27.2ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 101.0ms | 274.3ms | 220.6ms | 289.5ms | 289.5ms | 6 | +| Composite.ScrapeLinks | 3.8ms | 4.6ms | 4.5ms | 5.3ms | 5.3ms | 6 | +| Composite.FillForm | 5.3ms | 6.1ms | 6.5ms | 8.1ms | 8.1ms | 6 | +| Composite.ClickAndWait | 17.6ms | 21.7ms | 21.1ms | 24.8ms | 24.8ms | 6 | +| Composite.RapidScreenshots | 1.04s | 1.16s | 1.13s | 1.30s | 1.30s | 6 | +| Composite.ScrollAndCapture | 597.4ms | 639.4ms | 621.2ms | 649.3ms | 649.3ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 116.8ms | 208.1ms | 185.8ms | 232.6ms | 232.6ms | 3 | +| Navigate[spa] | 1.27s | 1.27s | 1.27s | 1.27s | 1.27s | 1 | +| Navigate[media] | 958.6ms | 958.6ms | 958.6ms | 958.6ms | 958.6ms | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 225µs | 327µs | 425µs | 661µs | 19.9ms | 391 | +| Concurrent.Evaluate | 237µs | 504µs | 3.6ms | 19.5ms | 22.3ms | 391 | +| Concurrent.Screenshot | 95.7ms | 151.1ms | 150.0ms | 179.5ms | 225.9ms | 391 | diff --git a/benchmarks/liveview/results/20260310-174639/SUMMARY.md b/benchmarks/liveview/results/20260310-174639/SUMMARY.md new file mode 100644 index 00000000..4fa43015 --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/SUMMARY.md @@ -0,0 +1,144 @@ +# Live View Benchmark Results + +Date: Tue Mar 10 05:50:09 PM EDT 2026 +Iterations: 2 (warmup: 1) + +### Resource Allocation +| Type | Memory | CPUs | +|---|---|---| +| Headless | 1024m | 4 | +| Headful | 1024m | 4 | + + +## headful-constrained + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 36.3ms | 36.3ms | 36.3ms | 36.3ms | 36.3ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 58.2ms | 100.2ms | 109.2ms | 218.9ms | 218.9ms | 6 | +| Screenshot.PNG | 94.7ms | 163.1ms | 175.6ms | 301.7ms | 301.7ms | 6 | +| Screenshot.FullPage | 118.5ms | 497.7ms | 493.8ms | 1.58s | 1.58s | 6 | +| Screenshot.ClipRegion | 75.6ms | 103.9ms | 188.0ms | 481.2ms | 481.2ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 492µs | 736µs | 4.2ms | 20.3ms | 20.3ms | 6 | +| Eval.QuerySelectorAll | 342µs | 418µs | 3.5ms | 19.2ms | 19.2ms | 6 | +| Eval.InnerText | 441µs | 1.7ms | 15.4ms | 70.1ms | 70.1ms | 6 | +| Eval.GetComputedStyle | 4.2ms | 5.0ms | 9.3ms | 20.9ms | 20.9ms | 6 | +| Eval.ScrollToBottom | 330µs | 389µs | 1.1ms | 5.0ms | 5.0ms | 6 | +| Eval.DOMManipulation | 488µs | 652µs | 752µs | 1.1ms | 1.1ms | 6 | +| Eval.BoundingRects | 480µs | 954µs | 1.4ms | 4.0ms | 4.0ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 214µs | 276µs | 987µs | 4.7ms | 4.7ms | 6 | +| DOM.GetDocument.Deep | 269µs | 2.1ms | 6.9ms | 32.9ms | 32.9ms | 6 | +| DOM.GetDocument.Full | 241µs | 33.7ms | 23.9ms | 49.8ms | 49.8ms | 6 | +| DOM.QuerySelector | 249µs | 380µs | 868µs | 2.1ms | 2.1ms | 6 | +| DOM.GetOuterHTML | 278µs | 18.2ms | 13.4ms | 32.0ms | 32.0ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 7.1ms | 24.9ms | 20.2ms | 27.2ms | 27.2ms | 6 | +| Input.Click | 1.5ms | 3.3ms | 8.7ms | 36.9ms | 36.9ms | 6 | +| Input.TypeText | 8.5ms | 10.9ms | 26.5ms | 100.2ms | 100.2ms | 6 | +| Input.Scroll | 186.7ms | 200.1ms | 347.5ms | 988.6ms | 988.6ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 313µs | 697µs | 1.3ms | 5.4ms | 5.4ms | 6 | +| Network.GetResponseBody | 4.1ms | 66.9ms | 47.5ms | 74.5ms | 74.5ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 32.5ms | 174.8ms | 460.9ms | 1.84s | 1.84s | 6 | +| Page.GetNavigationHistory | 833µs | 1.3ms | 1.5ms | 3.0ms | 3.0ms | 6 | +| Page.GetLayoutMetrics | 208µs | 9.0ms | 31.9ms | 144.2ms | 144.2ms | 6 | +| Page.PrintToPDF | 29.4ms | 246.9ms | 719.7ms | 3.62s | 3.62s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 253µs | 397µs | 468µs | 956µs | 956µs | 6 | +| Emulation.SetMobile | 1.3ms | 107.6ms | 122.0ms | 425.1ms | 425.1ms | 6 | +| Emulation.SetGeolocation | 165µs | 237µs | 233µs | 322µs | 322µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 130µs | 214µs | 189µs | 246µs | 246µs | 6 | +| Target.CreateAndClose | 15.6ms | 22.9ms | 22.8ms | 28.9ms | 28.9ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 136.6ms | 264.0ms | 244.4ms | 376.5ms | 376.5ms | 6 | +| Composite.ScrapeLinks | 3.5ms | 3.7ms | 3.9ms | 4.6ms | 4.6ms | 6 | +| Composite.FillForm | 5.7ms | 8.2ms | 7.7ms | 8.8ms | 8.8ms | 6 | +| Composite.ClickAndWait | 17.5ms | 21.9ms | 24.6ms | 40.2ms | 40.2ms | 6 | +| Composite.RapidScreenshots | 1.10s | 1.16s | 1.16s | 1.22s | 1.22s | 6 | +| Composite.ScrollAndCapture | 603.1ms | 743.6ms | 704.2ms | 759.6ms | 759.6ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 110.9ms | 216.5ms | 190.8ms | 244.9ms | 244.9ms | 3 | +| Navigate[spa] | 1.52s | 1.52s | 1.52s | 1.52s | 1.52s | 1 | +| Navigate[media] | 1.15s | 1.15s | 1.15s | 1.15s | 1.15s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 196µs | 353µs | 445µs | 866µs | 3.1ms | 379 | +| Concurrent.Evaluate | 212µs | 683µs | 6.4ms | 19.9ms | 61.1ms | 379 | +| Concurrent.Screenshot | 87.9ms | 155.2ms | 152.2ms | 183.6ms | 214.3ms | 379 | + +### headful-constrained — Resource Usage +``` +config_memory: 1024m +config_cpus: 4 +image_type: headful +idle: 399.2MiB / 1GiB +after-workload: 529.4MiB / 1GiB +image_size: 2.66GB +``` + +## Side-by-side Comparison (Median) + +| Operation | headful-constrained | +|------------------------------------|--------------| +| **Navigation ** | | +| Navigate[static] | 34.4ms | +| **Screenshot ** | | +| Screenshot.JPEG.q80 | 88.1ms | +| Screenshot.PNG | 165.5ms | +| Screenshot.FullPage | 489.7ms | +| Screenshot.ClipRegion | 79.8ms | +| **JS Evaluation ** | | +| Eval.Trivial | 809µs | +| Eval.QuerySelectorAll | 481µs | +| Eval.InnerText | 1.2ms | +| Eval.GetComputedStyle | 5.7ms | +| Eval.ScrollToBottom | 480µs | +| Eval.DOMManipulation | 838µs | +| Eval.BoundingRects | 1.1ms | +| **DOM ** | | +| DOM.GetDocument.Shallow | 281µs | +| DOM.GetDocument.Deep | 4.0ms | +| DOM.GetDocument.Full | 28.7ms | +| DOM.QuerySelector | 327µs | +| DOM.GetOuterHTML | 16.8ms | +| **Input ** | | +| Input.MouseMove | 22.4ms | +| Input.Click | 3.5ms | +| Input.TypeText | 11.5ms | +| Input.Scroll | 199.2ms | +| **Network ** | | +| Network.GetCookies | 544µs | +| Network.GetResponseBody | 66.2ms | +| **Page ** | | +| Page.Reload | 141.3ms | +| Page.GetNavigationHistory | 1.2ms | +| Page.GetLayoutMetrics | 3.1ms | +| Page.PrintToPDF | 232.1ms | +| **Emulation ** | | +| Emulation.SetViewport | 550µs | +| Emulation.SetMobile | 124.9ms | +| Emulation.SetGeolocation | 170µs | +| **Target ** | | +| Target.GetTargets | 171µs | +| Target.CreateAndClose | 22.5ms | +| **Composite ** | | +| Composite.NavAndScreenshot | 216.3ms | +| Composite.ScrapeLinks | 4.3ms | +| Composite.FillForm | 7.6ms | +| Composite.ClickAndWait | 23.1ms | +| Composite.RapidScreenshots | 1.17s | +| Composite.ScrollAndCapture | 639.1ms | +| **Navigation ** | | +| Navigate[content] | 124.2ms | +| Navigate[spa] | 1.46s | +| Navigate[media] | 950.8ms | +| **Concurrent ** | | +| Concurrent.DOM | 342µs | +| Concurrent.Evaluate | 583µs | +| Concurrent.Screenshot | 155.5ms | + diff --git a/benchmarks/liveview/results/20260310-174639/headful-constrained/bench-json.log b/benchmarks/liveview/results/20260310-174639/headful-constrained/bench-json.log new file mode 100644 index 00000000..792104f3 --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/headful-constrained/bench-json.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:48:34.452Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:48:34.453Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:48:34.454Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:48:34.454Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:48:34.461Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:48:37.796Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:48:41.398Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:48:46.038Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:48:58.285Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:49:06.965Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:49:06.966Z level=INFO msg="starting sequential benchmark" iterations=2 label=headful-constrained +time=2026-03-10T21:49:06.967Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:49:10.240Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:49:13.842Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:49:18.203Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:49:28.803Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:49:36.405Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:49:40.915Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:49:40.916Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:49:40.916Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:49:40.916Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 diff --git a/benchmarks/liveview/results/20260310-174639/headful-constrained/bench.log b/benchmarks/liveview/results/20260310-174639/headful-constrained/bench.log new file mode 100644 index 00000000..9e1e2711 --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/headful-constrained/bench.log @@ -0,0 +1,21 @@ +time=2026-03-10T21:47:00.116Z level=INFO msg="connecting to CDP" base=http://127.0.0.1:9223 +time=2026-03-10T21:47:00.117Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:47:00.118Z level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T21:47:00.118Z level=INFO msg=warmup iterations=1 +time=2026-03-10T21:47:00.125Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:47:03.562Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:47:07.321Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:47:11.959Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:47:26.640Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:47:36.799Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:47:36.800Z level=INFO msg="starting sequential benchmark" iterations=2 label=headful-constrained +time=2026-03-10T21:47:36.801Z level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T21:47:40.245Z level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T21:47:43.879Z level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T21:47:48.645Z level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T21:48:01.842Z level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T21:48:09.406Z level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T21:48:14.227Z level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T21:48:14.228Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:48:14.228Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 +time=2026-03-10T21:48:14.228Z level=INFO msg="discovered page target" ws=ws://127.0.0.1:9223/devtools/page/E0DAB669BBC696AF40B7FCC1EED70211 diff --git a/benchmarks/liveview/results/20260310-174639/headful-constrained/container.log b/benchmarks/liveview/results/20260310-174639/headful-constrained/container.log new file mode 100644 index 00000000..f836f0cb --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/headful-constrained/container.log @@ -0,0 +1,131 @@ +[wrapper] Starting dynamic log aggregator for /var/log/supervisord +[wrapper] Starting supervisord +[wrapper] Waiting for supervisord socket... +[envoy-init] Required environment variables not set. Skipping Envoy initialization. +[wrapper] Starting Xorg via supervisord +[xorg] +[xorg] X.Org X Server 1.21.1.4 +[xorg] X Protocol Version 11, Revision 0 +[xorg] Current Operating System: Linux c40502fefd99 6.1.0-39-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.148-1 (2025-08-26) x86_64 +[xorg] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-6.1.0-39-amd64 root=UUID=5f07ede4-b79f-4c1a-a1a6-04a7f27b6295 ro quiet +[xorg] xorg-server 2:21.1.4-2ubuntu1.7~22.04.16 (For technical support please see http://www.ubuntu.com/support) +[xorg] Current version of pixman: 0.40.0 +[xorg] Before reporting problems, check http://wiki.x.org +[xorg] to make sure that you have the latest version. +[xorg] Markers: (--) probed, (**) from config file, (==) default setting, +[xorg] (++) from command line, (!!) notice, (II) informational, +[xorg] (WW) warning, (EE) error, (NI) not implemented, (??) unknown. +[xorg] (==) Log file: "/var/log/Xorg.1.log", Time: Tue Mar 10 21:46:41 2026 +[xorg] (++) Using config file: "/etc/neko/xorg.conf" +[xorg] (==) Using system config directory "/usr/share/X11/xorg.conf.d" +xorg: started +[wrapper] Waiting for Xorg to open display :1... +[wrapper] Starting Mutter via supervisord +[mutter] libmutter-Message: 21:46:43.447: Running Mutter (using mutter 42.9) as a X11 window and compositing manager +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] +[mutter] (mutter:57): libmutter-WARNING **: 21:46:43.589: Impossible to set scaling on crtc 62 to 1.000000, error id 2 +[mutter] Window manager warning: Scalig CRTC 62 at 1.000000 failed +[mutter] +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] +[mutter] (mutter:57): libmutter-WARNING **: 21:46:43.645: No cursor theme available, please install a cursor theme +[mutter] Xlib: extension "DPMS" missing on display ":1". +mutter: started +[wrapper] Waiting for Mutter to be ready... +[wrapper] Starting system D-Bus daemon via supervisord +dbus: started +[wrapper] Waiting for D-Bus system bus socket... +[wrapper] Starting Chromium via supervisord on internal port 9223 +chromium: started +[chromium] BASE_FLAGS: +[chromium] RUNTIME_FLAGS: +[chromium] FINAL_FLAGS: +[wrapper] Waiting for Chromium remote debugging on 127.0.0.1:9223... +[wrapper] Chromium remote debugging is ready on 127.0.0.1:9223 +[wrapper] ✨ Starting neko (webrtc server) via supervisord. +[dbus] dbus-daemon[157]: [system] Activating service name='org.freedesktop.UPower' requested by ':1.0' (uid=1000 pid=197 comm="/usr/lib/chromium/chromium --show-component-extens") (using servicehelper) +[dbus] dbus-daemon[157]: [system] Activating service name='org.freedesktop.login1' requested by ':1.4' (uid=0 pid=391 comm="/usr/libexec/upowerd ") (using servicehelper) +[dbus] dbus-daemon[157]: [system] Activated service 'org.freedesktop.login1' failed: Launch helper exited with unknown return code 1 +[dbus] +[dbus] (upowerd:391): GLib-GIO-CRITICAL **: 21:46:48.568: g_dbus_proxy_get_connection: assertion 'G_IS_DBUS_PROXY (proxy)' failed +[dbus] +[dbus] (upowerd:391): GLib-GIO-CRITICAL **: 21:46:48.568: g_dbus_connection_signal_subscribe: assertion 'G_IS_DBUS_CONNECTION (connection)' failed +[dbus] +[dbus] (upowerd:391): GLib-GIO-CRITICAL **: 21:46:48.568: g_dbus_proxy_call_sync_internal: assertion 'G_IS_DBUS_PROXY (proxy)' failed +[dbus] +[dbus] (upowerd:391): UPower-Linux-WARNING **: 21:46:48.568: Could not acquire inhibitor lock: Unknown reason +[dbus] dbus-daemon[157]: [system] Successfully activated service 'org.freedesktop.UPower' +[chromium] +[chromium] DevTools listening on ws://127.0.0.1:9223/devtools/browser/f68eb28e-6021-43ea-b897-708ab0fa1ea8 +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] Xlib: extension "DPMS" missing on display ":1". +[mutter] +[mutter] (mutter:57): Clutter-WARNING **: 21:46:49.133: Can't update stage views actor [:0x56410ad62d10] is on because it needs an allocation. +[mutter] +[mutter] (mutter:57): Clutter-WARNING **: 21:46:49.133: Can't update stage views actor [:0x56410b1ae330] is on because it needs an allocation. +[mutter] +[mutter] (mutter:57): Clutter-WARNING **: 21:46:49.133: Can't update stage views actor [:0x56410b1b6730] is on because it needs an allocation. +[mutter] +[mutter] (mutter:57): Clutter-WARNING **: 21:46:49.133: Can't update stage views actor [:0x56410b1b86c0] is on because it needs an allocation. +[neko]  +[neko] _ __ __ +[neko] / | / /__ / /______ \ /\ +[neko] / |/ / _ \/ //_/ __ \ ) ( ') +[neko] / /| / __/ ,< / /_/ / ( / ) +[neko] /_/ |_/\___/_/|_|\____/ \(__)| +[neko]  nurdism/m1k1o server dev@dev +[neko] {"level":"info","time":"2026-03-10T21:46:49Z","message":"legacy configuration is enabled"} +[neko] 9:46PM INF preflight complete with config file config=/etc/neko/neko.yaml log-dir= log-json=false log-level=info log-time=UNIX +[neko] 9:46PM WRN no video pipelines specified, using default +[neko] 9:46PM WRN no TCP, UDP mux or epr specified, using default epr range max=59100 min=59000 +[neko] 9:46PM INF starting neko server service=neko +[neko] 9:46PM INF setting initial screen size module=desktop screen_size=1920x1080@25 +[neko] 9:46PM INF syntax check for video stream pipeline passed module=capture pipeline="ximagesrc display-name=:1 show-pointer=false use-damage=false ! capsfilter caps=video/x-raw,framerate=2500/100 name=framerate ! videoconvert ! queue ! vp8enc name=encoder target-bitrate=1996800 end-usage=cbr undershoot=95 buffer-size=12288 keyframe-max-dist=25 max-quantizer=20 cpu-used=4 threads=4 deadline=1 buffer-initial-size=6144 buffer-optimal-size=9216 min-quantizer=4 ! appsink name=appsink" video_id=main +[neko] 9:46PM INF syntax check for video stream pipeline passed module=capture pipeline="ximagesrc display-name=:1 show-pointer=true use-damage=false ! capsfilter caps=video/x-raw,framerate=2500/100 name=framerate ! videoconvert ! queue ! vp8enc name=encoder max-quantizer=20 cpu-used=4 threads=4 deadline=1 buffer-initial-size=6144 buffer-optimal-size=9216 min-quantizer=4 target-bitrate=1996800 end-usage=cbr undershoot=95 buffer-size=12288 keyframe-max-dist=25 ! appsink name=appsink" video_id=legacy +[neko] 9:46PM INF starting module=webrtc submodule=cursor-image +[neko] 9:46PM INF webrtc starting epr=59000-59100 icelite=false iceservers-backend=[{"urls":["stun:stun.l.google.com:19302"]}] iceservers-frontend=[{"urls":["stun:stun.l.google.com:19302"]}] icetrickle=true module=webrtc nat1to1=216.246.84.226 tcpmux=0 udpmux=0 +[neko] 9:46PM INF websocket starting module=websocket +[neko] 9:46PM INF plugin started module=plugins plugin=filetransfer +[neko] 9:46PM INF plugin started module=plugins plugin=chat +[neko] 9:46PM INF plugin enabled module=scaletozero +[neko] 9:46PM INF no operation needed; skipping toggle currently_connected_sessions=0 currently_disabled=false module=scaletozero previously_disabled=false +[neko] 9:46PM INF plugin started module=plugins plugin=scaletozero +[neko] 9:46PM INF http listening on 0.0.0.0:8080 module=http +[neko] 9:46PM INF neko ready service=neko +neko: started +[wrapper] Waiting for neko on 127.0.0.1:8080... +[wrapper] neko is ready on 127.0.0.1:8080 +[wrapper] ✨ Starting kernel-images API. +[kernel-images-api] time=2026-03-10T21:46:51.320Z level=INFO msg="server configuration" config="&{Port:10001 FrameRate:10 DisplayNum:1 MaxSizeInMB:500 OutputDir:/recordings PathToFFmpeg:ffmpeg DevToolsProxyPort:9222 LogCDPMessages:false ChromeDriverProxyPort:9224 ChromeDriverUpstreamAddr:127.0.0.1:9225 DevToolsProxyAddr:127.0.0.1:9222}" +[kernel-images-api] time=2026-03-10T21:46:51.337Z level=INFO msg="devtools upstream updated" url=ws://127.0.0.1:9223/devtools/browser/f68eb28e-6021-43ea-b897-708ab0fa1ea8 +[kernel-images-api] time=2026-03-10T21:46:51.437Z level=INFO msg="chromedriver proxy starting" addr=0.0.0.0:9224 +[kernel-images-api] time=2026-03-10T21:46:51.437Z level=INFO msg="http server starting" addr=:10001 +[kernel-images-api] time=2026-03-10T21:46:51.437Z level=INFO msg="devtools websocket proxy starting" addr=0.0.0.0:9222 +[chromium] [197:231:0310/214652.252730:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +kernel-images-api: started +[wrapper] Waiting for kernel-images API on 127.0.0.1:10001... +[wrapper] kernel-images API is ready on 127.0.0.1:10001 +[wrapper] Starting ChromeDriver via supervisord +[chromedriver] Starting ChromeDriver 145.0.7632.116 (7d28075c6a9ba147e6df449209001258bb82a122-refs/branch-heads/7632@{#3100}) on port 9225 +[chromedriver] Remote connections are allowed by an allowlist (127.0.0.1). +[chromedriver] Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe. +[chromedriver] ChromeDriver was started successfully on port 9225. +chromedriver: started +[wrapper] Waiting for ChromeDriver on 127.0.0.1:9225... +[wrapper] ChromeDriver is ready on 127.0.0.1:9225 +[wrapper] Starting PulseAudio daemon via supervisord +pulseaudio: started +[chromium] [197:231:0310/214717.336466:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [244:244:0310/214729.430295:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] [244:244:0310/214804.561981:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] [197:231:0310/214809.679508:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT +[chromium] [244:244:0310/214900.500946:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] [244:244:0310/214931.014533:ERROR:gpu/command_buffer/service/context_group.cc:130] ContextResult::kFatalFailure: WebGL1 blocklisted +[chromium] Warning: vkCreateInstance: Found no drivers! +[chromium] Warning: vkCreateInstance failed with VK_ERROR_INCOMPATIBLE_DRIVER +[chromium] at CheckVkSuccessImpl (../../third_party/dawn/src/dawn/native/vulkan/VulkanError.cpp:106) +[chromium] +[chromium] [197:231:0310/214951.460855:ERROR:google_apis/gcm/engine/registration_request.cc:290] Registration response error message: DEPRECATED_ENDPOINT diff --git a/benchmarks/liveview/results/20260310-174639/headful-constrained/docker-stats.csv b/benchmarks/liveview/results/20260310-174639/headful-constrained/docker-stats.csv new file mode 100644 index 00000000..ca73582b --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/headful-constrained/docker-stats.csv @@ -0,0 +1,301 @@ +timestamp,cpu_pct,mem_usage,mem_limit,mem_pct,net_io,pids +1773179222,153.49%,449.8MiB / 1GiB,43.92%,3.92MB / 108kB,338 +1773179224,92.75%,465.8MiB / 1GiB,45.49%,3.94MB / 115kB,351 +1773179226,189.92%,493.9MiB / 1GiB,48.23%,3.96MB / 118kB,363 +1773179228,194.66%,541.6MiB / 1GiB,52.89%,4.59MB / 164kB,376 +1773179230,198.32%,623.5MiB / 1GiB,60.89%,4.67MB / 169kB,379 +1773179232,86.07%,535MiB / 1GiB,52.25%,4.67MB / 175kB,397 +1773179234,331.08%,637.3MiB / 1GiB,62.24%,19.3MB / 327kB,429 +1773179236,197.02%,933.4MiB / 1GiB,91.15%,19.3MB / 334kB,439 +1773179238,121.09%,830.2MiB / 1GiB,81.07%,25.9MB / 495kB,439 +1773179240,118.23%,919.8MiB / 1GiB,89.82%,25.9MB / 498kB,439 +1773179242,203.29%,907MiB / 1GiB,88.58%,25.9MB / 524kB,446 +1773179244,137.23%,847MiB / 1GiB,82.72%,25.9MB / 524kB,448 +1773179246,86.27%,482.9MiB / 1GiB,47.16%,25.9MB / 551kB,418 +1773179248,308.06%,662.6MiB / 1GiB,64.71%,29.9MB / 925kB,467 +1773179250,246.60%,811.9MiB / 1GiB,79.29%,31.4MB / 1.12MB,498 +1773179252,276.83%,745.3MiB / 1GiB,72.78%,33.3MB / 1.27MB,438 +1773179254,208.74%,511.9MiB / 1GiB,49.99%,33.4MB / 1.28MB,419 +1773179256,15.04%,495.4MiB / 1GiB,48.38%,33.4MB / 1.28MB,419 +1773179258,142.53%,502.6MiB / 1GiB,49.08%,33.4MB / 1.28MB,419 +1773179260,87.58%,498.6MiB / 1GiB,48.69%,33.4MB / 1.29MB,418 +1773179262,133.92%,515.3MiB / 1GiB,50.32%,33.4MB / 1.29MB,419 +1773179264,155.52%,544.6MiB / 1GiB,53.18%,33.4MB / 1.29MB,422 +1773179267,215.41%,512.9MiB / 1GiB,50.08%,33.4MB / 1.29MB,419 +1773179269,233.43%,556.6MiB / 1GiB,54.35%,38.2MB / 1.34MB,430 +1773179271,192.88%,621.1MiB / 1GiB,60.65%,38.3MB / 1.39MB,440 +1773179273,168.00%,741.8MiB / 1GiB,72.44%,38.7MB / 1.45MB,453 +1773179275,111.41%,803.7MiB / 1GiB,78.49%,53.2MB / 1.64MB,453 +1773179277,148.51%,875.8MiB / 1GiB,85.53%,60.5MB / 1.72MB,454 +1773179279,144.51%,782.1MiB / 1GiB,76.38%,60.5MB / 1.75MB,454 +1773179281,100.92%,372.3MiB / 1GiB,36.36%,61.9MB / 1.81MB,419 +1773179283,320.08%,531.9MiB / 1GiB,51.95%,67.6MB / 1.96MB,452 +1773179285,284.96%,641.7MiB / 1GiB,62.67%,67.9MB / 2.17MB,461 +1773179287,285.12%,792.7MiB / 1GiB,77.42%,68.3MB / 2.2MB,474 +1773179289,105.30%,788.9MiB / 1GiB,77.04%,68.3MB / 2.22MB,486 +1773179291,194.58%,792.7MiB / 1GiB,77.41%,68.3MB / 2.22MB,477 +1773179293,170.12%,813.2MiB / 1GiB,79.41%,68.3MB / 2.23MB,480 +1773179295,205.32%,831.8MiB / 1GiB,81.23%,68.3MB / 2.23MB,482 +1773179297,177.31%,818MiB / 1GiB,79.88%,68.3MB / 2.23MB,482 +1773179299,188.55%,843.1MiB / 1GiB,82.34%,68.3MB / 2.23MB,482 +1773179301,174.02%,815.3MiB / 1GiB,79.62%,68.3MB / 2.23MB,482 +1773179303,168.34%,840MiB / 1GiB,82.04%,68.3MB / 2.23MB,482 +1773179305,163.46%,817.7MiB / 1GiB,79.86%,68.3MB / 2.23MB,482 +1773179307,166.23%,823.2MiB / 1GiB,80.39%,68.3MB / 2.23MB,482 +1773179309,216.75%,830.3MiB / 1GiB,81.08%,68.4MB / 2.24MB,482 +1773179311,174.21%,816.6MiB / 1GiB,79.75%,68.4MB / 2.24MB,482 +1773179314,180.19%,653.6MiB / 1GiB,63.83%,68.4MB / 2.24MB,483 +1773179316,139.44%,618.4MiB / 1GiB,60.39%,68.4MB / 2.25MB,424 +1773179318,99.13%,452.6MiB / 1GiB,44.20%,68.4MB / 2.25MB,422 +1773179320,191.22%,458.1MiB / 1GiB,44.74%,68.4MB / 2.25MB,423 +1773179322,168.89%,491MiB / 1GiB,47.94%,68.4MB / 2.25MB,425 +1773179324,247.11%,446.6MiB / 1GiB,43.62%,68.4MB / 2.25MB,422 +1773179326,78.38%,452.6MiB / 1GiB,44.20%,68.4MB / 2.26MB,434 +1773179328,272.59%,608.9MiB / 1GiB,59.46%,81.4MB / 2.37MB,434 +1773179330,166.26%,600.4MiB / 1GiB,58.63%,81.4MB / 2.39MB,447 +1773179332,160.84%,661.4MiB / 1GiB,64.59%,88MB / 2.54MB,447 +1773179334,210.17%,829.9MiB / 1GiB,81.05%,88MB / 2.57MB,465 +1773179336,227.94%,344MiB / 1GiB,33.59%,88MB / 2.62MB,421 +1773179338,167.14%,375.6MiB / 1GiB,36.68%,88.1MB / 2.63MB,427 +1773179340,325.83%,619.7MiB / 1GiB,60.52%,88.4MB / 2.79MB,500 +1773179342,278.70%,571.6MiB / 1GiB,55.82%,88.9MB / 2.9MB,445 +1773179344,214.10%,376.5MiB / 1GiB,36.77%,88.9MB / 2.93MB,424 +1773179346,39.22%,358.7MiB / 1GiB,35.02%,88.9MB / 2.93MB,424 +1773179348,152.11%,368.2MiB / 1GiB,35.95%,88.9MB / 2.93MB,423 +1773179350,79.39%,357.5MiB / 1GiB,34.91%,88.9MB / 2.93MB,421 +1773179352,131.61%,381.9MiB / 1GiB,37.29%,89MB / 2.93MB,423 +1773179354,149.60%,408.3MiB / 1GiB,39.87%,89MB / 2.93MB,423 +1773179356,237.91%,369MiB / 1GiB,36.04%,89MB / 2.94MB,422 +1773179359,349.92%,507MiB / 1GiB,49.51%,89.1MB / 2.94MB,433 +1773179361,217.01%,684.5MiB / 1GiB,66.85%,89.1MB / 2.97MB,450 +1773179363,200.76%,605MiB / 1GiB,59.09%,89.3MB / 3.08MB,450 +1773179365,128.71%,864.7MiB / 1GiB,84.45%,95.7MB / 3.11MB,460 +1773179367,262.46%,342.8MiB / 1GiB,33.48%,95.7MB / 3.17MB,421 +1773179369,193.08%,370.2MiB / 1GiB,36.15%,95.8MB / 3.17MB,424 +1773179371,224.79%,548.9MiB / 1GiB,53.60%,95.9MB / 3.3MB,486 +1773179373,233.73%,640.5MiB / 1GiB,62.55%,96.5MB / 3.43MB,454 +1773179375,188.05%,703.9MiB / 1GiB,68.74%,96.5MB / 3.44MB,465 +1773179377,123.81%,690.1MiB / 1GiB,67.40%,96.5MB / 3.44MB,465 +1773179379,86.94%,691.3MiB / 1GiB,67.51%,96.5MB / 3.44MB,465 +1773179381,108.20%,739MiB / 1GiB,72.17%,96.5MB / 3.44MB,466 +1773179383,199.81%,739.4MiB / 1GiB,72.21%,96.5MB / 3.44MB,466 +1773179385,187.72%,727.7MiB / 1GiB,71.06%,96.5MB / 3.44MB,466 +1773179387,167.33%,744.3MiB / 1GiB,72.68%,96.5MB / 3.44MB,466 +1773179389,169.92%,726.2MiB / 1GiB,70.92%,96.5MB / 3.45MB,466 +1773179391,167.60%,732.8MiB / 1GiB,71.56%,96.5MB / 3.45MB,466 +1773179393,158.08%,720.5MiB / 1GiB,70.36%,96.5MB / 3.45MB,466 +1773179395,171.71%,719.9MiB / 1GiB,70.30%,96.5MB / 3.45MB,466 +1773179397,191.79%,739.9MiB / 1GiB,72.25%,96.5MB / 3.45MB,466 +1773179399,261.87%,571.4MiB / 1GiB,55.80%,96.5MB / 3.45MB,467 +1773179401,41.86%,529.8MiB / 1GiB,51.73%,96.5MB / 3.45MB,459 +1773179404,,,,, +1773179405,,,,, +1773179406,,,,, +1773179407,,,,, +1773179408,,,,, +1773179409,,,,, +1773179410,,,,, +1773179411,,,,, +1773179412,,,,, +1773179413,,,,, +1773179414,,,,, +1773179415,,,,, +1773179416,,,,, +1773179417,,,,, +1773179418,,,,, +1773179419,,,,, +1773179420,,,,, +1773179421,,,,, +1773179422,,,,, +1773179423,,,,, +1773179424,,,,, +1773179426,,,,, +1773179427,,,,, +1773179428,,,,, +1773179429,,,,, +1773179430,,,,, +1773179431,,,,, +1773179432,,,,, +1773179433,,,,, +1773179434,,,,, +1773179435,,,,, +1773179436,,,,, +1773179437,,,,, +1773179438,,,,, +1773179439,,,,, +1773179440,,,,, +1773179441,,,,, +1773179442,,,,, +1773179443,,,,, +1773179444,,,,, +1773179445,,,,, +1773179446,,,,, +1773179447,,,,, +1773179448,,,,, +1773179449,,,,, +1773179450,,,,, +1773179451,,,,, +1773179452,,,,, +1773179453,,,,, +1773179454,,,,, +1773179455,,,,, +1773179457,,,,, +1773179458,,,,, +1773179459,,,,, +1773179460,,,,, +1773179461,,,,, +1773179462,,,,, +1773179463,,,,, +1773179464,,,,, +1773179465,,,,, +1773179466,,,,, +1773179467,,,,, +1773179468,,,,, +1773179469,,,,, +1773179470,,,,, +1773179471,,,,, +1773179472,,,,, +1773179473,,,,, +1773179474,,,,, +1773179475,,,,, +1773179476,,,,, +1773179477,,,,, +1773179478,,,,, +1773179479,,,,, +1773179480,,,,, +1773179481,,,,, +1773179482,,,,, +1773179483,,,,, +1773179484,,,,, +1773179485,,,,, +1773179486,,,,, +1773179488,,,,, +1773179489,,,,, +1773179490,,,,, +1773179491,,,,, +1773179492,,,,, +1773179493,,,,, +1773179494,,,,, +1773179495,,,,, +1773179496,,,,, +1773179497,,,,, +1773179498,,,,, +1773179499,,,,, +1773179500,,,,, +1773179501,,,,, +1773179502,,,,, +1773179503,,,,, +1773179504,,,,, +1773179505,,,,, +1773179506,,,,, +1773179507,,,,, +1773179508,,,,, +1773179509,,,,, +1773179510,,,,, +1773179511,,,,, +1773179512,,,,, +1773179513,,,,, +1773179514,,,,, +1773179515,,,,, +1773179516,,,,, +1773179517,,,,, +1773179519,,,,, +1773179520,,,,, +1773179521,,,,, +1773179522,,,,, +1773179523,,,,, +1773179524,,,,, +1773179525,,,,, +1773179526,,,,, +1773179527,,,,, +1773179528,,,,, +1773179529,,,,, +1773179530,,,,, +1773179531,,,,, +1773179532,,,,, +1773179533,,,,, +1773179534,,,,, +1773179535,,,,, +1773179536,,,,, +1773179537,,,,, +1773179538,,,,, +1773179539,,,,, +1773179540,,,,, +1773179541,,,,, +1773179542,,,,, +1773179543,,,,, +1773179544,,,,, +1773179545,,,,, +1773179546,,,,, +1773179547,,,,, +1773179548,,,,, +1773179549,,,,, +1773179551,,,,, +1773179552,,,,, +1773179553,,,,, +1773179554,,,,, +1773179555,,,,, +1773179556,,,,, +1773179557,,,,, +1773179558,,,,, +1773179559,,,,, +1773179560,,,,, +1773179561,,,,, +1773179562,,,,, +1773179563,,,,, +1773179564,,,,, +1773179565,,,,, +1773179566,,,,, +1773179567,,,,, +1773179568,,,,, +1773179569,,,,, +1773179570,,,,, +1773179571,,,,, +1773179572,,,,, +1773179573,,,,, +1773179574,,,,, +1773179575,,,,, +1773179576,,,,, +1773179577,,,,, +1773179578,,,,, +1773179579,,,,, +1773179580,,,,, +1773179581,,,,, +1773179583,,,,, +1773179584,,,,, +1773179585,,,,, +1773179586,,,,, +1773179587,,,,, +1773179588,,,,, +1773179589,,,,, +1773179590,,,,, +1773179591,,,,, +1773179592,,,,, +1773179593,,,,, +1773179594,,,,, +1773179595,,,,, +1773179596,,,,, +1773179597,,,,, +1773179598,,,,, +1773179599,,,,, +1773179600,,,,, +1773179601,,,,, +1773179602,,,,, +1773179603,,,,, +1773179604,,,,, +1773179605,,,,, +1773179606,,,,, +1773179607,,,,, +1773179608,,,,, +1773179609,,,,, +1773179610,,,,, +1773179611,,,,, +1773179612,,,,, +1773179613,,,,, +1773179615,,,,, +1773179616,,,,, +1773179617,,,,, +1773179618,,,,, +1773179619,,,,, +1773179620,,,,, +1773179621,,,,, diff --git a/benchmarks/liveview/results/20260310-174639/headful-constrained/memory.txt b/benchmarks/liveview/results/20260310-174639/headful-constrained/memory.txt new file mode 100644 index 00000000..90234a4d --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/headful-constrained/memory.txt @@ -0,0 +1,6 @@ +config_memory: 1024m +config_cpus: 4 +image_type: headful +idle: 399.2MiB / 1GiB +after-workload: 529.4MiB / 1GiB +image_size: 2.66GB diff --git a/benchmarks/liveview/results/20260310-174639/headful-constrained/results.json b/benchmarks/liveview/results/20260310-174639/headful-constrained/results.json new file mode 100644 index 00000000..e2055333 --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/headful-constrained/results.json @@ -0,0 +1,445 @@ +{ + "label": "headful-constrained", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 34.358, + "median_ms": 34.358, + "mean_ms": 34.358, + "p95_ms": 34.358, + "max_ms": 34.358 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 58.19, + "median_ms": 88.059, + "mean_ms": 109.591, + "p95_ms": 241.216, + "max_ms": 241.216 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 117.617, + "median_ms": 165.485, + "mean_ms": 170.259, + "p95_ms": 274.212, + "max_ms": 274.212 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 109.245, + "median_ms": 489.705, + "mean_ms": 430.8, + "p95_ms": 1076.994, + "max_ms": 1076.994 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 72.79, + "median_ms": 79.763, + "mean_ms": 169.933, + "p95_ms": 482.098, + "max_ms": 482.098 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 0.539, + "median_ms": 0.809, + "mean_ms": 15.686, + "p95_ms": 67.1, + "max_ms": 67.1 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 0.41, + "median_ms": 0.481, + "mean_ms": 1.114, + "p95_ms": 4.064, + "max_ms": 4.064 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 0.503, + "median_ms": 1.187, + "mean_ms": 12.449, + "p95_ms": 69.406, + "max_ms": 69.406 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 4.191, + "median_ms": 5.658, + "mean_ms": 6.423, + "p95_ms": 10.396, + "max_ms": 10.396 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 0.349, + "median_ms": 0.48, + "mean_ms": 1.012, + "p95_ms": 3.75, + "max_ms": 3.75 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 0.517, + "median_ms": 0.838, + "mean_ms": 2.441, + "p95_ms": 8.979, + "max_ms": 8.979 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 0.564, + "median_ms": 1.058, + "mean_ms": 1.66, + "p95_ms": 5.582, + "max_ms": 5.582 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 0.245, + "median_ms": 0.281, + "mean_ms": 4.827, + "p95_ms": 27.594, + "max_ms": 27.594 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 0.338, + "median_ms": 4.047, + "mean_ms": 2.991, + "p95_ms": 8.709, + "max_ms": 8.709 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 0.336, + "median_ms": 28.674, + "mean_ms": 22.254, + "p95_ms": 46.688, + "max_ms": 46.688 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 0.226, + "median_ms": 0.327, + "mean_ms": 0.483, + "p95_ms": 1.396, + "max_ms": 1.396 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 0.203, + "median_ms": 16.799, + "mean_ms": 12.212, + "p95_ms": 26.903, + "max_ms": 26.903 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 1.804, + "median_ms": 22.371, + "mean_ms": 16.839, + "p95_ms": 33.936, + "max_ms": 33.936 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 1.306, + "median_ms": 3.466, + "mean_ms": 7.087, + "p95_ms": 28.894, + "max_ms": 28.894 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 8.904, + "median_ms": 11.546, + "mean_ms": 27.283, + "p95_ms": 104.44, + "max_ms": 104.44 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 187.885, + "median_ms": 199.179, + "mean_ms": 340.006, + "p95_ms": 972.067, + "max_ms": 972.067 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 0.346, + "median_ms": 0.544, + "mean_ms": 1.304, + "p95_ms": 5.533, + "max_ms": 5.533 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 3.877, + "median_ms": 66.162, + "mean_ms": 49.377, + "p95_ms": 88.066, + "max_ms": 88.066 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 37.213, + "median_ms": 141.337, + "mean_ms": 371.892, + "p95_ms": 1133.229, + "max_ms": 1133.229 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 1.071, + "median_ms": 1.226, + "mean_ms": 1.249, + "p95_ms": 1.611, + "max_ms": 1.611 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 0.301, + "median_ms": 3.104, + "mean_ms": 20.381, + "p95_ms": 109.743, + "max_ms": 109.743 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 32.97, + "median_ms": 232.057, + "mean_ms": 546.206, + "p95_ms": 2598.262, + "max_ms": 2598.262 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 0.203, + "median_ms": 0.55, + "mean_ms": 1.533, + "p95_ms": 6.986, + "max_ms": 6.986 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 1.941, + "median_ms": 124.931, + "mean_ms": 125.537, + "p95_ms": 428.976, + "max_ms": 428.976 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 0.153, + "median_ms": 0.17, + "mean_ms": 0.174, + "p95_ms": 0.224, + "max_ms": 0.224 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 0.13, + "median_ms": 0.171, + "mean_ms": 0.175, + "p95_ms": 0.247, + "max_ms": 0.247 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 13.254, + "median_ms": 22.549, + "mean_ms": 19.141, + "p95_ms": 25.679, + "max_ms": 25.679 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 146.297, + "median_ms": 216.304, + "mean_ms": 226.053, + "p95_ms": 329.926, + "max_ms": 329.926 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 3.641, + "median_ms": 4.284, + "mean_ms": 4.175, + "p95_ms": 4.617, + "max_ms": 4.617 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 5.52, + "median_ms": 7.61, + "mean_ms": 7.487, + "p95_ms": 11.269, + "max_ms": 11.269 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 19.198, + "median_ms": 23.114, + "mean_ms": 24.171, + "p95_ms": 37.226, + "max_ms": 37.226 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 1045.502, + "median_ms": 1171.194, + "mean_ms": 1124.827, + "p95_ms": 1223.71, + "max_ms": 1223.71 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 597.366, + "median_ms": 639.142, + "mean_ms": 620.475, + "p95_ms": 643.213, + "max_ms": 643.213 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 109.495, + "median_ms": 124.196, + "mean_ms": 153.311, + "p95_ms": 226.241, + "max_ms": 226.241 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 1463.254, + "median_ms": 1463.254, + "mean_ms": 1463.254, + "p95_ms": 1463.254, + "max_ms": 1463.254 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 950.757, + "median_ms": 950.757, + "mean_ms": 950.757, + "p95_ms": 950.757, + "max_ms": 950.757 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 384, + "min_ms": 0.188, + "median_ms": 0.342, + "mean_ms": 0.346, + "p95_ms": 0.468, + "max_ms": 1.412 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 384, + "min_ms": 0.193, + "median_ms": 0.583, + "mean_ms": 5.36, + "p95_ms": 19.174, + "max_ms": 40.733 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 384, + "min_ms": 93.461, + "median_ms": 155.547, + "mean_ms": 151.271, + "p95_ms": 171.648, + "max_ms": 219.508 + } + ] +} diff --git a/benchmarks/liveview/results/20260310-174639/headful-constrained/results.md b/benchmarks/liveview/results/20260310-174639/headful-constrained/results.md new file mode 100644 index 00000000..d5427710 --- /dev/null +++ b/benchmarks/liveview/results/20260310-174639/headful-constrained/results.md @@ -0,0 +1,61 @@ + +## headful-constrained + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 36.3ms | 36.3ms | 36.3ms | 36.3ms | 36.3ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 58.2ms | 100.2ms | 109.2ms | 218.9ms | 218.9ms | 6 | +| Screenshot.PNG | 94.7ms | 163.1ms | 175.6ms | 301.7ms | 301.7ms | 6 | +| Screenshot.FullPage | 118.5ms | 497.7ms | 493.8ms | 1.58s | 1.58s | 6 | +| Screenshot.ClipRegion | 75.6ms | 103.9ms | 188.0ms | 481.2ms | 481.2ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 492µs | 736µs | 4.2ms | 20.3ms | 20.3ms | 6 | +| Eval.QuerySelectorAll | 342µs | 418µs | 3.5ms | 19.2ms | 19.2ms | 6 | +| Eval.InnerText | 441µs | 1.7ms | 15.4ms | 70.1ms | 70.1ms | 6 | +| Eval.GetComputedStyle | 4.2ms | 5.0ms | 9.3ms | 20.9ms | 20.9ms | 6 | +| Eval.ScrollToBottom | 330µs | 389µs | 1.1ms | 5.0ms | 5.0ms | 6 | +| Eval.DOMManipulation | 488µs | 652µs | 752µs | 1.1ms | 1.1ms | 6 | +| Eval.BoundingRects | 480µs | 954µs | 1.4ms | 4.0ms | 4.0ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 214µs | 276µs | 987µs | 4.7ms | 4.7ms | 6 | +| DOM.GetDocument.Deep | 269µs | 2.1ms | 6.9ms | 32.9ms | 32.9ms | 6 | +| DOM.GetDocument.Full | 241µs | 33.7ms | 23.9ms | 49.8ms | 49.8ms | 6 | +| DOM.QuerySelector | 249µs | 380µs | 868µs | 2.1ms | 2.1ms | 6 | +| DOM.GetOuterHTML | 278µs | 18.2ms | 13.4ms | 32.0ms | 32.0ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 7.1ms | 24.9ms | 20.2ms | 27.2ms | 27.2ms | 6 | +| Input.Click | 1.5ms | 3.3ms | 8.7ms | 36.9ms | 36.9ms | 6 | +| Input.TypeText | 8.5ms | 10.9ms | 26.5ms | 100.2ms | 100.2ms | 6 | +| Input.Scroll | 186.7ms | 200.1ms | 347.5ms | 988.6ms | 988.6ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 313µs | 697µs | 1.3ms | 5.4ms | 5.4ms | 6 | +| Network.GetResponseBody | 4.1ms | 66.9ms | 47.5ms | 74.5ms | 74.5ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 32.5ms | 174.8ms | 460.9ms | 1.84s | 1.84s | 6 | +| Page.GetNavigationHistory | 833µs | 1.3ms | 1.5ms | 3.0ms | 3.0ms | 6 | +| Page.GetLayoutMetrics | 208µs | 9.0ms | 31.9ms | 144.2ms | 144.2ms | 6 | +| Page.PrintToPDF | 29.4ms | 246.9ms | 719.7ms | 3.62s | 3.62s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 253µs | 397µs | 468µs | 956µs | 956µs | 6 | +| Emulation.SetMobile | 1.3ms | 107.6ms | 122.0ms | 425.1ms | 425.1ms | 6 | +| Emulation.SetGeolocation | 165µs | 237µs | 233µs | 322µs | 322µs | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 130µs | 214µs | 189µs | 246µs | 246µs | 6 | +| Target.CreateAndClose | 15.6ms | 22.9ms | 22.8ms | 28.9ms | 28.9ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 136.6ms | 264.0ms | 244.4ms | 376.5ms | 376.5ms | 6 | +| Composite.ScrapeLinks | 3.5ms | 3.7ms | 3.9ms | 4.6ms | 4.6ms | 6 | +| Composite.FillForm | 5.7ms | 8.2ms | 7.7ms | 8.8ms | 8.8ms | 6 | +| Composite.ClickAndWait | 17.5ms | 21.9ms | 24.6ms | 40.2ms | 40.2ms | 6 | +| Composite.RapidScreenshots | 1.10s | 1.16s | 1.16s | 1.22s | 1.22s | 6 | +| Composite.ScrollAndCapture | 603.1ms | 743.6ms | 704.2ms | 759.6ms | 759.6ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 110.9ms | 216.5ms | 190.8ms | 244.9ms | 244.9ms | 3 | +| Navigate[spa] | 1.52s | 1.52s | 1.52s | 1.52s | 1.52s | 1 | +| Navigate[media] | 1.15s | 1.15s | 1.15s | 1.15s | 1.15s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 196µs | 353µs | 445µs | 866µs | 3.1ms | 379 | +| Concurrent.Evaluate | 212µs | 683µs | 6.4ms | 19.9ms | 61.1ms | 379 | +| Concurrent.Screenshot | 87.9ms | 155.2ms | 152.2ms | 183.6ms | 214.3ms | 379 | diff --git a/benchmarks/liveview/results/headful-constrained-results.md b/benchmarks/liveview/results/headful-constrained-results.md new file mode 100644 index 00000000..71553a3a --- /dev/null +++ b/benchmarks/liveview/results/headful-constrained-results.md @@ -0,0 +1,144 @@ +# Headful under Headless Resource Constraints + +**Date**: 2026-03-10 +**Goal**: Measure headful Chromium performance when given the same resource budget as headless (1024 MB / 4 vCPUs), compared against the standard headful allocation (8192 MB / 8 vCPUs) and headless baselines. + +## Resource Configuration + +| Variant | Image | Memory | vCPUs | Image Size | +|---|---|---|---|---| +| Baseline | headless | 1024 MB | 4 | 2.10 GB | +| Approach 1 (Xvfb/noVNC) | headless | 1024 MB | 4 | 2.22 GB | +| Approach 2 (CDP screencast) | headless | 1024 MB | 4 | 2.11 GB | +| Headful (standard) | headful | 8192 MB | 8 | 2.66 GB | +| **Headful (constrained)** | **headful** | **1024 MB** | **4** | **2.66 GB** | + +## Memory Usage + +| Variant | Idle | After Workload | Idle % of Limit | +|---|---|---|---| +| Baseline | 198.8 MiB | 274.2 MiB | 19% | +| Approach 1 | 268.0 MiB | 279.1 MiB | 26% | +| Approach 2 | 194.7 MiB | 343.1 MiB | 19% | +| Headful (8 GB) | 389.9 MiB | 862.0 MiB | 4.8% | +| **Headful (1 GB)** | **399.2 MiB** | **529.4 MiB** | **39%** | + +The headful image consumes ~400 MiB at idle regardless of memory allocation. Under the 1 GB constraint this leaves only ~600 MiB for actual browsing — versus ~7.6 GB when given the full headful allocation. After a workload, it reaches 52% utilization, leaving little headroom for complex pages. + +## Concurrent Throughput + +| Variant | Workers | Duration | Operations Completed | +|---|---|---|---| +| Baseline | 3 | 20s | 471 | +| Approach 1 | 3 | 20s | 471 | +| Approach 2 | 3 | 20s | 471 | +| Headful (8 GB) | 3 | 20s | 471 | +| **Headful (1 GB)** | **3** | **20s** | **379** | + +Constrained headful produced **19% fewer** concurrent operations than any other variant. + +## Side-by-Side Comparison (Median Latency) + +| Operation | Baseline | Approach 1 | Approach 2 | Headful (8 GB) | Headful (1 GB) | vs Baseline | +|---|---:|---:|---:|---:|---:|---| +| **Navigation** | | | | | | | +| Navigate[static] | 22.8ms | 30.4ms | 27.2ms | 35.1ms | 34.4ms | +50% | +| Navigate[content] | 119.4ms | 119.3ms | 214.4ms | 113.7ms | 124.2ms | +4% | +| Navigate[spa] | 1.45s | 1.37s | 1.36s | 1.29s | 1.46s | ~ | +| Navigate[media] | 764.5ms | 965.9ms | 867.2ms | 790.2ms | 950.8ms | +24% | +| **Screenshot** | | | | | | | +| Screenshot.JPEG.q80 | 62.5ms | 83.7ms | 57.4ms | 94.4ms | 88.1ms | +41% | +| Screenshot.PNG | 108.2ms | 120.5ms | 121.0ms | 171.9ms | 165.5ms | +53% | +| Screenshot.FullPage | 461.4ms | 494.4ms | 446.3ms | 448.1ms | 489.7ms | +6% | +| Screenshot.ClipRegion | 36.6ms | 42.9ms | 38.7ms | 84.9ms | 79.8ms | +118% | +| **JS Evaluation** | | | | | | | +| Eval.Trivial | 596us | 684us | 473us | 579us | 809us | +36% | +| Eval.QuerySelectorAll | 560us | 469us | 338us | 386us | 481us | -14% | +| Eval.InnerText | 964us | 1.9ms | 739us | 1.8ms | 1.2ms | +23% | +| Eval.GetComputedStyle | 5.3ms | 6.7ms | 4.9ms | 4.0ms | 5.7ms | +7% | +| Eval.ScrollToBottom | 376us | 579us | 490us | 372us | 480us | +28% | +| Eval.DOMManipulation | 627us | 872us | 652us | 580us | 838us | +34% | +| Eval.BoundingRects | 855us | 760us | 4.4ms | 658us | 1.1ms | +24% | +| **DOM** | | | | | | | +| DOM.GetDocument.Shallow | 238us | 355us | 277us | 219us | 281us | +18% | +| DOM.GetDocument.Deep | 4.2ms | 3.3ms | 5.9ms | 4.6ms | 4.0ms | ~ | +| DOM.GetDocument.Full | 17.8ms | 21.2ms | 22.1ms | 22.8ms | 28.7ms | +61% | +| DOM.QuerySelector | 305us | 326us | 304us | 314us | 327us | +7% | +| DOM.GetOuterHTML | 23.0ms | 24.4ms | 24.2ms | 19.5ms | 16.8ms | -27% | +| **Input** | | | | | | | +| Input.MouseMove | 4.5ms | 8.0ms | 4.9ms | 15.6ms | 22.4ms | **+397%** | +| Input.Click | 3.2ms | 3.2ms | 3.4ms | 3.1ms | 3.5ms | +8% | +| Input.TypeText | 9.5ms | 9.9ms | 9.4ms | 11.3ms | 11.5ms | +22% | +| Input.Scroll | 74.5ms | 72.9ms | 76.3ms | 198.8ms | 199.2ms | **+167%** | +| **Network** | | | | | | | +| Network.GetCookies | 483us | 660us | 394us | 523us | 544us | +13% | +| Network.GetResponseBody | 65.7ms | 59.2ms | 55.0ms | 68.3ms | 66.2ms | ~ | +| **Page** | | | | | | | +| Page.Reload | 139.8ms | 146.6ms | 135.1ms | 140.4ms | 141.3ms | ~ | +| Page.GetNavigationHistory | 1.2ms | 1.6ms | 1.3ms | 1.5ms | 1.2ms | ~ | +| Page.GetLayoutMetrics | 3.6ms | 3.3ms | 3.3ms | 2.3ms | 3.1ms | -14% | +| Page.PrintToPDF | 221.7ms | 225.8ms | 216.9ms | 229.7ms | 232.1ms | +5% | +| **Emulation** | | | | | | | +| Emulation.SetViewport | 499us | 322us | 302us | 692us | 550us | +10% | +| Emulation.SetMobile | 101.0ms | 105.0ms | 110.4ms | 95.4ms | 124.9ms | +24% | +| Emulation.SetGeolocation | 145us | 172us | 151us | 212us | 170us | +17% | +| **Target** | | | | | | | +| Target.GetTargets | 124us | 140us | 121us | 143us | 171us | +38% | +| Target.CreateAndClose | 17.4ms | 17.7ms | 16.9ms | 17.2ms | 22.5ms | +29% | +| **Composite** | | | | | | | +| Composite.NavAndScreenshot | 135.7ms | 154.1ms | 156.7ms | 228.1ms | 216.3ms | +59% | +| Composite.ScrapeLinks | 3.9ms | 4.7ms | 3.4ms | 4.1ms | 4.3ms | +9% | +| Composite.FillForm | 6.7ms | 8.0ms | 6.7ms | 7.5ms | 7.6ms | +13% | +| Composite.ClickAndWait | 24.6ms | 27.1ms | 26.8ms | 20.6ms | 23.1ms | -6% | +| Composite.RapidScreenshots | 693.2ms | 865.6ms | 691.7ms | 1.13s | 1.17s | **+69%** | +| Composite.ScrollAndCapture | 520.8ms | 649.0ms | 503.5ms | 605.2ms | 639.1ms | +23% | +| **Concurrent** | | | | | | | +| Concurrent.DOM | 339us | 432us | 328us | 328us | 342us | ~ | +| Concurrent.Evaluate | 19.1ms | 19.5ms | 18.4ms | 533us | 583us | -97% | +| Concurrent.Screenshot | 106.3ms | 112.5ms | 98.5ms | 147.8ms | 155.5ms | +46% | + +## Key Findings + +### Severely impacted operations (>50% slower than baseline) + +- **Input.MouseMove**: +397% (4.5ms -> 22.4ms) — X display server overhead dominates +- **Input.Scroll**: +167% (74.5ms -> 199.2ms) — compositor + rendering pipeline under memory pressure +- **Screenshot.ClipRegion**: +118% (36.6ms -> 79.8ms) +- **Composite.RapidScreenshots**: +69% (693ms -> 1.17s) +- **DOM.GetDocument.Full**: +61% (17.8ms -> 28.7ms) +- **Composite.NavAndScreenshot**: +59% (135.7ms -> 216.3ms) +- **Screenshot.PNG**: +53% (108ms -> 165ms) + +### Moderately impacted (10–50% slower) + +- Screenshot.JPEG.q80: +41% +- Target.GetTargets: +38% +- Eval.Trivial: +36% +- Eval.DOMManipulation: +34% +- Target.CreateAndClose: +29% +- Eval.ScrollToBottom: +28% +- Navigate[static]: +50% + +### Unaffected operations (~baseline) + +- Page.Reload, Page.GetNavigationHistory, Network.GetResponseBody +- DOM.GetDocument.Deep, Concurrent.DOM +- Input.Click (already fast enough that overhead doesn't matter) + +## Analysis + +The headful image running under headless-level resource constraints (1024 MB / 4 vCPUs) is **not a viable configuration**: + +1. **Memory pressure**: The X display server (Xvfb), window manager, and VNC/noVNC infrastructure consume ~400 MiB at idle — 39% of the 1 GB limit. This leaves only ~600 MiB for Chromium to render pages. In contrast, baseline headless uses only 199 MiB idle (19%). + +2. **Input latency explosion**: Operations that require rendering through the X display pipeline (MouseMove, Scroll) see the largest regressions. The compositor must process events through Xvfb's framebuffer, which becomes a bottleneck under CPU constraints. + +3. **Screenshot overhead**: Every screenshot requires reading from the X framebuffer, adding overhead proportional to the captured area. Clip-region screenshots (+118%) and rapid sequential screenshots (+69%) are particularly affected. + +4. **Reduced throughput**: Concurrent workloads completed only 379 operations versus 471 for baseline — a 19% throughput reduction. Under sustained parallel load, the constrained headful image falls behind. + +5. **Comparison with standard headful**: The constrained headful performs similarly to or slightly worse than standard headful (8 GB/8 vCPUs) on most operations. The main difference is that standard headful has ample headroom, while constrained headful is operating near its limits and would degrade further on complex pages. + +## Conclusion + +Running the headful image at headless-equivalent resources is not advisable. If a live view is needed within the headless resource envelope (1024 MB / 4 vCPUs), **Approach 2 (CDP screencast)** is the clear winner: it maintains near-baseline CDP latency while adding only ~10 MB to image size and negligible idle memory overhead. diff --git a/benchmarks/liveview/results/ukc-final/SUMMARY.md b/benchmarks/liveview/results/ukc-final/SUMMARY.md new file mode 100644 index 00000000..f28b06f0 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/SUMMARY.md @@ -0,0 +1,130 @@ +# Unikraft (KraftCloud) Live View Benchmark Results + +**Date**: 2026-03-11 +**Platform**: KraftCloud (dev-iad-unikraft-3) +**Iterations**: 2 (warmup: 1) +**Concurrent**: 3 workers, 20s + +## Variants + +| Variant | Branch | Image Type | Memory | vCPUs | Image Size | +|---|---|---|---|---|---| +| Baseline | main | headless | 3072 MiB | default | 2.1 GB | +| Approach 1 (Xvfb/noVNC) | feat/headless-live-view | headless | 3072 MiB | default | 2.2 GB | +| Approach 2 (CDP screencast) | headless-cdp-live-view | headless | 3072 MiB | default | 2.1 GB | +| Headful | main | headful | 4096 MiB | 4 | 2.6 GB | + +Note: headless instances use KraftCloud default vCPU allocation (1 vCPU in run-unikernel.sh). Headful gets 4 vCPUs and 4096 MiB per run-unikernel.sh defaults. + +## Side-by-Side Comparison (Median Latency) + +| Operation | Baseline | Approach 1 | Approach 2 | Headful | +|---|---:|---:|---:|---:| +| **Navigation** | | | | | +| Navigate[static] | 91.2ms | 96.2ms | 82.8ms | 54.1ms | +| Navigate[content] | 218.1ms | 176.0ms | 180.0ms | 130.5ms | +| Navigate[spa] | 3.30s | 2.33s | 2.52s | 1.51s | +| Navigate[media] | 3.02s | 1.83s | 1.81s | 797.9ms | +| **Screenshot** | | | | | +| Screenshot.JPEG.q80 | 78.5ms | 87.4ms | 105.8ms | 134.9ms | +| Screenshot.PNG | 112.4ms | 178.7ms | 144.3ms | 146.6ms | +| Screenshot.FullPage | 695.8ms | 636.0ms | 764.8ms | 548.9ms | +| Screenshot.ClipRegion | 40.6ms | 42.5ms | 40.6ms | 77.0ms | +| **JS Evaluation** | | | | | +| Eval.Trivial | 1.8ms | 1.9ms | 2.1ms | 1.7ms | +| Eval.QuerySelectorAll | 1.6ms | 1.6ms | 1.7ms | 1.6ms | +| Eval.InnerText | 2.0ms | 2.9ms | 3.1ms | 2.2ms | +| Eval.GetComputedStyle | 6.8ms | 20.4ms | 8.0ms | 6.5ms | +| Eval.ScrollToBottom | 2.4ms | 3.5ms | 1.9ms | 1.6ms | +| Eval.DOMManipulation | 2.0ms | 2.2ms | 2.0ms | 2.0ms | +| Eval.BoundingRects | 2.8ms | 2.2ms | 2.2ms | 2.0ms | +| **DOM** | | | | | +| DOM.GetDocument.Shallow | 1.7ms | 1.7ms | 1.6ms | 1.6ms | +| DOM.GetDocument.Deep | 5.7ms | 5.7ms | 5.7ms | 4.9ms | +| DOM.GetDocument.Full | 42.7ms | 47.0ms | 43.7ms | 40.4ms | +| DOM.QuerySelector | 2.1ms | 1.9ms | 2.1ms | 1.8ms | +| DOM.GetOuterHTML | 32.2ms | 32.0ms | 32.4ms | 33.7ms | +| **Input** | | | | | +| Input.MouseMove | 4.6ms | 12.1ms | 7.2ms | 34.3ms | +| Input.Click | 6.0ms | 5.7ms | 6.4ms | 5.4ms | +| Input.TypeText | 70.2ms | 72.2ms | 122.5ms | 61.6ms | +| Input.Scroll | 87.1ms | 89.4ms | 81.5ms | 195.5ms | +| **Network** | | | | | +| Network.GetCookies | 1.9ms | 1.8ms | 1.6ms | 1.7ms | +| Network.GetResponseBody | 70.7ms | 71.3ms | 77.6ms | 32.7ms | +| **Page** | | | | | +| Page.Reload | 164.4ms | 259.1ms | 179.1ms | 105.7ms | +| Page.GetNavigationHistory | 4.4ms | 4.7ms | 2.8ms | 1.8ms | +| Page.GetLayoutMetrics | 9.4ms | 4.9ms | 11.0ms | 9.4ms | +| Page.PrintToPDF | 577.0ms | 390.8ms | 370.9ms | 332.1ms | +| **Emulation** | | | | | +| Emulation.SetViewport | 2.9ms | 2.3ms | 2.7ms | 2.0ms | +| Emulation.SetMobile | 144.7ms | 110.2ms | 98.7ms | 78.9ms | +| Emulation.SetGeolocation | 1.6ms | 1.3ms | 1.4ms | 1.6ms | +| **Target** | | | | | +| Target.GetTargets | 1.7ms | 1.4ms | 1.4ms | 1.4ms | +| Target.CreateAndClose | 80.7ms | 60.5ms | 62.1ms | 35.4ms | +| **Composite** | | | | | +| Composite.NavAndScreenshot | 344.4ms | 418.2ms | 366.8ms | 289.4ms | +| Composite.ScrapeLinks | 4.6ms | 3.2ms | 6.2ms | 2.9ms | +| Composite.FillForm | 16.8ms | 26.9ms | 26.2ms | 13.8ms | +| Composite.ClickAndWait | 109.3ms | 122.7ms | 121.4ms | 37.4ms | +| Composite.RapidScreenshots | 912.3ms | 895.5ms | 941.2ms | 1.07s | +| Composite.ScrollAndCapture | 521.6ms | 537.8ms | 503.5ms | 642.7ms | +| **Concurrent** | | | | | +| Concurrent.DOM | 2.1ms | 2.3ms | 2.1ms | 1.8ms | +| Concurrent.Evaluate | 18.5ms | 18.3ms | 19.2ms | 10.0ms | +| Concurrent.Screenshot | 152.1ms | 157.6ms | 150.7ms | 151.4ms | + +## Key Observations + +### Network latency baseline + +All operations on Unikraft include ~1.5ms of round-trip network overhead (TLS WebSocket over the internet) compared to the Docker benchmarks which ran inside the container. This explains why sub-millisecond operations (Eval.Trivial, DOM.GetDocument.Shallow, etc.) show 1.5-2ms minimums on Unikraft. + +### Approach 1 (Xvfb/noVNC) vs Baseline + +- **Input.MouseMove**: 12.1ms vs 4.6ms (+163%) — X display pipeline overhead +- **Eval.GetComputedStyle**: 20.4ms vs 6.8ms (+200%) — rendering costs with active X display +- **Page.Reload**: 259.1ms vs 164.4ms (+58%) +- **Composite.FillForm**: 26.9ms vs 16.8ms (+60%) +- Most DOM/Network operations: minimal difference + +### Approach 2 (CDP screencast) vs Baseline + +- **Screenshot.JPEG.q80**: 105.8ms vs 78.5ms (+35%) — screencast background processing +- **Input.TypeText**: 122.5ms vs 70.2ms (+74%) — input event forwarding overhead +- **Most operations within noise**: DOM, Network, Target, Emulation nearly identical +- **Some operations faster**: Navigate[media] 1.81s vs 3.02s (-40%), Emulation.SetMobile 98.7ms vs 144.7ms (-32%) + +### Headful vs Headless Baseline + +Headful gets 4x more memory (4096 vs 3072 MiB) and 4x more vCPUs. This extra allocation shows: +- **Navigation much faster**: Navigate[spa] 1.51s vs 3.30s, Navigate[media] 797ms vs 3.02s +- **Input.Scroll much slower**: 195.5ms vs 87.1ms (+124%) — X display compositor +- **Input.MouseMove much slower**: 34.3ms vs 4.6ms (+646%) — X display pipeline +- **Target.CreateAndClose faster**: 35.4ms vs 80.7ms — more CPU available +- **Concurrent.Screenshot similar**: 151.4ms vs 152.1ms — screenshot perf CPU-bound + +### Unikraft vs Docker comparison (Baseline) + +| Operation | Docker (in-container) | Unikraft (remote) | Notes | +|---|---:|---:|---| +| Eval.Trivial | 570us | 1.8ms | +~1.2ms network RTT | +| DOM.GetDocument.Shallow | 295us | 1.7ms | +~1.4ms network RTT | +| Screenshot.JPEG.q80 | 65.4ms | 78.5ms | +20% (network + env diff) | +| Navigate[static] | 22.7ms | 91.2ms | 4x slower (1 vCPU vs 4) | +| Navigate[spa] | 1.44s | 3.30s | 2.3x slower (CPU-bound) | +| Concurrent.Screenshot | 106.3ms | 152.1ms | +43% | + +The biggest difference is CPU-sensitive operations. Unikraft headless runs on 1 vCPU (per run-unikernel.sh default) vs Docker's 4 vCPUs, making navigation and rendering significantly slower. + +## Conclusion + +On Unikraft, both live view approaches add **moderate overhead** to the headless baseline: + +- **Approach 1 (Xvfb/noVNC)**: Largest impact on input and rendering operations due to the X display server pipeline. Adds ~100 MB to image size. +- **Approach 2 (CDP screencast)**: Smaller and more targeted overhead, mainly on screenshot and input forwarding operations. Adds ~10 MB to image size. +- **Headful**: Fastest for navigation due to 4x more resources, but pays a heavy penalty on input/scroll operations due to compositor overhead. + +For the headless use case on Unikraft, **Approach 2 (CDP screencast) remains the better choice** — it preserves true headless mode, has minimal image size impact, and its overhead is concentrated in screenshot operations that are only active when someone is watching the live view. diff --git a/benchmarks/liveview/results/ukc-final/approach1/bench-json.log b/benchmarks/liveview/results/ukc-final/approach1/bench-json.log new file mode 100644 index 00000000..ea74e0c8 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach1/bench-json.log @@ -0,0 +1,36 @@ +time=2026-03-10T20:09:50.824-04:00 level=INFO msg="connecting to CDP" base=https://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T20:09:50.863-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:50.876-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:50.877-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:09:50.880-04:00 level=INFO msg="attached to page session" sessionId=81849CD1F17043857735DEF73331DF9C +time=2026-03-10T20:09:50.880-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T20:09:50.880-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T20:09:50.887-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:09:53.894-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:09:57.345-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:10:02.778-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:10:18.242-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:10:34.596-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:10:34.614-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:10:34.616-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:10:34.618-04:00 level=INFO msg="attached to page session" sessionId=D5C05CE6030569D4AF46CC9C516B1ADA +time=2026-03-10T20:10:34.618-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=approach1 +time=2026-03-10T20:10:34.624-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:10:37.526-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:10:41.111-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:10:46.493-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:11:00.907-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:11:17.023-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T20:11:21.880-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T20:11:21.882-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:11:21.883-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:11:21.885-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:11:21.963-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:11:21.963-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:11:21.964-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:11:21.965-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:11:21.966-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:11:21.966-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:11:21.968-04:00 level=INFO msg="attached to page session" sessionId=15D01BE46CA4ACAE92887E38DCAB0F4C +time=2026-03-10T20:11:21.969-04:00 level=INFO msg="attached to page session" sessionId=9E4FB1A2E2654644C23FEEEA610E7448 +time=2026-03-10T20:11:21.969-04:00 level=INFO msg="attached to page session" sessionId=BBA328E08DDF245A27C4D1A2AF38983C diff --git a/benchmarks/liveview/results/ukc-final/approach1/bench.log b/benchmarks/liveview/results/ukc-final/approach1/bench.log new file mode 100644 index 00000000..d5789da0 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach1/bench.log @@ -0,0 +1,36 @@ +time=2026-03-10T20:07:42.285-04:00 level=INFO msg="connecting to CDP" base=https://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T20:07:42.403-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:07:42.422-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:07:42.437-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:07:42.442-04:00 level=INFO msg="attached to page session" sessionId=D58DB44A858314014540149653028E2E +time=2026-03-10T20:07:42.442-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T20:07:42.442-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T20:07:42.468-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:07:45.719-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:07:49.368-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:07:55.338-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:08:13.083-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:08:35.026-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:08:35.048-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:08:35.050-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:08:35.051-04:00 level=INFO msg="attached to page session" sessionId=2BA4C5D34B35643A0C6E39566A6F6EEC +time=2026-03-10T20:08:35.051-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=approach1 +time=2026-03-10T20:08:35.057-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:08:38.100-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:08:41.615-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:08:47.582-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:09:03.047-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:09:25.813-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T20:09:30.784-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T20:09:30.786-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:30.787-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:30.789-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 rewritten=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:30.806-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:30.807-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:30.807-04:00 level=INFO msg="connected to browser WS" url=wss://bitter-sky-ggqe08al.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/dcf23eac-7b03-45de-9e13-d2a089f32192 +time=2026-03-10T20:09:30.809-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:09:30.809-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:09:30.810-04:00 level=INFO msg="found page target" id=D3897A61B8EE645BEFE4B1822228C417 +time=2026-03-10T20:09:30.811-04:00 level=INFO msg="attached to page session" sessionId=6C18EB90CAA915FDBDFC8588DA7AA865 +time=2026-03-10T20:09:30.812-04:00 level=INFO msg="attached to page session" sessionId=FD6C43C4E0937D1111AE54D0B6CE005E +time=2026-03-10T20:09:30.813-04:00 level=INFO msg="attached to page session" sessionId=BCF9F3F91C1447649F4E7B6CAF4AB294 diff --git a/benchmarks/liveview/results/ukc-final/approach1/results.json b/benchmarks/liveview/results/ukc-final/approach1/results.json new file mode 100644 index 00000000..b42bb8d9 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach1/results.json @@ -0,0 +1,445 @@ +{ + "label": "approach1", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 96.176, + "median_ms": 96.176, + "mean_ms": 96.176, + "p95_ms": 96.176, + "max_ms": 96.176 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 50.265, + "median_ms": 87.425, + "mean_ms": 242.918, + "p95_ms": 632.56, + "max_ms": 632.56 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 54.9, + "median_ms": 178.697, + "mean_ms": 370.019, + "p95_ms": 1193.25, + "max_ms": 1193.25 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 62.84, + "median_ms": 635.963, + "mean_ms": 679.882, + "p95_ms": 1778.494, + "max_ms": 1778.494 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 25.001, + "median_ms": 42.537, + "mean_ms": 123.028, + "p95_ms": 412.122, + "max_ms": 412.122 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 1.638, + "median_ms": 1.882, + "mean_ms": 15.358, + "p95_ms": 78.565, + "max_ms": 78.565 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 1.522, + "median_ms": 1.595, + "mean_ms": 4.336, + "p95_ms": 17.563, + "max_ms": 17.563 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 1.569, + "median_ms": 2.914, + "mean_ms": 13.828, + "p95_ms": 52.891, + "max_ms": 52.891 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 6.376, + "median_ms": 20.367, + "mean_ms": 15.211, + "p95_ms": 28.489, + "max_ms": 28.489 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 1.632, + "median_ms": 3.538, + "mean_ms": 3.419, + "p95_ms": 7.613, + "max_ms": 7.613 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 1.828, + "median_ms": 2.232, + "mean_ms": 4.3, + "p95_ms": 13.224, + "max_ms": 13.224 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 1.965, + "median_ms": 2.194, + "mean_ms": 26.598, + "p95_ms": 148.109, + "max_ms": 148.109 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 1.487, + "median_ms": 1.652, + "mean_ms": 20.234, + "p95_ms": 110.62, + "max_ms": 110.62 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 1.548, + "median_ms": 5.688, + "mean_ms": 7.032, + "p95_ms": 24.077, + "max_ms": 24.077 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 1.781, + "median_ms": 46.99, + "mean_ms": 42.976, + "p95_ms": 105.82, + "max_ms": 105.82 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 1.572, + "median_ms": 1.86, + "mean_ms": 7.34, + "p95_ms": 35.219, + "max_ms": 35.219 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 1.443, + "median_ms": 31.963, + "mean_ms": 25.375, + "p95_ms": 74.36, + "max_ms": 74.36 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 1.725, + "median_ms": 12.052, + "mean_ms": 25.973, + "p95_ms": 116.223, + "max_ms": 116.223 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 3.779, + "median_ms": 5.698, + "mean_ms": 53.533, + "p95_ms": 295.252, + "max_ms": 295.252 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 59.593, + "median_ms": 72.156, + "mean_ms": 344.928, + "p95_ms": 1350.289, + "max_ms": 1350.289 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 60.887, + "median_ms": 89.363, + "mean_ms": 341.632, + "p95_ms": 1615.962, + "max_ms": 1615.962 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 1.394, + "median_ms": 1.801, + "mean_ms": 2.276, + "p95_ms": 5.258, + "max_ms": 5.258 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 8.719, + "median_ms": 71.319, + "mean_ms": 115.482, + "p95_ms": 335.097, + "max_ms": 335.097 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 49.103, + "median_ms": 259.093, + "mean_ms": 726.902, + "p95_ms": 2555.591, + "max_ms": 2555.591 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 2.668, + "median_ms": 4.717, + "mean_ms": 4.382, + "p95_ms": 5.975, + "max_ms": 5.975 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 1.479, + "median_ms": 4.891, + "mean_ms": 43.611, + "p95_ms": 159.303, + "max_ms": 159.303 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 43.314, + "median_ms": 390.786, + "mean_ms": 783.997, + "p95_ms": 2736.738, + "max_ms": 2736.738 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 1.436, + "median_ms": 2.259, + "mean_ms": 10.844, + "p95_ms": 55.589, + "max_ms": 55.589 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 4.887, + "median_ms": 110.243, + "mean_ms": 166.442, + "p95_ms": 479.469, + "max_ms": 479.469 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 1.305, + "median_ms": 1.329, + "mean_ms": 4.895, + "p95_ms": 22.7, + "max_ms": 22.7 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 1.208, + "median_ms": 1.415, + "mean_ms": 2.554, + "p95_ms": 8.035, + "max_ms": 8.035 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 48.793, + "median_ms": 60.517, + "mean_ms": 70.141, + "p95_ms": 128.209, + "max_ms": 128.209 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 112.596, + "median_ms": 418.242, + "mean_ms": 391.683, + "p95_ms": 657.946, + "max_ms": 657.946 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 2.612, + "median_ms": 3.201, + "mean_ms": 4.612, + "p95_ms": 8.427, + "max_ms": 8.427 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 13.152, + "median_ms": 26.879, + "mean_ms": 22.524, + "p95_ms": 30.748, + "max_ms": 30.748 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 56.129, + "median_ms": 122.748, + "mean_ms": 101.107, + "p95_ms": 147.407, + "max_ms": 147.407 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 780.09, + "median_ms": 895.465, + "mean_ms": 897.871, + "p95_ms": 1010.864, + "max_ms": 1010.864 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 516.507, + "median_ms": 537.781, + "mean_ms": 544.584, + "p95_ms": 586.392, + "max_ms": 586.392 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 168.463, + "median_ms": 175.973, + "mean_ms": 321.794, + "p95_ms": 620.946, + "max_ms": 620.946 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 2333.973, + "median_ms": 2333.973, + "mean_ms": 2333.973, + "p95_ms": 2333.973, + "max_ms": 2333.973 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 1826.747, + "median_ms": 1826.747, + "mean_ms": 1826.747, + "p95_ms": 1826.747, + "max_ms": 1826.747 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 307, + "min_ms": 1.505, + "median_ms": 2.335, + "mean_ms": 4.506, + "p95_ms": 7.969, + "max_ms": 140.732 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 307, + "min_ms": 1.743, + "median_ms": 18.344, + "mean_ms": 30.973, + "p95_ms": 74.686, + "max_ms": 133.316 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 307, + "min_ms": 93.279, + "median_ms": 157.582, + "mean_ms": 159.05, + "p95_ms": 260.533, + "max_ms": 304.026 + } + ] +} diff --git a/benchmarks/liveview/results/ukc-final/approach1/results.md b/benchmarks/liveview/results/ukc-final/approach1/results.md new file mode 100644 index 00000000..4256daed --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach1/results.md @@ -0,0 +1,61 @@ + +## approach1 + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 98.2ms | 98.2ms | 98.2ms | 98.2ms | 98.2ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 61.9ms | 161.6ms | 281.6ms | 893.4ms | 893.4ms | 6 | +| Screenshot.PNG | 93.6ms | 110.4ms | 209.9ms | 602.4ms | 602.4ms | 6 | +| Screenshot.FullPage | 75.2ms | 753.0ms | 759.8ms | 1.98s | 1.98s | 6 | +| Screenshot.ClipRegion | 30.3ms | 44.5ms | 165.3ms | 658.1ms | 658.1ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 1.7ms | 1.8ms | 59.9ms | 349.2ms | 349.2ms | 6 | +| Eval.QuerySelectorAll | 1.4ms | 1.6ms | 60.8ms | 355.0ms | 355.0ms | 6 | +| Eval.InnerText | 1.6ms | 3.3ms | 32.4ms | 130.2ms | 130.2ms | 6 | +| Eval.GetComputedStyle | 5.9ms | 12.0ms | 146.9ms | 811.5ms | 811.5ms | 6 | +| Eval.ScrollToBottom | 1.7ms | 4.9ms | 21.6ms | 110.1ms | 110.1ms | 6 | +| Eval.DOMManipulation | 1.8ms | 11.5ms | 71.4ms | 396.6ms | 396.6ms | 6 | +| Eval.BoundingRects | 1.7ms | 2.6ms | 75.9ms | 442.4ms | 442.4ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 1.4ms | 1.6ms | 13.7ms | 65.3ms | 65.3ms | 6 | +| DOM.GetDocument.Deep | 1.6ms | 7.7ms | 11.9ms | 48.1ms | 48.1ms | 6 | +| DOM.GetDocument.Full | 1.4ms | 42.0ms | 45.9ms | 105.7ms | 105.7ms | 6 | +| DOM.QuerySelector | 1.6ms | 2.5ms | 5.5ms | 22.4ms | 22.4ms | 6 | +| DOM.GetOuterHTML | 1.4ms | 33.6ms | 21.5ms | 51.7ms | 51.7ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 1.8ms | 3.9ms | 8.7ms | 35.6ms | 35.6ms | 6 | +| Input.Click | 4.1ms | 5.9ms | 17.7ms | 78.5ms | 78.5ms | 6 | +| Input.TypeText | 59.5ms | 83.1ms | 190.4ms | 461.8ms | 461.8ms | 6 | +| Input.Scroll | 62.3ms | 81.7ms | 81.2ms | 119.8ms | 119.8ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 1.5ms | 1.6ms | 3.1ms | 6.8ms | 6.8ms | 6 | +| Network.GetResponseBody | 7.8ms | 71.1ms | 127.9ms | 375.4ms | 375.4ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 46.0ms | 177.9ms | 957.7ms | 3.12s | 3.12s | 6 | +| Page.GetNavigationHistory | 1.6ms | 7.6ms | 6.3ms | 13.2ms | 13.2ms | 6 | +| Page.GetLayoutMetrics | 1.5ms | 14.6ms | 32.0ms | 136.6ms | 136.6ms | 6 | +| Page.PrintToPDF | 38.3ms | 742.4ms | 1.42s | 5.20s | 5.20s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 1.5ms | 2.5ms | 3.1ms | 7.9ms | 7.9ms | 6 | +| Emulation.SetMobile | 9.3ms | 266.2ms | 497.1ms | 2.22s | 2.22s | 6 | +| Emulation.SetGeolocation | 1.2ms | 1.6ms | 2.8ms | 9.5ms | 9.5ms | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 1.3ms | 2.5ms | 7.6ms | 36.5ms | 36.5ms | 6 | +| Target.CreateAndClose | 40.4ms | 74.6ms | 100.0ms | 228.6ms | 228.6ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 128.7ms | 434.4ms | 450.6ms | 1.14s | 1.14s | 6 | +| Composite.ScrapeLinks | 2.3ms | 3.7ms | 5.0ms | 10.9ms | 10.9ms | 6 | +| Composite.FillForm | 12.6ms | 18.3ms | 17.6ms | 25.1ms | 25.1ms | 6 | +| Composite.ClickAndWait | 61.0ms | 73.8ms | 70.8ms | 81.2ms | 81.2ms | 6 | +| Composite.RapidScreenshots | 772.7ms | 899.5ms | 915.4ms | 1.08s | 1.08s | 6 | +| Composite.ScrollAndCapture | 512.1ms | 535.7ms | 536.8ms | 569.8ms | 569.8ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 172.0ms | 295.7ms | 296.7ms | 422.3ms | 422.3ms | 3 | +| Navigate[spa] | 3.70s | 3.70s | 3.70s | 3.70s | 3.70s | 1 | +| Navigate[media] | 2.15s | 2.15s | 2.15s | 2.15s | 2.15s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 1.5ms | 2.3ms | 4.9ms | 10.0ms | 129.6ms | 311 | +| Concurrent.Evaluate | 1.6ms | 19.1ms | 29.7ms | 74.6ms | 140.2ms | 311 | +| Concurrent.Screenshot | 88.9ms | 155.9ms | 158.2ms | 266.9ms | 321.4ms | 311 | diff --git a/benchmarks/liveview/results/ukc-final/approach2/bench-json.log b/benchmarks/liveview/results/ukc-final/approach2/bench-json.log new file mode 100644 index 00000000..caa6df57 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach2/bench-json.log @@ -0,0 +1,36 @@ +time=2026-03-10T20:03:44.660-04:00 level=INFO msg="connecting to CDP" base=https://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T20:03:44.699-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:44.713-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:44.715-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:03:44.720-04:00 level=INFO msg="attached to page session" sessionId=216B6837E8741A8CAF7E7DA24309D3CD +time=2026-03-10T20:03:44.720-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T20:03:44.720-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T20:03:44.728-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:03:47.718-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:03:51.000-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:03:56.537-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:04:12.415-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:04:30.135-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:04:30.152-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:04:30.153-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:04:30.155-04:00 level=INFO msg="attached to page session" sessionId=99AD74DA317D99FA2662A4752132A42D +time=2026-03-10T20:04:30.155-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=approach2 +time=2026-03-10T20:04:30.161-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:04:32.864-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:04:36.314-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:04:41.530-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:04:55.912-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:05:12.228-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T20:05:16.954-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T20:05:16.957-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:05:16.958-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:05:16.959-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:05:16.969-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:05:16.972-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:05:16.975-04:00 level=INFO msg="attached to page session" sessionId=372CF5C4DD4455A4F1FAC181E3682D53 +time=2026-03-10T20:05:16.981-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:05:16.982-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:05:16.984-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:05:16.984-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:05:16.987-04:00 level=INFO msg="attached to page session" sessionId=1C2B08844C3CA19EEC4887945C00666D +time=2026-03-10T20:05:16.989-04:00 level=INFO msg="attached to page session" sessionId=515C1D76C762E633D17F35945499D36A diff --git a/benchmarks/liveview/results/ukc-final/approach2/bench.log b/benchmarks/liveview/results/ukc-final/approach2/bench.log new file mode 100644 index 00000000..ff49823e --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach2/bench.log @@ -0,0 +1,36 @@ +time=2026-03-10T20:01:47.125-04:00 level=INFO msg="connecting to CDP" base=https://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T20:01:47.236-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:01:47.252-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:01:47.272-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:01:47.282-04:00 level=INFO msg="attached to page session" sessionId=EC38CD1B4485C21A45B3E64E5221973F +time=2026-03-10T20:01:47.282-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T20:01:47.282-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T20:01:47.304-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:01:50.406-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:01:53.905-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:01:59.355-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:02:15.789-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:02:35.824-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:02:35.839-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:02:35.841-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:02:35.843-04:00 level=INFO msg="attached to page session" sessionId=EA75161D0D160544C262037DA3704008 +time=2026-03-10T20:02:35.843-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=approach2 +time=2026-03-10T20:02:35.849-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:02:38.603-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:02:42.270-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:02:47.170-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:03:02.270-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:03:19.673-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T20:03:24.510-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T20:03:24.515-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:24.517-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:24.520-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a rewritten=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:24.533-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:24.535-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:03:24.535-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:24.535-04:00 level=INFO msg="connected to browser WS" url=wss://late-wind-f8l13mdp.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/abd88b91-35f6-4739-98be-8661a231979a +time=2026-03-10T20:03:24.538-04:00 level=INFO msg="attached to page session" sessionId=6ED1617D9E60D1E43D4239ED2550B9FA +time=2026-03-10T20:03:24.538-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:03:24.538-04:00 level=INFO msg="found page target" id=AB2B998CE2961B7E043C3EE879CF667F +time=2026-03-10T20:03:24.541-04:00 level=INFO msg="attached to page session" sessionId=A6BB91B4FB7ADA78D5BCBAB9481282FF +time=2026-03-10T20:03:24.541-04:00 level=INFO msg="attached to page session" sessionId=F061DB135FD99A7C269488DABA038392 diff --git a/benchmarks/liveview/results/ukc-final/approach2/results.json b/benchmarks/liveview/results/ukc-final/approach2/results.json new file mode 100644 index 00000000..9bef38f7 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach2/results.json @@ -0,0 +1,445 @@ +{ + "label": "approach2", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 82.827, + "median_ms": 82.827, + "mean_ms": 82.827, + "p95_ms": 82.827, + "max_ms": 82.827 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 41.762, + "median_ms": 105.788, + "mean_ms": 321.318, + "p95_ms": 862.683, + "max_ms": 862.683 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 57.216, + "median_ms": 144.315, + "mean_ms": 336.063, + "p95_ms": 1117.438, + "max_ms": 1117.438 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 61.912, + "median_ms": 764.799, + "mean_ms": 883.29, + "p95_ms": 3154.928, + "max_ms": 3154.928 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 24, + "median_ms": 40.575, + "mean_ms": 63.586, + "p95_ms": 189.52, + "max_ms": 189.52 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 1.744, + "median_ms": 2.078, + "mean_ms": 11.995, + "p95_ms": 57.051, + "max_ms": 57.051 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 1.598, + "median_ms": 1.676, + "mean_ms": 10.657, + "p95_ms": 54.715, + "max_ms": 54.715 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 1.717, + "median_ms": 3.077, + "mean_ms": 4.16, + "p95_ms": 10.8, + "max_ms": 10.8 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 6.145, + "median_ms": 7.963, + "mean_ms": 11.617, + "p95_ms": 25.11, + "max_ms": 25.11 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 1.617, + "median_ms": 1.921, + "mean_ms": 2.263, + "p95_ms": 3.823, + "max_ms": 3.823 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 1.794, + "median_ms": 2.036, + "mean_ms": 2.719, + "p95_ms": 6.525, + "max_ms": 6.525 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 1.797, + "median_ms": 2.158, + "mean_ms": 2.432, + "p95_ms": 4.551, + "max_ms": 4.551 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 1.526, + "median_ms": 1.628, + "mean_ms": 1.609, + "p95_ms": 1.694, + "max_ms": 1.694 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 1.55, + "median_ms": 5.665, + "mean_ms": 6.393, + "p95_ms": 21.183, + "max_ms": 21.183 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 1.539, + "median_ms": 43.677, + "mean_ms": 55.114, + "p95_ms": 161.493, + "max_ms": 161.493 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 1.745, + "median_ms": 2.109, + "mean_ms": 5.658, + "p95_ms": 23.742, + "max_ms": 23.742 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 1.477, + "median_ms": 32.39, + "mean_ms": 28.497, + "p95_ms": 93.416, + "max_ms": 93.416 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 2.074, + "median_ms": 7.25, + "mean_ms": 10.073, + "p95_ms": 25.278, + "max_ms": 25.278 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 3.675, + "median_ms": 6.433, + "mean_ms": 22.351, + "p95_ms": 104.692, + "max_ms": 104.692 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 63.507, + "median_ms": 122.516, + "mean_ms": 447.795, + "p95_ms": 2092.266, + "max_ms": 2092.266 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 64.927, + "median_ms": 81.471, + "mean_ms": 230.812, + "p95_ms": 922.559, + "max_ms": 922.559 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 1.422, + "median_ms": 1.644, + "mean_ms": 3.264, + "p95_ms": 8.552, + "max_ms": 8.552 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 7.72, + "median_ms": 77.642, + "mean_ms": 115.743, + "p95_ms": 351.654, + "max_ms": 351.654 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 36.221, + "median_ms": 179.137, + "mean_ms": 691.784, + "p95_ms": 3084.292, + "max_ms": 3084.292 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 1.695, + "median_ms": 2.831, + "mean_ms": 2.671, + "p95_ms": 4.052, + "max_ms": 4.052 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 3.155, + "median_ms": 10.991, + "mean_ms": 112.312, + "p95_ms": 599.044, + "max_ms": 599.044 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 28.447, + "median_ms": 370.941, + "mean_ms": 735.821, + "p95_ms": 2230.684, + "max_ms": 2230.684 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 1.472, + "median_ms": 2.657, + "mean_ms": 2.619, + "p95_ms": 4.42, + "max_ms": 4.42 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 5.841, + "median_ms": 98.7, + "mean_ms": 113.331, + "p95_ms": 271.522, + "max_ms": 271.522 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 1.313, + "median_ms": 1.388, + "mean_ms": 1.743, + "p95_ms": 3.222, + "max_ms": 3.222 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 1.362, + "median_ms": 1.415, + "mean_ms": 1.514, + "p95_ms": 2.09, + "max_ms": 2.09 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 39.072, + "median_ms": 62.076, + "mean_ms": 62.309, + "p95_ms": 119.921, + "max_ms": 119.921 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 117.09, + "median_ms": 366.838, + "mean_ms": 327.852, + "p95_ms": 410.789, + "max_ms": 410.789 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 2.758, + "median_ms": 6.215, + "mean_ms": 5.826, + "p95_ms": 9.457, + "max_ms": 9.457 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 12.073, + "median_ms": 26.175, + "mean_ms": 23.213, + "p95_ms": 27.412, + "max_ms": 27.412 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 61.462, + "median_ms": 121.389, + "mean_ms": 107.46, + "p95_ms": 125.557, + "max_ms": 125.557 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 785.089, + "median_ms": 941.222, + "mean_ms": 927.669, + "p95_ms": 1042.014, + "max_ms": 1042.014 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 496.538, + "median_ms": 503.51, + "mean_ms": 501.991, + "p95_ms": 504.29, + "max_ms": 504.29 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 165.821, + "median_ms": 179.955, + "mean_ms": 290.4, + "p95_ms": 525.425, + "max_ms": 525.425 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 2518.752, + "median_ms": 2518.752, + "mean_ms": 2518.752, + "p95_ms": 2518.752, + "max_ms": 2518.752 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 1807.063, + "median_ms": 1807.063, + "mean_ms": 1807.063, + "p95_ms": 1807.063, + "max_ms": 1807.063 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 319, + "min_ms": 1.439, + "median_ms": 2.097, + "mean_ms": 5.031, + "p95_ms": 14.984, + "max_ms": 96.356 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 319, + "min_ms": 1.491, + "median_ms": 19.181, + "mean_ms": 29.34, + "p95_ms": 82.041, + "max_ms": 167.833 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 319, + "min_ms": 81.498, + "median_ms": 150.666, + "mean_ms": 154.432, + "p95_ms": 248.868, + "max_ms": 294.351 + } + ] +} diff --git a/benchmarks/liveview/results/ukc-final/approach2/results.md b/benchmarks/liveview/results/ukc-final/approach2/results.md new file mode 100644 index 00000000..b4a45756 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/approach2/results.md @@ -0,0 +1,61 @@ + +## approach2 + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 95.4ms | 95.4ms | 95.4ms | 95.4ms | 95.4ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 31.2ms | 167.9ms | 299.7ms | 905.6ms | 905.6ms | 6 | +| Screenshot.PNG | 55.2ms | 171.2ms | 420.4ms | 1.24s | 1.24s | 6 | +| Screenshot.FullPage | 65.8ms | 607.1ms | 792.9ms | 2.55s | 2.55s | 6 | +| Screenshot.ClipRegion | 22.2ms | 37.1ms | 112.6ms | 429.0ms | 429.0ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 1.6ms | 2.8ms | 4.4ms | 14.7ms | 14.7ms | 6 | +| Eval.QuerySelectorAll | 1.6ms | 1.6ms | 1.8ms | 2.5ms | 2.5ms | 6 | +| Eval.InnerText | 1.7ms | 2.8ms | 18.6ms | 94.0ms | 94.0ms | 6 | +| Eval.GetComputedStyle | 6.3ms | 7.5ms | 13.9ms | 31.1ms | 31.1ms | 6 | +| Eval.ScrollToBottom | 1.7ms | 3.1ms | 4.2ms | 9.2ms | 9.2ms | 6 | +| Eval.DOMManipulation | 1.6ms | 2.7ms | 3.4ms | 7.9ms | 7.9ms | 6 | +| Eval.BoundingRects | 1.8ms | 2.4ms | 3.1ms | 5.2ms | 5.2ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 1.5ms | 2.1ms | 2.0ms | 3.0ms | 3.0ms | 6 | +| DOM.GetDocument.Deep | 1.6ms | 6.5ms | 11.8ms | 51.1ms | 51.1ms | 6 | +| DOM.GetDocument.Full | 1.4ms | 71.6ms | 62.5ms | 173.7ms | 173.7ms | 6 | +| DOM.QuerySelector | 1.7ms | 2.0ms | 8.2ms | 39.7ms | 39.7ms | 6 | +| DOM.GetOuterHTML | 1.7ms | 34.8ms | 43.0ms | 160.8ms | 160.8ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 2.5ms | 13.2ms | 20.7ms | 83.7ms | 83.7ms | 6 | +| Input.Click | 3.9ms | 6.0ms | 31.6ms | 153.2ms | 153.2ms | 6 | +| Input.TypeText | 63.6ms | 77.0ms | 428.8ms | 1.96s | 1.96s | 6 | +| Input.Scroll | 61.5ms | 71.8ms | 293.2ms | 1.36s | 1.36s | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 1.4ms | 2.1ms | 2.6ms | 5.9ms | 5.9ms | 6 | +| Network.GetResponseBody | 7.6ms | 71.1ms | 100.5ms | 287.7ms | 287.7ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 35.0ms | 160.4ms | 932.7ms | 3.14s | 3.14s | 6 | +| Page.GetNavigationHistory | 2.1ms | 5.5ms | 9.1ms | 27.3ms | 27.3ms | 6 | +| Page.GetLayoutMetrics | 3.7ms | 15.9ms | 30.1ms | 80.2ms | 80.2ms | 6 | +| Page.PrintToPDF | 28.6ms | 335.4ms | 707.9ms | 2.31s | 2.31s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 1.8ms | 2.8ms | 4.3ms | 13.4ms | 13.4ms | 6 | +| Emulation.SetMobile | 8.8ms | 124.4ms | 208.9ms | 676.9ms | 676.9ms | 6 | +| Emulation.SetGeolocation | 1.4ms | 2.4ms | 2.3ms | 4.0ms | 4.0ms | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 1.3ms | 2.1ms | 2.7ms | 6.5ms | 6.5ms | 6 | +| Target.CreateAndClose | 44.9ms | 85.5ms | 82.8ms | 121.3ms | 121.3ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 160.9ms | 364.1ms | 363.5ms | 679.6ms | 679.6ms | 6 | +| Composite.ScrapeLinks | 2.6ms | 5.1ms | 5.3ms | 8.1ms | 8.1ms | 6 | +| Composite.FillForm | 16.2ms | 25.1ms | 23.6ms | 31.9ms | 31.9ms | 6 | +| Composite.ClickAndWait | 62.1ms | 84.0ms | 85.3ms | 117.7ms | 117.7ms | 6 | +| Composite.RapidScreenshots | 812.2ms | 905.0ms | 886.7ms | 1.01s | 1.01s | 6 | +| Composite.ScrollAndCapture | 504.0ms | 508.3ms | 513.6ms | 536.3ms | 536.3ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 156.7ms | 346.2ms | 290.8ms | 369.4ms | 369.4ms | 3 | +| Navigate[spa] | 2.18s | 2.18s | 2.18s | 2.18s | 2.18s | 1 | +| Navigate[media] | 1.91s | 1.91s | 1.91s | 1.91s | 1.91s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 1.4ms | 2.4ms | 5.7ms | 8.9ms | 102.3ms | 297 | +| Concurrent.Evaluate | 1.6ms | 20.0ms | 29.6ms | 80.9ms | 173.9ms | 297 | +| Concurrent.Screenshot | 74.6ms | 164.1ms | 167.6ms | 272.9ms | 325.3ms | 297 | diff --git a/benchmarks/liveview/results/ukc-final/baseline/bench-json.log b/benchmarks/liveview/results/ukc-final/baseline/bench-json.log new file mode 100644 index 00000000..b5869ea5 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/baseline/bench-json.log @@ -0,0 +1,36 @@ +time=2026-03-10T19:57:37.232-04:00 level=INFO msg="connecting to CDP" base=https://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T19:57:37.273-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:37.287-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:37.289-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:57:37.292-04:00 level=INFO msg="attached to page session" sessionId=0E33B1F3F7ABBBB52D3E810918AF1BD7 +time=2026-03-10T19:57:37.292-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T19:57:37.292-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T19:57:37.298-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T19:57:40.254-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T19:57:43.720-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T19:57:49.390-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T19:58:04.469-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T19:58:22.588-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:58:22.601-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:58:22.602-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:58:22.604-04:00 level=INFO msg="attached to page session" sessionId=ECBE687B7060D44B27222B56253498EA +time=2026-03-10T19:58:22.604-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=baseline +time=2026-03-10T19:58:22.610-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T19:58:25.284-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T19:58:28.635-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T19:58:33.550-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T19:58:48.016-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T19:59:04.953-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T19:59:09.479-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T19:59:09.481-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:59:09.483-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:59:09.484-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:59:09.500-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:59:09.501-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:59:09.502-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:59:09.503-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:59:09.503-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:59:09.505-04:00 level=INFO msg="attached to page session" sessionId=3787B282B6D80AC80AE7F4A78BA5B2ED +time=2026-03-10T19:59:09.506-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:59:09.506-04:00 level=INFO msg="attached to page session" sessionId=72DCC66C989D86F626D82741CAF6EABF +time=2026-03-10T19:59:09.508-04:00 level=INFO msg="attached to page session" sessionId=8798C3C994D0BECBE24082E7F4770C3C diff --git a/benchmarks/liveview/results/ukc-final/baseline/bench.log b/benchmarks/liveview/results/ukc-final/baseline/bench.log new file mode 100644 index 00000000..8b0ade6e --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/baseline/bench.log @@ -0,0 +1,36 @@ +time=2026-03-10T19:55:37.404-04:00 level=INFO msg="connecting to CDP" base=https://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T19:55:37.524-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:55:37.546-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:55:37.558-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:55:37.569-04:00 level=INFO msg="attached to page session" sessionId=6D5A833C0EA1C1FCCCAC8BFF2F99A7CF +time=2026-03-10T19:55:37.569-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T19:55:37.569-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T19:55:37.620-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T19:55:40.576-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T19:55:44.116-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T19:55:49.292-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T19:56:05.359-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T19:56:28.313-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:56:28.329-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:56:28.331-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:56:28.333-04:00 level=INFO msg="attached to page session" sessionId=2585686104656CBE3CB2A61589C36FF9 +time=2026-03-10T19:56:28.333-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=baseline +time=2026-03-10T19:56:28.339-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T19:56:31.207-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T19:56:34.474-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T19:56:39.907-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T19:56:55.140-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T19:57:12.761-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T19:57:17.174-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T19:57:17.176-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:17.177-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:17.178-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 rewritten=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:17.193-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:17.194-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:17.194-04:00 level=INFO msg="connected to browser WS" url=wss://misty-mountain-03xhzqi6.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/e7e657c5-9708-487a-b5e9-df7f8a99bc61 +time=2026-03-10T19:57:17.196-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:57:17.197-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:57:17.197-04:00 level=INFO msg="found page target" id=30ACB6802833BDC9AEC31F75F1E01386 +time=2026-03-10T19:57:17.198-04:00 level=INFO msg="attached to page session" sessionId=833990F6808E85DE21AEFACC5D0CBB9C +time=2026-03-10T19:57:17.200-04:00 level=INFO msg="attached to page session" sessionId=AC7D849E746F34F1510C26196E8F9715 +time=2026-03-10T19:57:17.200-04:00 level=INFO msg="attached to page session" sessionId=E242DCA034BB6C97E8511AA403193259 diff --git a/benchmarks/liveview/results/ukc-final/baseline/results.json b/benchmarks/liveview/results/ukc-final/baseline/results.json new file mode 100644 index 00000000..5afe3267 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/baseline/results.json @@ -0,0 +1,445 @@ +{ + "label": "baseline", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 91.236, + "median_ms": 91.236, + "mean_ms": 91.236, + "p95_ms": 91.236, + "max_ms": 91.236 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 41.9, + "median_ms": 78.522, + "mean_ms": 226.655, + "p95_ms": 602.026, + "max_ms": 602.026 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 54.365, + "median_ms": 112.366, + "mean_ms": 385.935, + "p95_ms": 1845.523, + "max_ms": 1845.523 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 42.899, + "median_ms": 695.847, + "mean_ms": 715.223, + "p95_ms": 2066.875, + "max_ms": 2066.875 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 26.492, + "median_ms": 40.565, + "mean_ms": 65.636, + "p95_ms": 203.601, + "max_ms": 203.601 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 1.652, + "median_ms": 1.792, + "mean_ms": 2.188, + "p95_ms": 4.279, + "max_ms": 4.279 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 1.513, + "median_ms": 1.631, + "mean_ms": 10.971, + "p95_ms": 57.835, + "max_ms": 57.835 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 1.638, + "median_ms": 1.959, + "mean_ms": 2.359, + "p95_ms": 3.81, + "max_ms": 3.81 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 5.768, + "median_ms": 6.8, + "mean_ms": 8.225, + "p95_ms": 15.339, + "max_ms": 15.339 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 1.615, + "median_ms": 2.41, + "mean_ms": 2.298, + "p95_ms": 3.262, + "max_ms": 3.262 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 1.762, + "median_ms": 2.035, + "mean_ms": 3.811, + "p95_ms": 10.268, + "max_ms": 10.268 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 1.796, + "median_ms": 2.765, + "mean_ms": 4.768, + "p95_ms": 13.691, + "max_ms": 13.691 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 1.535, + "median_ms": 1.707, + "mean_ms": 1.915, + "p95_ms": 2.814, + "max_ms": 2.814 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 1.575, + "median_ms": 5.716, + "mean_ms": 4.135, + "p95_ms": 7.65, + "max_ms": 7.65 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 1.491, + "median_ms": 42.667, + "mean_ms": 35.412, + "p95_ms": 76.979, + "max_ms": 76.979 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 1.687, + "median_ms": 2.054, + "mean_ms": 5.266, + "p95_ms": 21.915, + "max_ms": 21.915 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 1.5, + "median_ms": 32.219, + "mean_ms": 21.255, + "p95_ms": 51.586, + "max_ms": 51.586 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 2.207, + "median_ms": 4.619, + "mean_ms": 4.838, + "p95_ms": 12.7, + "max_ms": 12.7 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 3.91, + "median_ms": 6.033, + "mean_ms": 27.593, + "p95_ms": 136.028, + "max_ms": 136.028 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 60.756, + "median_ms": 70.195, + "mean_ms": 270.677, + "p95_ms": 1093.008, + "max_ms": 1093.008 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 67.691, + "median_ms": 87.061, + "mean_ms": 371.547, + "p95_ms": 1700.201, + "max_ms": 1700.201 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 1.468, + "median_ms": 1.853, + "mean_ms": 4.198, + "p95_ms": 15.813, + "max_ms": 15.813 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 7.59, + "median_ms": 70.746, + "mean_ms": 137.814, + "p95_ms": 342.885, + "max_ms": 342.885 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 39.654, + "median_ms": 164.389, + "mean_ms": 715.715, + "p95_ms": 2990.687, + "max_ms": 2990.687 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 3.447, + "median_ms": 4.423, + "mean_ms": 7.59, + "p95_ms": 24.742, + "max_ms": 24.742 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 2.475, + "median_ms": 9.408, + "mean_ms": 47.964, + "p95_ms": 181.937, + "max_ms": 181.937 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 29.247, + "median_ms": 576.983, + "mean_ms": 771.221, + "p95_ms": 2050.339, + "max_ms": 2050.339 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 1.515, + "median_ms": 2.857, + "mean_ms": 5.392, + "p95_ms": 21.071, + "max_ms": 21.071 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 4.075, + "median_ms": 144.719, + "mean_ms": 121.048, + "p95_ms": 290.821, + "max_ms": 290.821 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 1.235, + "median_ms": 1.576, + "mean_ms": 1.744, + "p95_ms": 2.76, + "max_ms": 2.76 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 1.227, + "median_ms": 1.677, + "mean_ms": 2.696, + "p95_ms": 7.026, + "max_ms": 7.026 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 37.536, + "median_ms": 80.698, + "mean_ms": 75.663, + "p95_ms": 123.396, + "max_ms": 123.396 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 133.558, + "median_ms": 344.36, + "mean_ms": 341.74, + "p95_ms": 726.285, + "max_ms": 726.285 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 2.678, + "median_ms": 4.642, + "mean_ms": 13.463, + "p95_ms": 62.663, + "max_ms": 62.663 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 11.637, + "median_ms": 16.842, + "mean_ms": 22.269, + "p95_ms": 44.116, + "max_ms": 44.116 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 54.194, + "median_ms": 109.303, + "mean_ms": 103.526, + "p95_ms": 194.97, + "max_ms": 194.97 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 621.343, + "median_ms": 912.33, + "mean_ms": 851.746, + "p95_ms": 950.659, + "max_ms": 950.659 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 502.627, + "median_ms": 521.556, + "mean_ms": 519.913, + "p95_ms": 553.863, + "max_ms": 553.863 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 169.379, + "median_ms": 218.079, + "mean_ms": 252.292, + "p95_ms": 369.417, + "max_ms": 369.417 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 3297.602, + "median_ms": 3297.602, + "mean_ms": 3297.602, + "p95_ms": 3297.602, + "max_ms": 3297.602 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 3019.343, + "median_ms": 3019.343, + "mean_ms": 3019.343, + "p95_ms": 3019.343, + "max_ms": 3019.343 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 315, + "min_ms": 1.362, + "median_ms": 2.116, + "mean_ms": 4.478, + "p95_ms": 9.963, + "max_ms": 106.675 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 315, + "min_ms": 1.488, + "median_ms": 18.483, + "mean_ms": 29.51, + "p95_ms": 84.238, + "max_ms": 176.696 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 315, + "min_ms": 82.955, + "median_ms": 152.053, + "mean_ms": 157.222, + "p95_ms": 262.777, + "max_ms": 305.044 + } + ] +} diff --git a/benchmarks/liveview/results/ukc-final/baseline/results.md b/benchmarks/liveview/results/ukc-final/baseline/results.md new file mode 100644 index 00000000..05747124 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/baseline/results.md @@ -0,0 +1,61 @@ + +## baseline + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 90.9ms | 90.9ms | 90.9ms | 90.9ms | 90.9ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 35.6ms | 98.9ms | 252.5ms | 830.1ms | 830.1ms | 6 | +| Screenshot.PNG | 54.5ms | 101.6ms | 305.2ms | 1.23s | 1.23s | 6 | +| Screenshot.FullPage | 78.9ms | 789.6ms | 824.7ms | 2.60s | 2.60s | 6 | +| Screenshot.ClipRegion | 30.3ms | 39.5ms | 207.3ms | 881.7ms | 881.7ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 1.7ms | 2.2ms | 12.1ms | 58.1ms | 58.1ms | 6 | +| Eval.QuerySelectorAll | 1.6ms | 1.7ms | 9.9ms | 51.3ms | 51.3ms | 6 | +| Eval.InnerText | 1.6ms | 2.4ms | 2.9ms | 7.0ms | 7.0ms | 6 | +| Eval.GetComputedStyle | 6.3ms | 7.8ms | 8.7ms | 16.2ms | 16.2ms | 6 | +| Eval.ScrollToBottom | 1.6ms | 1.8ms | 1.8ms | 2.6ms | 2.6ms | 6 | +| Eval.DOMManipulation | 1.8ms | 2.0ms | 1.9ms | 2.1ms | 2.1ms | 6 | +| Eval.BoundingRects | 1.8ms | 2.0ms | 2.3ms | 4.0ms | 4.0ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 1.6ms | 1.6ms | 2.7ms | 8.1ms | 8.1ms | 6 | +| DOM.GetDocument.Deep | 1.6ms | 5.4ms | 9.8ms | 42.7ms | 42.7ms | 6 | +| DOM.GetDocument.Full | 1.5ms | 49.9ms | 43.0ms | 91.6ms | 91.6ms | 6 | +| DOM.QuerySelector | 1.6ms | 1.9ms | 4.4ms | 17.3ms | 17.3ms | 6 | +| DOM.GetOuterHTML | 1.4ms | 31.3ms | 20.4ms | 46.5ms | 46.5ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 2.1ms | 3.3ms | 6.9ms | 27.7ms | 27.7ms | 6 | +| Input.Click | 3.7ms | 6.0ms | 16.3ms | 69.7ms | 69.7ms | 6 | +| Input.TypeText | 63.6ms | 78.5ms | 481.5ms | 2.35s | 2.35s | 6 | +| Input.Scroll | 62.8ms | 80.1ms | 196.5ms | 748.3ms | 748.3ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 1.4ms | 1.7ms | 2.1ms | 4.5ms | 4.5ms | 6 | +| Network.GetResponseBody | 8.0ms | 77.1ms | 110.0ms | 298.6ms | 298.6ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 51.8ms | 175.8ms | 683.2ms | 2.42s | 2.42s | 6 | +| Page.GetNavigationHistory | 1.7ms | 11.2ms | 8.1ms | 14.0ms | 14.0ms | 6 | +| Page.GetLayoutMetrics | 2.2ms | 8.8ms | 83.4ms | 433.7ms | 433.7ms | 6 | +| Page.PrintToPDF | 34.3ms | 358.0ms | 785.4ms | 2.48s | 2.48s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 1.5ms | 2.6ms | 26.3ms | 147.3ms | 147.3ms | 6 | +| Emulation.SetMobile | 5.4ms | 137.8ms | 134.0ms | 291.2ms | 291.2ms | 6 | +| Emulation.SetGeolocation | 1.3ms | 2.4ms | 2.7ms | 5.6ms | 5.6ms | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 1.3ms | 2.4ms | 2.1ms | 3.5ms | 3.5ms | 6 | +| Target.CreateAndClose | 42.8ms | 91.7ms | 84.0ms | 119.6ms | 119.6ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 210.5ms | 357.4ms | 409.2ms | 953.2ms | 953.2ms | 6 | +| Composite.ScrapeLinks | 2.8ms | 8.2ms | 8.2ms | 17.7ms | 17.7ms | 6 | +| Composite.FillForm | 14.0ms | 25.5ms | 28.9ms | 65.9ms | 65.9ms | 6 | +| Composite.ClickAndWait | 55.1ms | 102.0ms | 88.0ms | 128.5ms | 128.5ms | 6 | +| Composite.RapidScreenshots | 752.7ms | 844.1ms | 843.9ms | 968.7ms | 968.7ms | 6 | +| Composite.ScrollAndCapture | 499.4ms | 519.5ms | 521.3ms | 576.0ms | 576.0ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 159.3ms | 292.3ms | 293.9ms | 430.1ms | 430.1ms | 3 | +| Navigate[spa] | 4.13s | 4.13s | 4.13s | 4.13s | 4.13s | 1 | +| Navigate[media] | 2.13s | 2.13s | 2.13s | 2.13s | 2.13s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 1.5ms | 3.4ms | 5.4ms | 10.8ms | 111.5ms | 304 | +| Concurrent.Evaluate | 1.6ms | 20.2ms | 31.0ms | 83.2ms | 132.6ms | 304 | +| Concurrent.Screenshot | 76.5ms | 158.9ms | 161.0ms | 263.8ms | 347.8ms | 304 | diff --git a/benchmarks/liveview/results/ukc-final/headful/bench-json.log b/benchmarks/liveview/results/ukc-final/headful/bench-json.log new file mode 100644 index 00000000..a990cc91 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/headful/bench-json.log @@ -0,0 +1,36 @@ +time=2026-03-10T20:14:57.118-04:00 level=INFO msg="connecting to CDP" base=https://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T20:14:57.159-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:57.171-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:57.172-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:14:57.180-04:00 level=INFO msg="attached to page session" sessionId=FCB19B278EEC04A079F58E15B1733AC6 +time=2026-03-10T20:14:57.180-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T20:14:57.180-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T20:14:57.186-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:15:00.650-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:15:04.409-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:15:09.089-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:15:19.687-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:15:27.892-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:15:27.913-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:15:27.915-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:15:27.916-04:00 level=INFO msg="attached to page session" sessionId=F0ADBC5A061627F69FC46D20AB99143E +time=2026-03-10T20:15:27.916-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=headful +time=2026-03-10T20:15:27.922-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:15:31.247-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:15:35.047-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:15:39.968-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:15:48.729-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:15:57.727-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T20:16:02.752-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T20:16:02.754-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:16:02.756-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:16:02.757-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:16:02.772-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:16:02.773-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:16:02.773-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:16:02.775-04:00 level=INFO msg="attached to page session" sessionId=3BF8664EBAF43CFA7F47713436E465E6 +time=2026-03-10T20:16:02.775-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:16:02.775-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:16:02.776-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:16:02.777-04:00 level=INFO msg="attached to page session" sessionId=0DAB827851EBF1D12DFE7EACD063C87C +time=2026-03-10T20:16:02.778-04:00 level=INFO msg="attached to page session" sessionId=96FBE3E4F9EB4C80B7ABD96BD4DB41FB diff --git a/benchmarks/liveview/results/ukc-final/headful/bench.log b/benchmarks/liveview/results/ukc-final/headful/bench.log new file mode 100644 index 00000000..87621036 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/headful/bench.log @@ -0,0 +1,36 @@ +time=2026-03-10T20:13:30.249-04:00 level=INFO msg="connecting to CDP" base=https://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222 sessionMode=true +time=2026-03-10T20:13:30.287-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:13:30.301-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:13:30.303-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:13:30.304-04:00 level=INFO msg="attached to page session" sessionId=10A2FB4ABEF0E788542F247F3302C51D +time=2026-03-10T20:13:30.304-04:00 level=INFO msg=connected sites=5 iterations=2 +time=2026-03-10T20:13:30.304-04:00 level=INFO msg=warmup iterations=1 +time=2026-03-10T20:13:30.310-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:13:34.012-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:13:38.010-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:13:42.530-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:13:52.730-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:14:03.297-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:03.318-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:03.320-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:14:03.322-04:00 level=INFO msg="attached to page session" sessionId=B60063A4BDD8849264F15A4DF31BF929 +time=2026-03-10T20:14:03.322-04:00 level=INFO msg="starting sequential benchmark" iterations=2 label=headful +time=2026-03-10T20:14:03.328-04:00 level=INFO msg="navigating to test site" url=https://example.com category=static +time=2026-03-10T20:14:06.816-04:00 level=INFO msg="navigating to test site" url=https://news.ycombinator.com category=content +time=2026-03-10T20:14:11.010-04:00 level=INFO msg="navigating to test site" url=https://en.wikipedia.org/wiki/Web_browser category=content +time=2026-03-10T20:14:15.943-04:00 level=INFO msg="navigating to test site" url=https://github.com/nicknisi/dotfiles category=spa +time=2026-03-10T20:14:23.693-04:00 level=INFO msg="navigating to test site" url=https://www.bbc.com/news category=media +time=2026-03-10T20:14:32.249-04:00 level=INFO msg=iteration i=2 of=2 url=https://news.ycombinator.com +time=2026-03-10T20:14:37.064-04:00 level=INFO msg="starting concurrent benchmark" workers=3 duration=20s +time=2026-03-10T20:14:37.068-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:37.070-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:37.071-04:00 level=INFO msg="rewrote WS URL for remote access" original=ws://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 rewritten=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:37.146-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:37.147-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:37.147-04:00 level=INFO msg="connected to browser WS" url=wss://icy-dawn-37nqidmr.dev-iad-unikraft-3.onkernel.app:9222/devtools/browser/b45aa8f6-42f2-4891-9121-ef45d1200c74 +time=2026-03-10T20:14:37.148-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:14:37.149-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:14:37.149-04:00 level=INFO msg="found page target" id=D71EB211E322A42ABBD17315B0C44B46 +time=2026-03-10T20:14:37.150-04:00 level=INFO msg="attached to page session" sessionId=67775F75CA3A90CCCE020B09B15AA979 +time=2026-03-10T20:14:37.150-04:00 level=INFO msg="attached to page session" sessionId=6E1C054046413CCC7B5227414FF43C78 +time=2026-03-10T20:14:37.151-04:00 level=INFO msg="attached to page session" sessionId=B60BC6EB7AFD20F6F9AA11D96FEC2437 diff --git a/benchmarks/liveview/results/ukc-final/headful/results.json b/benchmarks/liveview/results/ukc-final/headful/results.json new file mode 100644 index 00000000..c0a222a0 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/headful/results.json @@ -0,0 +1,445 @@ +{ + "label": "headful", + "results": [ + { + "category": "Navigation", + "operation": "Navigate[static]", + "n": 1, + "min_ms": 54.058, + "median_ms": 54.058, + "mean_ms": 54.058, + "p95_ms": 54.058, + "max_ms": 54.058 + }, + { + "category": "Screenshot", + "operation": "Screenshot.JPEG.q80", + "n": 6, + "min_ms": 48.013, + "median_ms": 134.907, + "mean_ms": 138.691, + "p95_ms": 261.182, + "max_ms": 261.182 + }, + { + "category": "Screenshot", + "operation": "Screenshot.PNG", + "n": 6, + "min_ms": 82.978, + "median_ms": 146.576, + "mean_ms": 224.406, + "p95_ms": 684.647, + "max_ms": 684.647 + }, + { + "category": "Screenshot", + "operation": "Screenshot.FullPage", + "n": 6, + "min_ms": 112.009, + "median_ms": 548.865, + "mean_ms": 420.982, + "p95_ms": 818.055, + "max_ms": 818.055 + }, + { + "category": "Screenshot", + "operation": "Screenshot.ClipRegion", + "n": 6, + "min_ms": 58.334, + "median_ms": 77.044, + "mean_ms": 92.403, + "p95_ms": 185.673, + "max_ms": 185.673 + }, + { + "category": "JS Evaluation", + "operation": "Eval.Trivial", + "n": 6, + "min_ms": 1.623, + "median_ms": 1.749, + "mean_ms": 15.152, + "p95_ms": 81.405, + "max_ms": 81.405 + }, + { + "category": "JS Evaluation", + "operation": "Eval.QuerySelectorAll", + "n": 6, + "min_ms": 1.528, + "median_ms": 1.597, + "mean_ms": 12.555, + "p95_ms": 67.463, + "max_ms": 67.463 + }, + { + "category": "JS Evaluation", + "operation": "Eval.InnerText", + "n": 6, + "min_ms": 1.634, + "median_ms": 2.162, + "mean_ms": 2.25, + "p95_ms": 3.443, + "max_ms": 3.443 + }, + { + "category": "JS Evaluation", + "operation": "Eval.GetComputedStyle", + "n": 6, + "min_ms": 6.125, + "median_ms": 6.482, + "mean_ms": 8.441, + "p95_ms": 13.939, + "max_ms": 13.939 + }, + { + "category": "JS Evaluation", + "operation": "Eval.ScrollToBottom", + "n": 6, + "min_ms": 1.481, + "median_ms": 1.64, + "mean_ms": 2.883, + "p95_ms": 7.314, + "max_ms": 7.314 + }, + { + "category": "JS Evaluation", + "operation": "Eval.DOMManipulation", + "n": 6, + "min_ms": 1.637, + "median_ms": 2.034, + "mean_ms": 3.317, + "p95_ms": 8.985, + "max_ms": 8.985 + }, + { + "category": "JS Evaluation", + "operation": "Eval.BoundingRects", + "n": 6, + "min_ms": 1.718, + "median_ms": 2.038, + "mean_ms": 6.463, + "p95_ms": 27.735, + "max_ms": 27.735 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Shallow", + "n": 6, + "min_ms": 1.417, + "median_ms": 1.593, + "mean_ms": 2.013, + "p95_ms": 3.905, + "max_ms": 3.905 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Deep", + "n": 6, + "min_ms": 1.463, + "median_ms": 4.871, + "mean_ms": 5.852, + "p95_ms": 19.685, + "max_ms": 19.685 + }, + { + "category": "DOM", + "operation": "DOM.GetDocument.Full", + "n": 6, + "min_ms": 1.554, + "median_ms": 40.384, + "mean_ms": 31.481, + "p95_ms": 69.176, + "max_ms": 69.176 + }, + { + "category": "DOM", + "operation": "DOM.QuerySelector", + "n": 6, + "min_ms": 1.406, + "median_ms": 1.753, + "mean_ms": 1.707, + "p95_ms": 1.952, + "max_ms": 1.952 + }, + { + "category": "DOM", + "operation": "DOM.GetOuterHTML", + "n": 6, + "min_ms": 1.404, + "median_ms": 33.695, + "mean_ms": 19.26, + "p95_ms": 37.19, + "max_ms": 37.19 + }, + { + "category": "Input", + "operation": "Input.MouseMove", + "n": 6, + "min_ms": 2.719, + "median_ms": 34.306, + "mean_ms": 24.165, + "p95_ms": 41.288, + "max_ms": 41.288 + }, + { + "category": "Input", + "operation": "Input.Click", + "n": 6, + "min_ms": 3.837, + "median_ms": 5.444, + "mean_ms": 7.952, + "p95_ms": 21.921, + "max_ms": 21.921 + }, + { + "category": "Input", + "operation": "Input.TypeText", + "n": 6, + "min_ms": 58.419, + "median_ms": 61.595, + "mean_ms": 265.103, + "p95_ms": 1195.825, + "max_ms": 1195.825 + }, + { + "category": "Input", + "operation": "Input.Scroll", + "n": 6, + "min_ms": 174.033, + "median_ms": 195.482, + "mean_ms": 271.174, + "p95_ms": 589.728, + "max_ms": 589.728 + }, + { + "category": "Network", + "operation": "Network.GetCookies", + "n": 6, + "min_ms": 1.43, + "median_ms": 1.724, + "mean_ms": 2.937, + "p95_ms": 9.55, + "max_ms": 9.55 + }, + { + "category": "Network", + "operation": "Network.GetResponseBody", + "n": 6, + "min_ms": 5.307, + "median_ms": 32.679, + "mean_ms": 56.587, + "p95_ms": 204.415, + "max_ms": 204.415 + }, + { + "category": "Page", + "operation": "Page.Reload", + "n": 6, + "min_ms": 38.503, + "median_ms": 105.676, + "mean_ms": 246.619, + "p95_ms": 737.662, + "max_ms": 737.662 + }, + { + "category": "Page", + "operation": "Page.GetNavigationHistory", + "n": 6, + "min_ms": 1.651, + "median_ms": 1.814, + "mean_ms": 1.949, + "p95_ms": 2.694, + "max_ms": 2.694 + }, + { + "category": "Page", + "operation": "Page.GetLayoutMetrics", + "n": 6, + "min_ms": 1.42, + "median_ms": 9.414, + "mean_ms": 8.207, + "p95_ms": 16.384, + "max_ms": 16.384 + }, + { + "category": "Page", + "operation": "Page.PrintToPDF", + "n": 6, + "min_ms": 72.288, + "median_ms": 332.117, + "mean_ms": 455.09, + "p95_ms": 1549.396, + "max_ms": 1549.396 + }, + { + "category": "Emulation", + "operation": "Emulation.SetViewport", + "n": 6, + "min_ms": 1.509, + "median_ms": 2.005, + "mean_ms": 2.202, + "p95_ms": 3.009, + "max_ms": 3.009 + }, + { + "category": "Emulation", + "operation": "Emulation.SetMobile", + "n": 6, + "min_ms": 4.798, + "median_ms": 78.934, + "mean_ms": 93.611, + "p95_ms": 296.795, + "max_ms": 296.795 + }, + { + "category": "Emulation", + "operation": "Emulation.SetGeolocation", + "n": 6, + "min_ms": 1.278, + "median_ms": 1.554, + "mean_ms": 2.538, + "p95_ms": 7.98, + "max_ms": 7.98 + }, + { + "category": "Target", + "operation": "Target.GetTargets", + "n": 6, + "min_ms": 1.297, + "median_ms": 1.412, + "mean_ms": 1.385, + "p95_ms": 1.499, + "max_ms": 1.499 + }, + { + "category": "Target", + "operation": "Target.CreateAndClose", + "n": 6, + "min_ms": 21.593, + "median_ms": 35.398, + "mean_ms": 182.31, + "p95_ms": 942.273, + "max_ms": 942.273 + }, + { + "category": "Composite", + "operation": "Composite.NavAndScreenshot", + "n": 6, + "min_ms": 190.869, + "median_ms": 289.392, + "mean_ms": 271.608, + "p95_ms": 329.042, + "max_ms": 329.042 + }, + { + "category": "Composite", + "operation": "Composite.ScrapeLinks", + "n": 6, + "min_ms": 2.205, + "median_ms": 2.944, + "mean_ms": 3.573, + "p95_ms": 7.37, + "max_ms": 7.37 + }, + { + "category": "Composite", + "operation": "Composite.FillForm", + "n": 6, + "min_ms": 11.14, + "median_ms": 13.839, + "mean_ms": 13.643, + "p95_ms": 18.575, + "max_ms": 18.575 + }, + { + "category": "Composite", + "operation": "Composite.ClickAndWait", + "n": 6, + "min_ms": 23.496, + "median_ms": 37.395, + "mean_ms": 34.549, + "p95_ms": 44.597, + "max_ms": 44.597 + }, + { + "category": "Composite", + "operation": "Composite.RapidScreenshots", + "n": 6, + "min_ms": 1040.536, + "median_ms": 1070.79, + "mean_ms": 1088.127, + "p95_ms": 1183.215, + "max_ms": 1183.215 + }, + { + "category": "Composite", + "operation": "Composite.ScrollAndCapture", + "n": 6, + "min_ms": 598.873, + "median_ms": 642.67, + "mean_ms": 635.214, + "p95_ms": 681.236, + "max_ms": 681.236 + }, + { + "category": "Navigation", + "operation": "Navigate[content]", + "n": 3, + "min_ms": 119.185, + "median_ms": 130.479, + "mean_ms": 160.657, + "p95_ms": 232.306, + "max_ms": 232.306 + }, + { + "category": "Navigation", + "operation": "Navigate[spa]", + "n": 1, + "min_ms": 1507.232, + "median_ms": 1507.232, + "mean_ms": 1507.232, + "p95_ms": 1507.232, + "max_ms": 1507.232 + }, + { + "category": "Navigation", + "operation": "Navigate[media]", + "n": 1, + "min_ms": 797.864, + "median_ms": 797.864, + "mean_ms": 797.864, + "p95_ms": 797.864, + "max_ms": 797.864 + }, + { + "category": "Concurrent", + "operation": "Concurrent.DOM", + "n": 349, + "min_ms": 1.327, + "median_ms": 1.781, + "mean_ms": 2.502, + "p95_ms": 5.602, + "max_ms": 32.619 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Evaluate", + "n": 349, + "min_ms": 1.389, + "median_ms": 10.008, + "mean_ms": 14.214, + "p95_ms": 33.006, + "max_ms": 134.569 + }, + { + "category": "Concurrent", + "operation": "Concurrent.Screenshot", + "n": 349, + "min_ms": 119.995, + "median_ms": 151.386, + "mean_ms": 155.488, + "p95_ms": 199.006, + "max_ms": 266.609 + } + ] +} diff --git a/benchmarks/liveview/results/ukc-final/headful/results.md b/benchmarks/liveview/results/ukc-final/headful/results.md new file mode 100644 index 00000000..f286aa92 --- /dev/null +++ b/benchmarks/liveview/results/ukc-final/headful/results.md @@ -0,0 +1,61 @@ + +## headful + +| Operation | Min | Median | Mean | P95 | Max | N | +|----------------------------------|-----------|-----------|-----------|-----------|-----------|-------| +| **Navigation ** | | | | | | | +| Navigate[static] | 79.9ms | 79.9ms | 79.9ms | 79.9ms | 79.9ms | 1 | +| **Screenshot ** | | | | | | | +| Screenshot.JPEG.q80 | 62.1ms | 150.5ms | 161.4ms | 363.6ms | 363.6ms | 6 | +| Screenshot.PNG | 81.5ms | 165.7ms | 172.8ms | 308.5ms | 308.5ms | 6 | +| Screenshot.FullPage | 97.1ms | 577.3ms | 412.4ms | 816.3ms | 816.3ms | 6 | +| Screenshot.ClipRegion | 70.5ms | 106.1ms | 163.1ms | 497.8ms | 497.8ms | 6 | +| **JS Evaluation ** | | | | | | | +| Eval.Trivial | 1.8ms | 1.9ms | 2.7ms | 6.3ms | 6.3ms | 6 | +| Eval.QuerySelectorAll | 1.4ms | 1.7ms | 2.2ms | 5.3ms | 5.3ms | 6 | +| Eval.InnerText | 1.6ms | 2.4ms | 10.1ms | 49.6ms | 49.6ms | 6 | +| Eval.GetComputedStyle | 6.2ms | 6.9ms | 8.9ms | 14.6ms | 14.6ms | 6 | +| Eval.ScrollToBottom | 1.5ms | 1.7ms | 2.3ms | 5.8ms | 5.8ms | 6 | +| Eval.DOMManipulation | 1.8ms | 1.9ms | 2.0ms | 2.3ms | 2.3ms | 6 | +| Eval.BoundingRects | 1.7ms | 2.0ms | 2.5ms | 5.2ms | 5.2ms | 6 | +| **DOM ** | | | | | | | +| DOM.GetDocument.Shallow | 1.5ms | 1.7ms | 3.0ms | 10.0ms | 10.0ms | 6 | +| DOM.GetDocument.Deep | 1.6ms | 5.1ms | 6.9ms | 25.7ms | 25.7ms | 6 | +| DOM.GetDocument.Full | 1.6ms | 47.3ms | 46.6ms | 124.4ms | 124.4ms | 6 | +| DOM.QuerySelector | 1.5ms | 1.8ms | 3.1ms | 10.2ms | 10.2ms | 6 | +| DOM.GetOuterHTML | 1.5ms | 31.4ms | 19.8ms | 41.3ms | 41.3ms | 6 | +| **Input ** | | | | | | | +| Input.MouseMove | 3.2ms | 29.4ms | 20.2ms | 43.3ms | 43.3ms | 6 | +| Input.Click | 4.2ms | 5.3ms | 8.1ms | 22.7ms | 22.7ms | 6 | +| Input.TypeText | 56.6ms | 65.3ms | 104.4ms | 205.0ms | 205.0ms | 6 | +| Input.Scroll | 171.2ms | 179.0ms | 299.0ms | 770.3ms | 770.3ms | 6 | +| **Network ** | | | | | | | +| Network.GetCookies | 1.4ms | 2.0ms | 2.2ms | 4.6ms | 4.6ms | 6 | +| Network.GetResponseBody | 6.0ms | 68.8ms | 68.5ms | 218.6ms | 218.6ms | 6 | +| **Page ** | | | | | | | +| Page.Reload | 60.8ms | 104.8ms | 244.0ms | 655.2ms | 655.2ms | 6 | +| Page.GetNavigationHistory | 1.5ms | 1.7ms | 2.3ms | 5.2ms | 5.2ms | 6 | +| Page.GetLayoutMetrics | 1.8ms | 8.7ms | 16.1ms | 54.5ms | 54.5ms | 6 | +| Page.PrintToPDF | 73.1ms | 287.0ms | 442.5ms | 1.26s | 1.26s | 6 | +| **Emulation ** | | | | | | | +| Emulation.SetViewport | 1.7ms | 1.9ms | 2.1ms | 3.1ms | 3.1ms | 6 | +| Emulation.SetMobile | 16.4ms | 57.2ms | 102.4ms | 413.9ms | 413.9ms | 6 | +| Emulation.SetGeolocation | 1.4ms | 1.4ms | 1.6ms | 2.3ms | 2.3ms | 6 | +| **Target ** | | | | | | | +| Target.GetTargets | 1.3ms | 1.5ms | 1.6ms | 2.2ms | 2.2ms | 6 | +| Target.CreateAndClose | 20.5ms | 35.3ms | 31.6ms | 40.3ms | 40.3ms | 6 | +| **Composite ** | | | | | | | +| Composite.NavAndScreenshot | 222.0ms | 277.6ms | 304.2ms | 535.2ms | 535.2ms | 6 | +| Composite.ScrapeLinks | 2.3ms | 3.1ms | 5.2ms | 11.1ms | 11.1ms | 6 | +| Composite.FillForm | 11.6ms | 12.7ms | 13.2ms | 15.8ms | 15.8ms | 6 | +| Composite.ClickAndWait | 26.9ms | 43.8ms | 47.5ms | 79.9ms | 79.9ms | 6 | +| Composite.RapidScreenshots | 971.0ms | 1.14s | 1.10s | 1.24s | 1.24s | 6 | +| Composite.ScrollAndCapture | 599.8ms | 606.5ms | 617.7ms | 655.0ms | 655.0ms | 6 | +| **Navigation ** | | | | | | | +| Navigate[content] | 156.9ms | 225.6ms | 206.8ms | 238.0ms | 238.0ms | 3 | +| Navigate[spa] | 1.12s | 1.12s | 1.12s | 1.12s | 1.12s | 1 | +| Navigate[media] | 1.08s | 1.08s | 1.08s | 1.08s | 1.08s | 1 | +| **Concurrent ** | | | | | | | +| Concurrent.DOM | 1.3ms | 1.9ms | 3.9ms | 7.2ms | 52.5ms | 337 | +| Concurrent.Evaluate | 1.3ms | 10.6ms | 15.5ms | 33.1ms | 133.3ms | 337 | +| Concurrent.Screenshot | 81.3ms | 153.6ms | 158.1ms | 223.5ms | 266.3ms | 337 | diff --git a/benchmarks/liveview/run-unikraft.sh b/benchmarks/liveview/run-unikraft.sh new file mode 100755 index 00000000..60551092 --- /dev/null +++ b/benchmarks/liveview/run-unikraft.sh @@ -0,0 +1,263 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +REPO_ROOT="$SCRIPT_DIR/../.." +RESULTS_DIR="$SCRIPT_DIR/results/ukc-$(date +%Y%m%d-%H%M%S)" +mkdir -p "$RESULTS_DIR" + +ITERATIONS="${ITERATIONS:-2}" +WARMUP="${WARMUP:-1}" +UKC_METRO="${UKC_METRO:-dal}" +CONCURRENT_WORKERS="${CONCURRENT_WORKERS:-3}" +CONCURRENT_DURATION="${CONCURRENT_DURATION:-20s}" +SKIP_CONCURRENT="${SKIP_CONCURRENT:-false}" + +export KRAFTKIT_NO_CHECK_UPDATES=true +export UKC_METRO +if [[ -z "${UKC_TOKEN:-}" ]]; then + export UKC_TOKEN=$(python3 -c "import yaml; print(yaml.safe_load(open('$HOME/.config/kraftcloud/config.yaml'))['users']['onkernel']['token'])") +fi + +log() { echo "[ukc-bench] $(date +%H:%M:%S) $*"; } + +# Variants: label:git-ref:image-type:vcpus:memory-mb +# image-type: headless or headful +VARIANTS="${VARIANTS:-baseline:main:headless:4:1024 approach1:feat/headless-live-view:headless:4:1024 approach2:headless-cdp-live-view:headless:4:1024 headful:main:headful:8:4096}" + +build_bench() { + log "Building benchmark binary..." + cd "$REPO_ROOT/server" + go build -o "$SCRIPT_DIR/bench" "$SCRIPT_DIR/main.go" + cd "$SCRIPT_DIR" + log "Benchmark binary built." +} + +build_and_push_image() { + local label="$1" ref="$2" image_type="$3" + local ukc_image="onkernel/bench-${label}:latest" + + log "Building and pushing '$ukc_image' from ref '$ref'..." + cd "$REPO_ROOT" + + local current_ref + current_ref=$(git rev-parse --abbrev-ref HEAD 2>/dev/null || git rev-parse HEAD) + local stashed=false + if ! git diff --quiet 2>/dev/null || ! git diff --cached --quiet 2>/dev/null; then + git stash push -m "ukc-bench-$label" >/dev/null 2>&1 + stashed=true + fi + git checkout "$ref" --quiet 2>/dev/null || git checkout "origin/$ref" --quiet + + if [[ "$image_type" == "headful" ]]; then + local dockerfile="images/chromium-headful/Dockerfile" + local kraftfile_dir="images/chromium-headful" + else + local dockerfile="images/chromium-headless/image/Dockerfile" + local kraftfile_dir="images/chromium-headless/image" + fi + + docker build --platform linux/amd64 -f "$dockerfile" -t "ukc-bench-${label}:latest" . 2>&1 | tail -5 + + # Extract rootfs and build erofs + local app_name="ukc-bench-${label}" + docker rm -f "cnt-$app_name" 2>/dev/null || true + docker create --platform linux/amd64 --name "cnt-$app_name" "ukc-bench-${label}:latest" /bin/sh + rm -rf "$kraftfile_dir/.rootfs" || true + docker cp "cnt-$app_name":/ "$kraftfile_dir/.rootfs" + docker rm -f "cnt-$app_name" 2>/dev/null || true + rm -f "$kraftfile_dir/initrd" || true + log "Building erofs image (this may take a minute)..." + mkfs.erofs --all-root -E noinline_data -b 4096 "$kraftfile_dir/initrd" "$kraftfile_dir/.rootfs" 2>/dev/null + + kraft pkg \ + --name "index.unikraft.io/$ukc_image" \ + --plat kraftcloud \ + --arch x86_64 \ + --strategy overwrite \ + --rootfs-type erofs \ + --push \ + "$kraftfile_dir" + + git checkout "$current_ref" --quiet 2>/dev/null || true + if $stashed; then + git stash pop --quiet 2>/dev/null || true + fi + + cd "$SCRIPT_DIR" + log "Image '$ukc_image' pushed." +} + +deploy_instance() { + local label="$1" image_type="$2" vcpus="$3" memory_mb="$4" + local ukc_image="onkernel/bench-${label}:latest" + local inst_name="bench-${label}" + + kraft cloud inst rm "$inst_name" 2>/dev/null || true + + local deploy_args=( + --start + --vcpus "$vcpus" + -M "$memory_mb" + -p 9222:9222/tls + -p 444:10001/tls + -e RUN_AS_ROOT=false + -e LOG_CDP_MESSAGES=false + -n "$inst_name" + ) + + if [[ "$image_type" == "headful" ]]; then + deploy_args+=( + -e DISPLAY_NUM=1 + -e HEIGHT=1080 + -e WIDTH=1920 + -e ENABLE_WEBRTC=false + ) + fi + + log "Deploying $inst_name (vcpus=$vcpus, mem=${memory_mb}MB, type=$image_type)..." >&2 + kraft cloud inst create "${deploy_args[@]}" "$ukc_image" >&2 + + sleep 5 + + # Get FQDN - only print the FQDN to stdout, everything else to stderr + local fqdn + fqdn=$(kraft cloud inst get "$inst_name" -o json 2>/dev/null | python3 -c "import sys,json; print(json.load(sys.stdin)[0]['fqdn'])" 2>/dev/null || echo "") + if [[ -z "$fqdn" ]]; then + log "ERROR: Could not get FQDN for $inst_name" >&2 + return 1 + fi + log "Instance FQDN: $fqdn" >&2 + echo "$fqdn" +} + +wait_for_cdp() { + local fqdn="$1" + local url="https://${fqdn}:9222/json/version" + log "Waiting for CDP at $url..." + local attempts=0 + while ! curl -sf "$url" >/dev/null 2>&1; do + sleep 2 + attempts=$((attempts + 1)) + if (( attempts > 60 )); then + log "ERROR: CDP not ready after 120s" + return 1 + fi + done + log "CDP ready after $((attempts * 2))s." +} + +bench_variant() { + local label="$1" ref="$2" image_type="$3" vcpus="$4" memory_mb="$5" + local variant_dir="$RESULTS_DIR/$label" + mkdir -p "$variant_dir" + + log "========================================" + log " Benchmarking: $label (Unikraft)" + log " Ref: $ref | Type: $image_type | vCPUs: $vcpus | Mem: ${memory_mb}MB" + log "========================================" + + # Build and push image + build_and_push_image "$label" "$ref" "$image_type" + + # Deploy + local fqdn + fqdn=$(deploy_instance "$label" "$image_type" "$vcpus" "$memory_mb") + + # Record resource config + cat > "$variant_dir/memory.txt" < "$variant_dir/results.md" 2> "$variant_dir/bench.log" || true + + "$SCRIPT_DIR/bench" "${bench_args[@]}" -json \ + > "$variant_dir/results.json" 2> "$variant_dir/bench-json.log" || true + + # Save instance info + kraft cloud inst get "bench-${label}" -o json > "$variant_dir/instance.json" 2>/dev/null || true + + # Tear down + kraft cloud inst rm "bench-${label}" 2>/dev/null || true + + log "Variant '$label' complete. Results in $variant_dir/" +} + +summarize() { + local summary_file="$RESULTS_DIR/SUMMARY.md" + cat > "$summary_file" <> "$summary_file" + echo "" >> "$summary_file" + if [[ -f "$variant_dir/results.md" ]]; then + cat "$variant_dir/results.md" >> "$summary_file" + fi + echo "" >> "$summary_file" + echo "### $label — Config" >> "$summary_file" + echo '```' >> "$summary_file" + cat "$variant_dir/memory.txt" >> "$summary_file" + echo '```' >> "$summary_file" + echo "" >> "$summary_file" + done + + # Side-by-side comparison + echo "## Side-by-side Comparison (Median)" >> "$summary_file" + echo "" >> "$summary_file" + python3 "$SCRIPT_DIR/compare.py" "$RESULTS_DIR" >> "$summary_file" 2>/dev/null || echo "(comparison script failed)" >> "$summary_file" + + log "Summary: $summary_file" +} + +# ---- Main ---- +log "Unikraft Live View Benchmark" +log "Results dir: $RESULTS_DIR" +log "Variants: $VARIANTS" +log "Metro: $UKC_METRO" + +build_bench + +for entry in $VARIANTS; do + IFS=':' read -r label ref image_type vcpus memory_mb <<< "$entry" + bench_variant "$label" "$ref" "$image_type" "$vcpus" "$memory_mb" || \ + log "WARNING: Variant '$label' failed, continuing..." + sleep 5 +done + +summarize +log "All done! Results in $RESULTS_DIR/" diff --git a/benchmarks/liveview/run.sh b/benchmarks/liveview/run.sh new file mode 100755 index 00000000..45ff37f9 --- /dev/null +++ b/benchmarks/liveview/run.sh @@ -0,0 +1,447 @@ +#!/usr/bin/env bash +set -euo pipefail + +SCRIPT_DIR=$(cd "$(dirname "$0")" && pwd) +REPO_ROOT="$SCRIPT_DIR/../.." +RESULTS_DIR="$SCRIPT_DIR/results/$(date +%Y%m%d-%H%M%S)" +mkdir -p "$RESULTS_DIR" + +ITERATIONS="${ITERATIONS:-10}" +WARMUP="${WARMUP:-2}" +SETTLE_SECS="${SETTLE_SECS:-15}" +STATS_INTERVAL="${STATS_INTERVAL:-1}" +STATS_DURATION="${STATS_DURATION:-60}" +# Chrome listens on 9223 inside the container (127.0.0.1 only). +# The kernel-images-api proxy on 9222 doesn't forward all CDP methods, +# so we copy the benchmark binary into the container and run it there. +CHROME_INTERNAL_PORT=9223 + +# Resource limits matching production allocations: +# headless: 1024 MB / 4 vCPUs +# headful: 8192 MB / 8 vCPUs +HEADLESS_MEMORY="${HEADLESS_MEMORY:-1024m}" +HEADLESS_CPUS="${HEADLESS_CPUS:-4}" +HEADFUL_MEMORY="${HEADFUL_MEMORY:-8192m}" +HEADFUL_CPUS="${HEADFUL_CPUS:-8}" + +# --------------------------------------------------------------------------- # +# Which image variants to benchmark # +# --------------------------------------------------------------------------- # +# Each entry: