Skip to content

Standardize OpenChrome benchmark matrix for latency, payload, and memory #970

@shaun0927

Description

@shaun0927

배경

속도/토큰 최적화 논의를 객관화하려면 cold start, warm latency, token/payload size, memory, parallel throughput을 반복 측정할 수 있어야 한다. agent-browser는 benchmark에서 command latency, cold start, daemon/browser RSS, CPU time, binary/distribution size를 수집한다.

목표

OpenChrome의 주요 agent loop 성능을 회귀 감지 가능한 benchmark matrix로 정리한다.

구현 범위

  • tests/benchmark 또는 별도 script에 다음 시나리오를 추가/정리한다.
    • cold start: server start 또는 session init → first usable tab
    • warm read_page mode="dom"
    • warm read_page mode="ax"
    • read_page mode="dom" compression="delta"
    • find 또는 interactive discovery
    • click/fill action latency
    • screenshot inline/path latency 및 payload size
    • agent-loop: read_page -> action -> read_page(delta)
    • parallel tabs: 1/5/20 tabs where feasible
  • 각 시나리오에서 최소 다음 지표를 출력한다.
    • avg/p50/min/max/stddev ms
    • response char length / approximate token estimate
    • base64 bytes for screenshots if applicable
    • Node process RSS
    • Chrome process RSS 또는 가능한 경우 process tree memory
  • CI에서는 너무 무거운 real Chrome benchmark를 기본 차단하고, smoke/fixture mode만 실행한다.
  • full benchmark는 local/manual command로 실행 가능해야 한다.

비범위

  • 외부 사이트 의존 benchmark
  • 성능 목표를 무리하게 CI hard gate로 즉시 강제
  • Rust/native rewrite 평가

성공 기준

  • 개발자가 한 명령으로 benchmark를 실행하고 JSON/Markdown 결과를 얻을 수 있다.
  • DOM/AX/delta/screenshot payload 크기가 비교 가능하게 출력된다.
  • 최적화 PR에서 before/after 비교가 가능하다.
  • CI smoke는 안정적으로 1분 내외 또는 합리적 시간 안에 끝난다.

테스트 계획

단위/통합 테스트

  • benchmark utility의 stats 계산(avg/p50/stddev)이 deterministic input에서 올바른지 검증한다.
  • token estimate/payload size 계산이 빈 문자열, 큰 문자열, image payload에서 안전한지 검증한다.
  • smoke fixture가 외부 네트워크 없이 동작하는지 검증한다.

OpenChrome 실검증

  1. OpenChrome build 후 benchmark smoke 실행:
    npm run build
    npm run benchmark -- --category agent-loop --runs 3 --json
  2. 결과 JSON에 다음 항목이 있는지 확인한다.
    • scenario name
    • samples
    • avg/p50/min/max/stddev
    • response chars / estimated tokens
    • process RSS where available
  3. full local benchmark 실행:
    npx ts-node tests/benchmark/run-parallel.ts --mode real --category batch-js --runs 1
  4. 결과를 PR description에 붙일 수 있는 Markdown summary로 변환 가능한지 확인한다.

리스크와 완화

  • 리스크: benchmark가 flaky해서 CI를 불안정하게 만들 수 있다.
    • 완화: CI는 smoke만, real benchmark는 manual/advisory로 둔다.
  • 리스크: 환경별 Chrome RSS 측정 방식이 다르다.
    • 완화: 측정 불가 시 null과 reason을 기록하고 실패로 처리하지 않는다.

OpenChrome 실검증 체크리스트

2026-05-14 최신 merged 버전 적용 후 재검증. OpenChrome 응답, 로컬 fixture, 빌드/테스트 산출물로 직접 증명 가능한 항목만 합격 조건으로 남겼다. 사람 리뷰, 외부 사이트 안정성, 미확인 PR 상태 같은 조건은 합격 조건에서 제외한다.

검증 대상

최신 버전/공통 런타임 검증

  • 최신 develop 소스를 적용하고 npm run build 통과를 확인했다.
  • npm run lint:tier 통과를 확인했다.
  • npm test -- --runInBand 결과 504/507 suites 통과, 3 skipped, 6429/6525 tests 통과, 96 skipped를 확인했다. 단, Jest open-handle 경고는 별도 런타임 리스크로 기록했다.
  • oc_connection_health가 connected 상태를 반환했다.
  • 로컬 fixture에서 OpenChrome navigate/read_page/interact/javascript_tool 경로로 DOM 상태 변화를 관찰했다.
  • 동일 fixture/동일 설정에서 핵심 결과가 재현 가능함을 확인했다.

이슈별 해결 증거

  • 최신 develop에 연결된 구현 PR: 1079
  • 관련 테스트/소스 증거가 최신 트리에 존재한다:
    • tests/benchmark/matrix.test.ts
    • tests/benchmark/benchmark-runner.test.ts
    • tests/benchmark/matrix.ts
    • tests/benchmark/visual-grounding/mock-runner.ts
    • tests/benchmark/visual-grounding/types.ts
    • tests/tools/navigate.auto-recall.test.ts
  • 체크리스트에는 OpenChrome 응답/fixture/로컬 산출물로 재현할 수 없는 합격 조건을 남기지 않았다.

실패/보류 기준

  • 체크가 하나라도 미충족이면 이슈를 닫지 않는다.
  • 실패가 최신 코드 결함으로 재현되면 실패한 OpenChrome 호출, 응답 excerpt, fixture 상태를 증거로 남기고 별도 수정 PR을 올린다.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestperformancePerformance, latency, throughput, or resource-use improvement

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions