5internal static class RenderTelemetry
8 internal static readonly
string[] Metrics =
10 "build.cpu.ms",
"query.cpu.ms",
"sort.cpu.ms",
"record.cpu.ms",
"overlay.cpu.ms",
11 "visible.drawables",
"visible.tiles",
"atlas.batches",
"atlas.tiles",
12 "replay.cpu.ms",
"picture.cpu.ms",
"backbuffer.flush.cpu.ms",
"snapshot.cpu.ms",
"snapshot.age.ms",
13 "mailbox.published.lifetime",
"mailbox.dropped.lifetime",
"mailbox.slots",
"snapshot.commands.approximate",
14 "gate.wait.cpu.ms",
"gate.held.cpu.ms",
"presentation.cpu.ms",
"render.snapshot.cpu.ms",
"blit.cpu.ms",
"flush.cpu.ms"
18 internal static readonly
string[][] Layers = Enumerable.Range(0, 8).Select(i =>
new[]
20 $
"layer.{i}.query.cpu.ms", $
"layer.{i}.record.cpu.ms", $
"layer.{i}.drawables", $
"layer.{i}.tiles",
21 $
"layer.{i}.transformed.tiles", $
"layer.{i}.tile.width.px", $
"layer.{i}.tile.height.px", $
"layer.{i}.z"
30 gpu ? (OperatingSystem.IsBrowser() ?
"WebGL" :
"Desktop GPU") :
"Bitmap");
31 if (source is
null)
return null;
32 foreach (var name
in Metrics)
36 else if (name.StartsWith(
"gate.", StringComparison.Ordinal))
38 else if (OperatingSystem.IsBrowser() && Array.IndexOf(Metrics, name) is >= 9 and <= 17)
40 else if (OperatingSystem.IsBrowser() && name.StartsWith(
"atlas.", StringComparison.Ordinal))
42 else if (Array.IndexOf(Metrics, name) >= 20)
44 source.Define(name, availability, GetMetricKind(name));
48 foreach (var layer
in Layers)
50 for (
int index = 0; index < layer.Length; index++)
64 if (name.EndsWith(
".lifetime", StringComparison.Ordinal))
67 if (name.Contains(
"cpu.ms", StringComparison.Ordinal) ||
68 name ==
"snapshot.age.ms" ||
69 name.StartsWith(
"visible.", StringComparison.Ordinal) ||
70 name.StartsWith(
"atlas.", StringComparison.Ordinal))