{
  "title": "Instraxis Plot: fresh four-backend measurements",
  "report": "Four-backend comparison: loading, replacement and responsiveness",
  "campaign": "all-backends-20260912",
  "completed": "2026-09-12",
  "completedUtc": "2026-09-12T08:56:56.145004+00:00",
  "runIntervalUtc": [
    "2026-09-12T07:09:18.0099365Z",
    "2026-09-12T08:40:15.1722237Z"
  ],
  "scope": "Fresh Instraxis-run measurements of Instraxis Plot, ProEssentials 11, SciChart 9 and LightningChart 10 on one workstation. Every displayed comparison uses this campaign. Chart harness measurements do not establish complete Instraxis Control acquisition, logging or file-loading performance.",
  "statistic": "Nearest-rank p95 combined cycle in milliseconds, pooled across three accepted fresh-process repetitions; lower is better. Setup and memory figures are medians of per-process observations.",
  "timer": "Append/replacement or range API, library/window completion, UI pumping and DwmFlush. Completion mechanisms differ by backend. Not physical display latency, FPS or isolated GPU time.",
  "acceptance": {
    "attempted": 126,
    "accepted": 123,
    "chartAttempted": 120,
    "chartAccepted": 117,
    "baselineAccepted": 6,
    "completeCohorts": 41,
    "plannedCohorts": 42,
    "savedCaptures": 528,
    "acceptedCaptures": 516,
    "auditChecks": 15258
  },
  "protocol": {
    "runs": "126 fresh processes completed: 117/120 chart processes and 6/6 chart-free analysis baselines accepted. 41/42 cohorts complete, including all 24 extended chart cohorts shown in the workload comparison.",
    "execution": "Serial isolated processes with backend order rotated across cases and repetitions. Three original accepted repetitions are required per aggregate. Failed attempts remain recorded; no older measurements fill missing results.",
    "static": "100k, 1M, 10M and 100M explicit double-precision X/Y points. This website shows the complete 100M static cohorts; the ProEssentials 100k static cohort is withheld for rejected deep-zoom image geometry.",
    "replay": "30 seconds of precomputed immutable input, published every 10 ms, at most 30 requested chart updates/s. All history retained; no ring eviction.",
    "viewport": "Latest 1M points, switching to the first 10M-point region for the last 250 ms of each 2-second interval.",
    "replacement": "20 complete X/Y replacements per process, cycling three precomputed datasets; includes the first replacement. Selected captures and settling pauses occur between timed cycles; not an uninterrupted maximum-rate loop.",
    "concurrent": "Replay plus the same managed mean, population standard deviation, RMS and known-baseline FWHM algorithm over an immutable 10M-point Gaussian region, requested once/s. Not vendor-native analysis or Control analysis capacity.",
    "aggregation": "Latency events pooled across three processes; faster processes can contribute more events. Acceptance, memory and drain values are medians of per-run values. Cycles within a process are correlated.",
    "correctness": "528 capture records retained; 516 belong to image-accepted runs. Manual review covers 143 distinct original/fixture groups, including two rejected groups; duplicates are bound by exact hashes and fixture identity. An internal independent raw-metric audit passed 15,258 checks with no mismatches. Eight focused source-matched correctness suites passed on September 11 and were not rerun on September 12."
  },
  "environment": {
    "cpu": "Intel Core i7-10700 @ 2.90 GHz; 8 cores / 16 threads",
    "ram": "32 GiB; configured 2933 MHz",
    "gpu": "Intel UHD Graphics 630; driver 31.0.101.2140",
    "os": "Windows 11 Pro, build 26200; Balanced power plan",
    "display": "1920 × 1080, reported 59 Hz; 1000 × 650 chart client",
    "runtime": "Release x64. Instraxis Plot static native Direct2D host and extended .NET 10 bridge; ProEssentials and SciChart use .NET 10, with WPF ElementHost for SciChart; LightningChart uses .NET Framework 4.8. Verified existing binaries ran in isolated host trees."
  },
  "backends": [
    {
      "id": "instraxis-plot",
      "label": "Instraxis Plot",
      "version": "Instraxis Plot · 1a967f8",
      "revision": "1a967f875168cd45976aa6efba303d0e78fee337",
      "evidence": "Fresh campaign",
      "campaign": "all-backends-20260912"
    },
    {
      "id": "pe",
      "label": "ProEssentials 11",
      "version": "11.0.0.2",
      "evidence": "Fresh campaign",
      "campaign": "all-backends-20260912"
    },
    {
      "id": "scichart",
      "label": "SciChart 9",
      "version": "9.0.0.29196",
      "evidence": "Fresh campaign",
      "campaign": "all-backends-20260912"
    },
    {
      "id": "lc",
      "label": "LightningChart 10",
      "version": "10.0.1.4001",
      "evidence": "Fresh campaign",
      "campaign": "all-backends-20260912"
    }
  ],
  "scenarios": [
    {
      "id": "stream-100m-1m",
      "label": "Stream · 100M points + 1M samples/s",
      "mode": "stream",
      "initialCount": 100000000,
      "rate": 1000000,
      "values": [
        38.47,
        667.67,
        46,
        275.66
      ],
      "note": "Instraxis Plot recorded the lowest p95 chart cycle in this 100M-point +1M/s replay. Instraxis Plot and SciChart both accepted 99.87% of scheduled input within the window.",
      "delivery": "Instraxis Plot accepted 29.96M of 30M scheduled new samples within 30 seconds; 40,000 remained at the boundary. All four backends reached 130M retained points after catch-up, with no unconsumed input.",
      "acceptancePercent": [
        99.87,
        96.7,
        99.87,
        98.7
      ],
      "drainMs": [
        36.29,
        622.41,
        142.89,
        277.65
      ]
    },
    {
      "id": "stream-10m-100k",
      "label": "Stream · 10M points + 100k samples/s",
      "mode": "stream",
      "initialCount": 10000000,
      "rate": 100000,
      "values": [
        37.79,
        110.43,
        45.43,
        65
      ],
      "note": "Instraxis Plot recorded 37.79 ms p95, the lowest of the four backends in this replay.",
      "delivery": "All four backends retained 13M points after catch-up, with no unconsumed input. In-window delivery and final drain are shown separately below.",
      "acceptancePercent": [
        99.87,
        99.53,
        99.83,
        99.83
      ],
      "drainMs": [
        19.08,
        92.65,
        23.35,
        60.8
      ]
    },
    {
      "id": "stream-100m-100k",
      "label": "Stream · 100M points + 100k samples/s",
      "mode": "stream",
      "initialCount": 100000000,
      "rate": 100000,
      "values": [
        38.7,
        557.53,
        46.18,
        236.18
      ],
      "note": "Instraxis Plot recorded 38.70 ms p95, the lowest of the four backends in this replay.",
      "delivery": "All four backends retained 103M points after catch-up, with no unconsumed input. In-window delivery and final drain are shown separately below.",
      "acceptancePercent": [
        99.87,
        97.9,
        99.8,
        99.83
      ],
      "drainMs": [
        38.67,
        543.7,
        108.64,
        217.22
      ]
    },
    {
      "id": "replace-10m",
      "label": "Replace all X/Y · 10M points",
      "mode": "replace",
      "initialCount": 10000000,
      "rate": 0,
      "values": [
        58.74,
        58.06,
        91.62,
        321.87
      ],
      "note": "ProEssentials recorded 58.06 ms p95 and Instraxis Plot 58.74 ms. The small observed difference does not establish a statistically significant advantage.",
      "delivery": "Twenty complete A/B/C source-bank replacements per process; three accepted processes per backend. The first replacement is included in all 60 pooled events."
    },
    {
      "id": "replace-100m",
      "label": "Replace all X/Y · 100M points",
      "mode": "replace",
      "initialCount": 100000000,
      "rate": 0,
      "values": [
        230.94,
        415.39,
        533.26,
        3184.96
      ],
      "note": "Instraxis Plot recorded 230.94 ms p95, the lowest of the four backends for complete 100M-point X/Y replacement.",
      "delivery": "All 60 replacement cycles per backend are included. Source-bank generation is outside the timer; validation, index or geometry rebuilding and completion work remain inside the measured path."
    },
    {
      "id": "concurrent-100m-100k",
      "label": "Stream + analysis · 100M points + 100k/s",
      "mode": "concurrent",
      "initialCount": 100000000,
      "rate": 100000,
      "values": [
        38.39,
        560.31,
        46.26,
        234.52
      ],
      "note": "Instraxis Plot recorded 38.39 ms p95 chart cycles while the common analysis ran. Analysis request-to-UI latency is a separate measurement.",
      "delivery": "A common C# algorithm analyzes a 10M-point Gaussian region once per second. All backends delivered 29 of 30 requested jobs within the window. This does not benchmark native analysis functions or Control analysis capacity."
    }
  ],
  "detailMetrics": [
    {
      "id": "attach",
      "label": "Attach API",
      "kind": "static",
      "mode": "viewport",
      "points": 100000000,
      "rate": 0,
      "sourceField": "api_attach_ms",
      "sourceType": "scalars",
      "statistic": "Median",
      "unit": "ms",
      "values": [
        64.91,
        1.04,
        726.57,
        569.02
      ],
      "note": "Attachment alone; separate index construction and first-cycle work add time."
    },
    {
      "id": "preparation",
      "label": "Preparation + first completed cycle",
      "kind": "static",
      "mode": "viewport",
      "points": 100000000,
      "rate": 0,
      "sourceField": "ready_ms",
      "sourceType": "scalars",
      "statistic": "Median",
      "unit": "ms",
      "values": [
        235.76,
        349.2,
        936.48,
        1992.08
      ],
      "note": "Sum of timed attachment, explicit index construction where exposed, and first paint/pump/compositor cycle. Source generation, chart creation and diagnostic gaps are excluded."
    },
    {
      "id": "pan",
      "label": "Pan completed cycle",
      "kind": "static",
      "mode": "viewport",
      "points": 100000000,
      "rate": 0,
      "sourceField": "VIEW01_PAN_cycle",
      "sourceType": "latency",
      "statistic": "Pooled p95",
      "unit": "ms",
      "values": [
        33.55,
        33.2,
        34.27,
        295.45
      ],
      "note": "Deterministic commands viewing 10% of the domain; 400 recorded commands per process at 100M."
    },
    {
      "id": "zoom",
      "label": "Zoom completed cycle",
      "kind": "static",
      "mode": "viewport",
      "points": 100000000,
      "rate": 0,
      "sourceField": "VIEW02_ZOOM_cycle",
      "sourceType": "latency",
      "statistic": "Pooled p95",
      "unit": "ms",
      "values": [
        33.64,
        34.27,
        63.44,
        1199.45
      ],
      "note": "280 recorded commands per process at 100M. Repeated full-range commands can permit no-change optimization."
    },
    {
      "id": "random",
      "label": "Random viewport completed cycle",
      "kind": "static",
      "mode": "viewport",
      "points": 100000000,
      "rate": 0,
      "sourceField": "VIEW03_RANDOM_cycle",
      "sourceType": "latency",
      "statistic": "Pooled p95",
      "unit": "ms",
      "values": [
        33.54,
        33.58,
        682.29,
        718.36
      ],
      "note": "400 recorded commands per process at 100M, with logarithmically distributed view widths."
    },
    {
      "id": "static-extra-memory",
      "label": "Static: warm extra private memory",
      "kind": "static",
      "mode": "viewport",
      "points": 100000000,
      "rate": 0,
      "sourceField": "warm_extra_private_mib",
      "sourceType": "scalars",
      "statistic": "Median",
      "unit": "MiB",
      "values": [
        74.82,
        3066.84,
        1597.67,
        3077.09
      ],
      "note": "Warm private memory minus each backend’s own empty-chart-plus-source baseline."
    },
    {
      "id": "static-total-memory",
      "label": "Static: total warm private memory",
      "kind": "static",
      "mode": "viewport",
      "points": 100000000,
      "rate": 0,
      "sourceField": "warm_private_mib",
      "sourceType": "scalars",
      "statistic": "Median",
      "unit": "MiB",
      "values": [
        1624.3,
        4668.14,
        3284.24,
        4666.98
      ],
      "note": "Includes runtime and caller-owned X/Y source arrays; 100M source points alone occupy 1,525.88 MiB."
    },
    {
      "id": "replacement-extra-memory",
      "label": "Replacement: extra private memory at end",
      "kind": "extended",
      "mode": "replace",
      "points": 100000000,
      "rate": 0,
      "sourceField": "end_extra_private_mib",
      "sourceType": "scalars",
      "statistic": "Median",
      "unit": "MiB",
      "values": [
        83.61,
        3069.83,
        0.11,
        9300.59
      ],
      "note": "End private memory minus each backend’s empty-chart-plus-source baseline."
    },
    {
      "id": "replacement-total-memory",
      "label": "Replacement: total private memory at end",
      "kind": "extended",
      "mode": "replace",
      "points": 100000000,
      "rate": 0,
      "sourceField": "end_private_mib",
      "sourceType": "scalars",
      "statistic": "Median",
      "unit": "MiB",
      "values": [
        4746.66,
        7750.76,
        4816.63,
        13965.91
      ],
      "note": "Includes three caller-owned source banks totaling 4,577.64 MiB, plus runtime and backend allocations."
    },
    {
      "id": "analysis-delivery",
      "label": "Concurrent analysis request to UI",
      "kind": "extended",
      "mode": "concurrent",
      "points": 100000000,
      "rate": 100000,
      "sourceField": "analysis_request_to_ui",
      "sourceType": "latency",
      "statistic": "Pooled p95",
      "unit": "ms",
      "values": [
        75.11,
        566.9,
        132.17,
        273.99
      ],
      "note": "Scheduling, the common managed calculation and dispatcher delivery. Physical presentation and native analysis functions are not measured."
    }
  ],
  "exclusions": [
    {
      "backend": "pe",
      "kind": "static",
      "points": 100000,
      "acceptedRuns": 0,
      "plannedRuns": 3,
      "reason": "Selected positive/negative spike views have inconsistent geometry in all three attempts; overview and numerical timing checks pass. No aggregate is published. This describes the tested integration, not a general library limit."
    }
  ],
  "limitations": [
    "One workstation, one series and short replays. No multichannel scaling, long-duration reliability or universal performance ranking is established.",
    "The source fixture and application-level workload are matched; adapters use different supported APIs, completion mechanisms, runtimes and storage paths.",
    "Precomputed replay excludes data generation, device I/O and actual concurrent source writes. Chart capacity does not establish Control data-table, logging or file-loading capacity.",
    "Three-process observations are descriptive, not a statistical significance test. All first cycles, outliers and failed attempts remain recorded.",
    "Only selected saved checkpoints are reviewed, not every timed frame. Narrow raster slits remain in dense Instraxis Plot waveform bands; lossless rasterization is not established.",
    "Installed SciChart runtime-key and ProEssentials evaluation overlays were present. These results describe those tested configurations.",
    "Memory deltas use each backend’s own baseline and differ by operation. Process private memory does not isolate GPU allocations or establish leak freedom.",
    "The concurrent algorithm is shared C# code; this test does not measure native fitting, peak or spectral functions.",
    "Fresh execution uses the same verified source revision and binaries. Differences from an earlier session do not by themselves isolate an optimization or regression.",
    "Confirm the supplied Instraxis Control build and the complete application workflow during evaluation."
  ],
  "comparisonBoundary": "Every current comparison uses accepted measurements from the September 12 four-backend campaign. Vendor-published benchmark numbers are context only and do not supply any table value.",
  "source": {
    "publisher": "Instraxis",
    "access": "Final four-backend report, validation summary, original events and independent metric audit. This download is a curated public summary, not the raw dataset.",
    "validationSummarySha256": "bea23006ada5e6fd61f32adfb06668d2f9dc7f2555a9a41fbb6338acbca6fcad",
    "manifestSha256": "8e848e7746ab5fb8ff5129e74b226bb4872835adf4c6631bcd760f4b494f9ad2",
    "reportSha256": "1225be31a4cdb3dbae08f72d00f0322b6e5f47cd8f32a4d8d18c1a5709b67f6e"
  }
}
