continue with small optimizations

This commit is contained in:
2023-11-19 21:51:00 +01:00
parent 268533a5c6
commit 74144ed3e8
4 changed files with 26 additions and 25 deletions

View File

@ -93,26 +93,29 @@ export const blinkScript = (
(app.interface.feedback as HTMLCanvasElement).width, (app.interface.feedback as HTMLCanvasElement).width,
(app.interface.feedback as HTMLCanvasElement).height (app.interface.feedback as HTMLCanvasElement).height
); );
drawEmptyBlinkers(app);
}, blinkDuration); }, blinkDuration);
} }
}; };
/** /**
* Draws a series of 9 white circles. * Manages animation updates using requestAnimationFrame.
* @param app - The Editor application context. * @param app - The Editor application context.
*/ */
export const drawEmptyBlinkers = (app: Editor) => { export const scriptBlinkers = () => {
for (let no = 1; no <= 9; no++) { let lastFrameTime = Date.now();
const shiftAmount = no * 25; const frameRate = 10;
drawCircle( const minFrameDelay = 1000 / frameRate;
app,
50 + shiftAmount, const update = () => {
app.interface.feedback.clientHeight - 15, const now = Date.now();
8, const timeSinceLastFrame = now - lastFrameTime;
"white"
); if (timeSinceLastFrame >= minFrameDelay) {
} lastFrameTime = now;
}
requestAnimationFrame(update);
};
requestAnimationFrame(update);
}; };
export interface OscilloscopeConfig { export interface OscilloscopeConfig {
@ -157,14 +160,14 @@ export const runOscilloscope = (
const maxFPS = 30; const maxFPS = 30;
const now = performance.now(); const now = performance.now();
const elapsed = now - (lastRenderTime || 0); const elapsed = now - (lastRenderTime || 0);
if (elapsed < 1000 / maxFPS) return; if (elapsed < 1000 / maxFPS) return;
lastRenderTime = now; lastRenderTime = now;
analyzer.fftSize = app.osc.fftSize * 4; analyzer.fftSize = app.osc.fftSize * 4;
analyzer.getByteFrequencyData(freqDataArray); analyzer.getByteFrequencyData(freqDataArray);
canvasCtx.clearRect(0, 0, width, height); canvasCtx.clearRect(0, 0, width, height);
const performanceFactor = 1; const performanceFactor = 1;
const reducedDataSize = Math.floor(freqDataArray.length * performanceFactor); const reducedDataSize = Math.floor(freqDataArray.length * performanceFactor);
const numBars = Math.min( const numBars = Math.min(
@ -175,15 +178,15 @@ export const runOscilloscope = (
app.osc.orientation === "horizontal" ? width / numBars : height / numBars; app.osc.orientation === "horizontal" ? width / numBars : height / numBars;
let barHeight; let barHeight;
let x = 0, let x = 0,
y = 0; y = 0;
canvasCtx.fillStyle = app.osc.color || `rgb(255, 255, 255)`; canvasCtx.fillStyle = app.osc.color || `rgb(255, 255, 255)`;
for (let i = 0; i < numBars; i++) { for (let i = 0; i < numBars; i++) {
barHeight = Math.floor( barHeight = Math.floor(
freqDataArray[Math.floor(i * freqDataArray.length / numBars)] * ((height / 256) * app.osc.size) freqDataArray[Math.floor(i * freqDataArray.length / numBars)] * ((height / 256) * app.osc.size)
); );
if (app.osc.orientation === "horizontal") { if (app.osc.orientation === "horizontal") {
canvasCtx.fillRect( canvasCtx.fillRect(
x + offset_width, x + offset_width,

View File

@ -2,7 +2,6 @@ import { Prec } from "@codemirror/state";
import { indentWithTab } from "@codemirror/commands"; import { indentWithTab } from "@codemirror/commands";
import { import {
keymap, keymap,
ViewUpdate,
lineNumbers, lineNumbers,
highlightSpecialChars, highlightSpecialChars,
drawSelection, drawSelection,

View File

@ -1,4 +1,4 @@
import { OscilloscopeConfig, runOscilloscope } from "./AudioVisualisation"; import { OscilloscopeConfig, runOscilloscope, scriptBlinkers } from "./AudioVisualisation";
import { EditorState, Compartment } from "@codemirror/state"; import { EditorState, Compartment } from "@codemirror/state";
import { javascript } from "@codemirror/lang-javascript"; import { javascript } from "@codemirror/lang-javascript";
import { markdown } from "@codemirror/lang-markdown"; import { markdown } from "@codemirror/lang-markdown";
@ -27,7 +27,6 @@ import showdown from "showdown";
import { makeStringExtensions } from "./extensions/StringExtensions"; import { makeStringExtensions } from "./extensions/StringExtensions";
import { installInterfaceLogic } from "./InterfaceLogic"; import { installInterfaceLogic } from "./InterfaceLogic";
import { installWindowBehaviors } from "./WindowBehavior"; import { installWindowBehaviors } from "./WindowBehavior";
import { drawEmptyBlinkers } from "./AudioVisualisation";
import { makeNumberExtensions } from "./extensions/NumberExtensions"; import { makeNumberExtensions } from "./extensions/NumberExtensions";
// @ts-ignore // @ts-ignore
import { registerSW } from "virtual:pwa-register"; import { registerSW } from "virtual:pwa-register";
@ -170,7 +169,7 @@ export class Editor {
registerFillKeys(this); registerFillKeys(this);
registerOnKeyDown(this); registerOnKeyDown(this);
installInterfaceLogic(this); installInterfaceLogic(this);
drawEmptyBlinkers(this); scriptBlinkers();
// ================================================================================ // ================================================================================
// Building CodeMirror Editor // Building CodeMirror Editor

View File

@ -12,7 +12,7 @@ const vitePWAconfiguration = {
sourcemap: false, sourcemap: false,
cleanupOutdatedCaches: true, cleanupOutdatedCaches: true,
globPatterns: [ globPatterns: [
"**/*.{js,css,html,gif,png,json,woff,json,ogg,wav,mp3,ico,png,svg}", "**/*.{js,css,html,gif,png,json,woff,woff2,json,ogg,wav,mp3,ico,png,svg}",
], ],
// Thanks Froos :) // Thanks Froos :)
runtimeCaching: [ runtimeCaching: [