Skip to content

Commit 9a47e8c

Browse files
committed
feat(site): display regional benchmark results on benchmarks page
1 parent 5325067 commit 9a47e8c

1 file changed

Lines changed: 94 additions & 25 deletions

File tree

‎apps/site/app/benchmarks/page.tsx‎

Lines changed: 94 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Container } from "@/components/ui/Container";
88
import { getMarketingPage, START_HREF } from "@/lib/marketing-pages";
99
import { pageMetadata } from "@/lib/seo";
1010
import { breadcrumbLd, webPageLd } from "@/lib/structured-data";
11+
import europeLocal from "@/public/benchmarks/providers/europe-local.json";
1112
import latest from "@/public/benchmarks/providers/latest.json";
1213

1314
const page = getMarketingPage("/benchmarks");
@@ -26,57 +27,103 @@ const breadcrumbs = [
2627
// Pulled straight from the published artifact so the page never drifts from the run.
2728
const rend = latest.summary.providers.rend;
2829
const mux = latest.summary.providers.mux;
30+
const europeRend = europeLocal.summary.providers.rend;
31+
const europeMux = europeLocal.summary.providers.mux;
2932

3033
const runDate = new Date(latest.generatedAt).toLocaleDateString("en-GB", {
3134
day: "numeric",
3235
month: "long",
3336
year: "numeric",
3437
});
38+
const europeRunDate = new Date(europeLocal.generatedAt).toLocaleDateString("en-GB", {
39+
day: "numeric",
40+
month: "long",
41+
year: "numeric",
42+
});
3543
const durationSeconds = Math.round(latest.source.verification.observed.rend.durationMedianSeconds);
3644

3745
const ms = (n: number) => `${Math.round(n).toLocaleString("en-US")} ms`;
3846
const resOf = (rendition: string) => `${rendition.split("x")[1]}p (${rendition.replace("x", " × ")})`;
3947
const pctSooner = Math.round((1 - rend.metrics.timeToFirstFrameMs.median / mux.metrics.timeToFirstFrameMs.median) * 100);
48+
const europePctSooner = Math.round(
49+
(1 - europeRend.metrics.timeToFirstFrameMs.median / europeMux.metrics.timeToFirstFrameMs.median) * 100,
50+
);
51+
const browserLabel = `${latest.environment.browser.automation} ${latest.environment.browser.version}`;
52+
const europeBrowserLabel = `${europeLocal.environment.browser.automation} ${europeLocal.environment.browser.version}`;
4053

4154
const results = [
4255
{
43-
id: "rend",
56+
id: "us-rend",
57+
region: "US",
4458
name: "Rend",
4559
firstFrame: ms(rend.metrics.timeToFirstFrameMs.median),
4660
played: `${rend.successfulSamples} / ${rend.sampleCount}`,
4761
stalls: rend.metrics.stallCount.max,
4862
resolution: resOf(rend.observed.selectedRendition),
4963
},
5064
{
51-
id: "mux",
65+
id: "us-mux",
66+
region: "US",
5267
name: "Mux",
5368
firstFrame: ms(mux.metrics.timeToFirstFrameMs.median),
5469
played: `${mux.successfulSamples} / ${mux.sampleCount}`,
5570
stalls: mux.metrics.stallCount.max,
5671
resolution: resOf(mux.observed.selectedRendition),
5772
},
73+
{
74+
id: "europe-rend",
75+
region: "Europe",
76+
name: "Rend",
77+
firstFrame: ms(europeRend.metrics.timeToFirstFrameMs.median),
78+
played: `${europeRend.successfulSamples} / ${europeRend.sampleCount}`,
79+
stalls: europeRend.metrics.stallCount.max,
80+
resolution: resOf(europeRend.observed.selectedRendition),
81+
},
82+
{
83+
id: "europe-mux",
84+
region: "Europe",
85+
name: "Mux",
86+
firstFrame: ms(europeMux.metrics.timeToFirstFrameMs.median),
87+
played: `${europeMux.successfulSamples} / ${europeMux.sampleCount}`,
88+
stalls: europeMux.metrics.stallCount.max,
89+
resolution: resOf(europeMux.observed.selectedRendition),
90+
},
5891
];
5992

6093
const spread = [
61-
{ label: "Fastest sample", rend: rend.metrics.timeToFirstFrameMs.min, mux: mux.metrics.timeToFirstFrameMs.min },
62-
{ label: "Median", rend: rend.metrics.timeToFirstFrameMs.median, mux: mux.metrics.timeToFirstFrameMs.median },
63-
{ label: "95th percentile", rend: rend.metrics.timeToFirstFrameMs.p95, mux: mux.metrics.timeToFirstFrameMs.p95 },
64-
{ label: "Slowest sample", rend: rend.metrics.timeToFirstFrameMs.max, mux: mux.metrics.timeToFirstFrameMs.max },
94+
{ region: "US", label: "Fastest sample", rend: rend.metrics.timeToFirstFrameMs.min, mux: mux.metrics.timeToFirstFrameMs.min },
95+
{ region: "US", label: "Median", rend: rend.metrics.timeToFirstFrameMs.median, mux: mux.metrics.timeToFirstFrameMs.median },
96+
{
97+
region: "Europe",
98+
label: "Fastest sample",
99+
rend: europeRend.metrics.timeToFirstFrameMs.min,
100+
mux: europeMux.metrics.timeToFirstFrameMs.min,
101+
},
102+
{
103+
region: "Europe",
104+
label: "Median",
105+
rend: europeRend.metrics.timeToFirstFrameMs.median,
106+
mux: europeMux.metrics.timeToFirstFrameMs.median,
107+
},
65108
];
66109

67110
const method = [
68111
`The same source video, ${durationSeconds} seconds long, uploaded to both Rend and Mux.`,
69-
`${latest.run.sampleCountTarget} samples per provider, with provider order randomized each round.`,
112+
`${latest.run.sampleCountTarget} samples per provider in each region, with provider order randomized each round.`,
70113
"A fresh browser context for every sample: no cookies, no stored state, and the cache disabled.",
71114
`A ${Math.round(latest.run.watchWindowMs / 1000)} second watch window per sample, timing the first painted frame and counting any stalls.`,
72-
`Playwright driven Chrome ${latest.environment.browser.version}, run on a Daytona sandbox with the region set to US (Daytona picks a specific US region), the same machine for both providers.`,
115+
`${browserLabel}, run on a Daytona sandbox with the region set to US for the US results.`,
116+
`${europeBrowserLabel}, run on a local Europe machine for the Europe results.`,
117+
"Rend is measured on its fastest production setup for this asset: the native-HLS /watch path with playback assigned from the initial page.",
73118
];
74119

75120
const caveats = [
76121
"This is one video, one region, one browser profile, and one run. It is not a universal claim about either service.",
77122
"We did not purge or warm any CDN. Mux serves from its own network and Rend from ours, each in whatever cache state it happened to be in.",
78123
"Encoders, packaging and player implementations differ between the two providers.",
79-
"Rend currently serves a single 1080p rendition for this asset rather than a full adaptive ladder, and Mux selected 720p. Source file identity is not independently verified beyond matching duration and metadata.",
124+
"This is the fastest real Rend playback path, not a forced-resolution run. Rend selected 1080p and Mux selected 720p in the benchmark viewport.",
125+
"The Europe run used a local machine rather than a Daytona Europe sandbox because Europe containers were not available to this Daytona organization.",
126+
"Source file identity is not independently verified beyond matching duration and observable metadata.",
80127
];
81128

82129
const headCell = "border-b border-line pb-2.5 text-[13px] font-medium text-muted";
@@ -125,17 +172,19 @@ export default function BenchmarksPage() {
125172
</p>
126173
</div>
127174

128-
{/* Latest results */}
129-
<h2 className="mt-16 font-head text-[22px] leading-snug">Latest results</h2>
175+
{/* Regional results */}
176+
<h2 className="mt-16 font-head text-[22px] leading-snug">Regional results</h2>
130177
<p className="mt-2 max-w-[680px] text-[15px] leading-[1.6] text-muted">
131-
Time to first frame, median of {latest.run.sampleCountTarget} samples each. Last run {runDate}{" "}
132-
on a Daytona sandbox with the region set to US.
178+
Time to first frame, median of {latest.run.sampleCountTarget} samples per provider. The US run
179+
was on {runDate} in a Daytona sandbox. The Europe run was on {europeRunDate} from a local
180+
machine in Europe. Both use Rend&apos;s fastest production playback path.
133181
</p>
134182

135-
<div className="mt-6 max-w-[760px] overflow-x-auto">
136-
<table className="w-full min-w-[560px] border-collapse text-left text-[15px]">
183+
<div className="mt-6 max-w-[860px] overflow-x-auto">
184+
<table className="w-full min-w-[680px] border-collapse text-left text-[15px]">
137185
<thead>
138186
<tr>
187+
<th scope="col" className={headCell}>Region</th>
139188
<th scope="col" className={headCell}>Provider</th>
140189
<th scope="col" className={headCell}>First frame (median)</th>
141190
<th scope="col" className={headCell}>Played</th>
@@ -146,6 +195,7 @@ export default function BenchmarksPage() {
146195
<tbody>
147196
{results.map((row) => (
148197
<tr key={row.id} className="border-b border-line-soft last:border-0">
198+
<td className="py-4 pr-4 text-ink-soft">{row.region}</td>
149199
<th scope="row" className="py-4 pr-4 font-medium text-ink">
150200
{row.name}
151201
</th>
@@ -160,11 +210,12 @@ export default function BenchmarksPage() {
160210
</div>
161211

162212
<p className="mt-5 max-w-[680px] text-[14px] leading-[1.6] text-muted">
163-
Same source video ({durationSeconds} seconds). Rend served full {resOf(rend.observed.selectedRendition)}{" "}
164-
while Mux selected {resOf(mux.observed.selectedRendition)}, so Rend moved more pixels and still
165-
reached the first frame about {pctSooner}% sooner. Mux had one slow outlier near 6.8 seconds,
166-
shown below, which lifted its median. Rend&apos;s five samples stayed between{" "}
167-
{ms(rend.metrics.timeToFirstFrameMs.min)} and {ms(rend.metrics.timeToFirstFrameMs.max)}.
213+
Same source video ({durationSeconds} seconds). Rend selected native HLS at{" "}
214+
{resOf(rend.observed.selectedRendition)} while Mux selected{" "}
215+
{resOf(mux.observed.selectedRendition)} in both regional runs. In the US run, Rend reached the
216+
first frame about {pctSooner}% sooner on median. In the Europe run, Rend reached it about{" "}
217+
{europePctSooner}% sooner on median. Rend had zero stalls and zero browser network errors in
218+
both regions.
168219
</p>
169220

170221
{/* Sample spread */}
@@ -173,18 +224,20 @@ export default function BenchmarksPage() {
173224
Time to first frame across every sample, fastest to slowest.
174225
</p>
175226

176-
<div className="mt-6 max-w-[560px] overflow-x-auto">
177-
<table className="w-full min-w-[420px] border-collapse text-left text-[15px]">
227+
<div className="mt-6 max-w-[680px] overflow-x-auto">
228+
<table className="w-full min-w-[560px] border-collapse text-left text-[15px]">
178229
<thead>
179230
<tr>
231+
<th scope="col" className={headCell}>Region</th>
180232
<th scope="col" className={headCell}>Time to first frame</th>
181233
<th scope="col" className={headCell}>Rend</th>
182234
<th scope="col" className={headCell}>Mux</th>
183235
</tr>
184236
</thead>
185237
<tbody>
186238
{spread.map((s) => (
187-
<tr key={s.label} className="border-b border-line-soft last:border-0">
239+
<tr key={`${s.region}-${s.label}`} className="border-b border-line-soft last:border-0">
240+
<td className="py-3.5 pr-4 text-ink-soft">{s.region}</td>
188241
<th scope="row" className="py-3.5 pr-4 font-medium text-ink-soft">{s.label}</th>
189242
<td className="py-3.5 pr-4 tabular-nums text-ink">{ms(s.rend)}</td>
190243
<td className="py-3.5 tabular-nums text-muted">{ms(s.mux)}</td>
@@ -231,10 +284,26 @@ export default function BenchmarksPage() {
231284
</p>
232285
<p className="mt-3 flex flex-wrap gap-x-6 gap-y-2 text-[15px]">
233286
<a href={latest.artifacts.machineReadableUrl} target="_blank" rel="noopener noreferrer" className={linkClass}>
234-
Summary JSON
287+
US summary JSON
235288
</a>
236289
<a href={latest.artifacts.rawSamplesUrl} target="_blank" rel="noopener noreferrer" className={linkClass}>
237-
Every raw sample
290+
US raw samples
291+
</a>
292+
<a
293+
href={europeLocal.artifacts.machineReadableUrl}
294+
target="_blank"
295+
rel="noopener noreferrer"
296+
className={linkClass}
297+
>
298+
Europe summary JSON
299+
</a>
300+
<a
301+
href={europeLocal.artifacts.rawSamplesUrl}
302+
target="_blank"
303+
rel="noopener noreferrer"
304+
className={linkClass}
305+
>
306+
Europe raw samples
238307
</a>
239308
</p>
240309
</Container>

0 commit comments

Comments
 (0)