Reduce timer-tick CPU load by removing per-tick ResizeSMeter and throttling AGC line updates

- Remove ResizeSMeter (Pango font measurement + multiple SetBounds) from 60 Hz timer tick;
  it is still called on actual resize events
- Throttle UpdateAGCLines WDSP API calls from 60 Hz to ~10 Hz (every 6 ticks)
- Optimize spectrum alpha-fix loop: write-only byte access instead of read-modify-write DWORD

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-24 18:51:41 +03:00
co-authored by Claude Sonnet 4.6
parent 03693dc0f4
commit 1eecd974fc
2 changed files with 15 additions and 7 deletions
+6 -1
View File
@@ -301,6 +301,7 @@ type
// Waterfall frame timing // Waterfall frame timing
FWaterfallFrameInterval: Integer; FWaterfallFrameInterval: Integer;
FWaterfallFrameCounter: Integer; FWaterfallFrameCounter: Integer;
FAgcLineCounter: Integer;
// ---- Splitter ---- // ---- Splitter ----
FSplitterDrag: Boolean; FSplitterDrag: Boolean;
FSplitterDragY0: Integer; FSplitterDragY0: Integer;
@@ -2874,7 +2875,6 @@ begin
((PbWaterfall.Width <> FSpectrumWidth) or ((PbWaterfall.Width <> FSpectrumWidth) or
(PbWaterfall.Height <> FWaterfallHeight))) then (PbWaterfall.Height <> FWaterfallHeight))) then
ResizeSpectrumPanels; ResizeSpectrumPanels;
ResizeSMeter;
if FSpectrumWidth <= 0 then Exit; if FSpectrumWidth <= 0 then Exit;
SyncSpecViewFreq; SyncSpecViewFreq;
@@ -2920,9 +2920,14 @@ begin
begin begin
FLastSMeter := FDSPEngine.GetSMeterDBm; FLastSMeter := FDSPEngine.GetSMeterDBm;
FDSPEngine.SetSpectrumWidth(FSpectrumWidth); FDSPEngine.SetSpectrumWidth(FSpectrumWidth);
Inc(FAgcLineCounter);
if FAgcLineCounter >= 6 then
begin
FDSPEngine.UpdateAGCLines(FSpectrumWidth); FDSPEngine.UpdateAGCLines(FSpectrumWidth);
FSpecView.AGCThresh := FDSPEngine.AGCThresh; FSpecView.AGCThresh := FDSPEngine.AGCThresh;
FSpecView.AGCHangLevel := FDSPEngine.AGCHangLevel; FSpecView.AGCHangLevel := FDSPEngine.AGCHangLevel;
FAgcLineCounter := 0;
end;
end; end;
FSpecView.WDSPReady := FWDSPReady; FSpecView.WDSPReady := FWDSPReady;
// Обновляем оверлей если видим // Обновляем оверлей если видим
+6 -3
View File
@@ -696,7 +696,7 @@ procedure TSpectrumView.DrawSpectrum;
var var
C, GC: TCanvas; C, GC: TCanvas;
i, Yp, W, H, GX: Integer; i, Yp, W, H, GX: Integer;
AlphaRow: PCardinal; AlphaPtr: PByte;
DBmin, DBmax, dB: Double; DBmin, DBmax, dB: Double;
VfoX, X1, X2: Integer; VfoX, X1, X2: Integer;
TXVfoX, TXX1, TXX2: Integer; TXVfoX, TXX1, TXX2: Integer;
@@ -907,9 +907,12 @@ begin
FSpectrumBitmap.BeginUpdate(False); FSpectrumBitmap.BeginUpdate(False);
for i := 0 to H - 1 do for i := 0 to H - 1 do
begin begin
AlphaRow := PCardinal(FSpectrumBitmap.ScanLine[i]); AlphaPtr := PByte(FSpectrumBitmap.ScanLine[i]) + 3;
for Yp := 0 to W - 1 do for Yp := 0 to W - 1 do
AlphaRow[Yp] := AlphaRow[Yp] or $FF000000; begin
AlphaPtr^ := $FF;
Inc(AlphaPtr, 4);
end;
end; end;
FSpectrumBitmap.EndUpdate(False); FSpectrumBitmap.EndUpdate(False);
end; end;