From 2de47ff046e5eb6fedfe2f0812edc47e6c0409e6 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Wed, 30 Apr 2025 23:49:15 +0700 Subject: [PATCH] feat: export `discord/AppStartPerformance`, add Startup Timing logging --- lib/discord/package.json | 3 +++ lib/discord/src/index.ts | 2 ++ lib/discord/src/preinit.ts | 18 ++++++++++++++++++ lib/discord/types/index.ts | 10 ++++++++++ lib/init/src/index.ts | 1 + plugins/all.ts | 1 + plugins/timing-log/index.ts | 27 +++++++++++++++++++++++++++ 7 files changed, 62 insertions(+) create mode 100644 lib/discord/src/preinit.ts create mode 100644 plugins/timing-log/index.ts diff --git a/lib/discord/package.json b/lib/discord/package.json index 92a4a2f..15fe9db 100644 --- a/lib/discord/package.json +++ b/lib/discord/package.json @@ -12,6 +12,9 @@ "./native": { "default": "./src/native.ts" }, + "./preinit": { + "default": "./src/preinit.ts" + }, "./types": { "types": "./types/index.ts" } diff --git a/lib/discord/src/index.ts b/lib/discord/src/index.ts index 5ba3a7c..16a7385 100644 --- a/lib/discord/src/index.ts +++ b/lib/discord/src/index.ts @@ -3,6 +3,8 @@ import { byName, byProps } from '@revenge-mod/modules/finders/filters' import type { DiscordModules } from '../types' +export * from './preinit' + export * as flux from './flux' export * as native from './native' diff --git a/lib/discord/src/preinit.ts b/lib/discord/src/preinit.ts new file mode 100644 index 0000000..6fe18a7 --- /dev/null +++ b/lib/discord/src/preinit.ts @@ -0,0 +1,18 @@ +import { byDependencies, byProps, moduleStateAware } from '@revenge-mod/modules/finders/filters' +import { lookupModule } from '@revenge-mod/modules/finders' + +import type { DiscordModules } from '../types' + +// ../discord_common/js/shared/AppStartPerformance.tsx +export const AppStartPerformance = lookupModule( + moduleStateAware( + byProps('markAndLog'), + // biome-ignore lint/suspicious/noSparseArray: Nah + byDependencies([-1, , , 2]), + ), + { + includeUninitialized: true, + }, +)! + +AppStartPerformance.mark('👊', 'Preinit') diff --git a/lib/discord/types/index.ts b/lib/discord/types/index.ts index ae3cea8..ae235ef 100644 --- a/lib/discord/types/index.ts +++ b/lib/discord/types/index.ts @@ -69,6 +69,16 @@ export namespace DiscordModules { } } + export namespace AppStartPerformance { + export type MarkArgs = [emoji: string, log: string, delta?: number] + } + + export interface AppStartPerformance { + mark(...args: AppStartPerformance.MarkArgs): void + markAndLog(logger: InstanceType, ...args: AppStartPerformance.MarkArgs): void + [index: string]: unknown + } + /** * Discord's `Logger` class. * diff --git a/lib/init/src/index.ts b/lib/init/src/index.ts index f6e9275..653a896 100644 --- a/lib/init/src/index.ts +++ b/lib/init/src/index.ts @@ -15,6 +15,7 @@ onModuleFirstRequired(0, function onceIndexRequired() { // Initialize preinit libraries require('@revenge-mod/modules/preinit') require('@revenge-mod/react/preinit') + require('@revenge-mod/discord/preinit') onModuleInitialized(0, function onceIndexInitialized() { runCatching(() => { diff --git a/plugins/all.ts b/plugins/all.ts index bb59fdb..da231b7 100644 --- a/plugins/all.ts +++ b/plugins/all.ts @@ -1 +1,2 @@ +import './timing-log' import './staff-settings' diff --git a/plugins/timing-log/index.ts b/plugins/timing-log/index.ts new file mode 100644 index 0000000..d9dfef5 --- /dev/null +++ b/plugins/timing-log/index.ts @@ -0,0 +1,27 @@ +import { AppStartPerformance } from '@revenge-mod/discord' + +import { PluginFlags } from '@revenge-mod/plugins' +import { registerPlugin } from '@revenge-mod/plugins/_' + +AppStartPerformance.mark('👊', 'Plugins register') + +const tsReg = performance.now() +let tsInit: number + +registerPlugin( + { + id: 'revenge.timing-log', + name: 'Startup Timing Log', + description: "Log Revenge's startup timing into Discord's Startup Timing", + }, + { + init() { + tsInit = performance.now() + AppStartPerformance.mark('👊', 'Plugins init', tsInit - tsReg) + }, + start() { + AppStartPerformance.mark('👊', 'Plugins start', performance.now() - tsInit) + }, + }, + PluginFlags.Internal | PluginFlags.Enabled, +)