Gondwana Game Engine Development (master) - 2.6.1
Gondwana is a cross-platform 2.5D game and rendering engine written in C#/.NET 8. It provides fine-grained control over rendering, timing, and scene composition, with built-in support for parallax, z-ordering, pixel overhang, collision detection, and particle effects. Gondwana targets desktop and web platforms using SkiaSharp for graphics and pluggable audio backends for desktop and browser targets.
Loading...
Searching...
No Matches
RenderTelemetry.cs
1
3
5internal static class RenderTelemetry
6{
8 internal static readonly string[] Metrics =
9 [
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"
15 ];
16
18 internal static readonly string[][] Layers = Enumerable.Range(0, 8).Select(i => new[]
19 {
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"
22 }).ToArray();
23
27 internal static TelemetrySource? Register(bool gpu)
28 {
29 var source = Engine.Instance.Profiler.TryRegisterSource("Render surface",
30 gpu ? (OperatingSystem.IsBrowser() ? "WebGL" : "Desktop GPU") : "Bitmap");
31 if (source is null) return null;
32 foreach (var name in Metrics)
33 {
34 var availability = TelemetryAvailability.NotYetSampled;
35 if (!gpu) availability = TelemetryAvailability.Unsupported;
36 else if (name.StartsWith("gate.", StringComparison.Ordinal))
37 availability = OperatingSystem.IsBrowser() ? TelemetryAvailability.Unsupported : TelemetryAvailability.NotApplicable;
38 else if (OperatingSystem.IsBrowser() && Array.IndexOf(Metrics, name) is >= 9 and <= 17)
39 availability = TelemetryAvailability.NotApplicable;
40 else if (OperatingSystem.IsBrowser() && name.StartsWith("atlas.", StringComparison.Ordinal))
41 availability = TelemetryAvailability.Unsupported;
42 else if (Array.IndexOf(Metrics, name) >= 20)
43 availability = TelemetryAvailability.Unsupported;
44 source.Define(name, availability, GetMetricKind(name));
45 }
46 source.Define("presentation.count", gpu ? TelemetryAvailability.NotYetSampled : TelemetryAvailability.Unsupported);
47 source.Define("layers.omitted", gpu ? TelemetryAvailability.NotYetSampled : TelemetryAvailability.Unsupported);
48 foreach (var layer in Layers)
49 {
50 for (int index = 0; index < layer.Length; index++)
51 {
52 source.Define(
53 layer[index],
54 gpu ? TelemetryAvailability.NotYetSampled : TelemetryAvailability.Unsupported,
55 index <= 3 ? TelemetryMetricKind.Sample : TelemetryMetricKind.Gauge);
56 }
57 }
58
59 return source;
60 }
61
62 private static TelemetryMetricKind GetMetricKind(string name)
63 {
64 if (name.EndsWith(".lifetime", StringComparison.Ordinal))
65 return TelemetryMetricKind.LifetimeCounter;
66
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))
71 {
72 return TelemetryMetricKind.Sample;
73 }
74
75 return TelemetryMetricKind.Gauge;
76 }
77}
Bounded extension source. Define measurements once, capture a generation before work,...
Represents the core game engine singleton responsible for managing the main update loop,...
Definition Engine.cs:36
static Engine Instance
Gets the singleton instance of the Engine.
Definition Engine.cs:49
Diagnostics.RuntimeProfiler Profiler
Opt-in runtime CPU measurements and bounded history, independent of CPS notifications.
Definition Engine.cs:228
TelemetryAvailability
Whether an observation is meaningful for its source and window.
@ Unsupported
The source does not implement this measurement.
TelemetryMetricKind
How observations should be interpreted when combining windows.