 
 		memcpy(previousFhtValues, fht_log_out, FHT_N / 2);
 		runFHT();
+
+		const auto start = millis();
+
 		updateTextDisplay();
 		updateSpectrumDisplay();
 		updateVuDisplay();
+
+		tft.setTextSize(2);
+		tft.setTextColor(0x051F, 0x0000);
+		tft.setCursor(0, 0);
+		tft.print(paddedString(String(millis() - start), 4));
+
 		samplingWindowFull = false; // Allow the new sample set to be collected - only after the delay. Else the sample set would be 60 ms stale by the time we get to process it.
 	}
-}
-
-inline String paddedString(const String& s, const uint8_t width, const bool leftJustify = true /* otherwise right-justify */)
-{
-	String padded;
-
-	if (leftJustify)
-		padded = s;
-
-	for (int i = 0; i < (int)s.length() - width; ++i) // If len < s.length(), the loop will handle it correctly, i. e. do nothing
-		padded += ' ';
-
-	if (!leftJustify)
-		padded += s;
-
-	return padded;
 }
 
 #define RGB_to_565(R, G, B) static_cast<uint16_t>(((R & 0xF8) << 8) | ((G & 0xFC) << 3) | (B >> 3))

	tft.setTextColor(RGB_to_565(0, 255, 10), RGB_to_565(0, 0, 0));
	tft.setCursor(90, 0);
	tft.print(paddedString(String(rmsHistory.back()), 4));

	tft.setTextColor(RGB_to_565(0, 200, 255), RGB_to_565(0, 0, 0));
	tft.setCursor(0, 0);
	tft.print(paddedString(String(millis() - start), 4));
}

inline void updateTextDisplay()


inline void updateSpectrumDisplay()
{
	assert(FHT_N == 256);
	//for (int i = 1; i < 128; ++i) // What's the deal with bin 0?
	//{
