From b795d8a3f5e6e4c29d4aef2d7720ae9c1351c21d Mon Sep 17 00:00:00 2001 From: gmega Date: Wed, 8 Nov 2023 19:53:26 -0300 Subject: [PATCH] revert threadvars and add initialization to collector global instance --- codex/utils/asyncprofiler/asyncprofiler.nim | 6 +++--- codex/utils/asyncprofiler/metricscollector.nim | 15 ++++++--------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/codex/utils/asyncprofiler/asyncprofiler.nim b/codex/utils/asyncprofiler/asyncprofiler.nim index c8112ad4..8a484a05 100644 --- a/codex/utils/asyncprofiler/asyncprofiler.nim +++ b/codex/utils/asyncprofiler/asyncprofiler.nim @@ -33,9 +33,9 @@ type ChangeListener* = proc (): void {.raises: [].} var - perFutureMetrics {.threadvar.}: Table[uint, FutureMetrics] - futureSummaryMetrics {.threadvar.}: MetricsSummary - onChange {.threadvar.}: ChangeListener + perFutureMetrics: Table[uint, FutureMetrics] + futureSummaryMetrics: MetricsSummary + onChange: ChangeListener proc getFutureSummaryMetrics*(): MetricsSummary {.gcsafe.} = ## get a copy of the table of summary metrics for all futures. diff --git a/codex/utils/asyncprofiler/metricscollector.nim b/codex/utils/asyncprofiler/metricscollector.nim index 9bf5093e..7f1773e6 100644 --- a/codex/utils/asyncprofiler/metricscollector.nim +++ b/codex/utils/asyncprofiler/metricscollector.nim @@ -19,7 +19,7 @@ when defined(metrics): PerfSampler = proc (): MetricsSummary {.raises: [].} - Clock = proc(): Time {.raises: [].} + Clock = proc (): Time {.raises: [].} ProfilerMetric = (SrcLoc, OverallMetrics) @@ -181,15 +181,12 @@ when defined(metrics): resetMetric(chronos_largest_exec_time_total) resetMetric(chronos_largest_exec_time_max) - var asyncProfilerInfo* {.threadvar.}: AsyncProfilerInfo - - proc initDefault(AsyncProfilerInfo: typedesc): void = - asyncProfilerInfo = AsyncProfilerInfo.newCollector( - perfSampler = asyncprofiler.getFutureSummaryMetrics, + var asyncProfilerInfo* {.global.}: AsyncProfilerInfo = AsyncProfilerInfo.newCollector( + perfSampler = getFutureSummaryMetrics, k = 10, # We want to collect metrics every 5 seconds. - sampleInterval = times.milliseconds(5 * 1000), - clock = proc (): Time = time.getTime(), + sampleInterval = initDuration(seconds = 5), + clock = proc (): Time = getTime(), ) - setChangeCallback(asyncProfilerInfo) + setChangeCallback(proc (): void = asyncProfilerInfo.collect())