Skip to content

Commit 74cdd9e

Browse files
committed
optimization: do not start/link timer functions if system time never gets called
1 parent 16cae0e commit 74cdd9e

File tree

5 files changed

+47
-8
lines changed

5 files changed

+47
-8
lines changed

ee/kernel/Makefile

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,8 @@ EXIT_OBJS += _exit_internals.o SetArg.o Exit.o ExecPS2.o LoadExecPS2.o ExecOSD.o
125125

126126
TIMER_OBJS = \
127127
timer_data.o \
128+
_ps2sdk_init_timer.o \
129+
_ps2sdk_deinit_timer.o \
128130
SetT2.o \
129131
SetT2_COUNT.o \
130132
SetT2_MODE.o \

ee/kernel/include/kernel.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -575,10 +575,8 @@ extern void *GetEntryAddress(int syscall);
575575
void ExecOSD(int num_args, char *args[]) { _ExecOSD(num_args, args); }
576576

577577
#define DISABLE_TimerSystemTime() \
578-
s32 InitTimer(s32 in_mode) {(void)in_mode; return 0;} \
579-
s32 EndTimer(void) {return 0;} \
580-
s32 StartTimerSystemTime(void) {return 0;} \
581-
s32 StopTimerSystemTime(void) {return 0;}
578+
void _ps2sdk_init_timer() {} \
579+
void _ps2sdk_deinit_timer() {}
582580

583581
#define DISABLE_TimerAlarm() \
584582
void ForTimer_InitAlarm(void) {}

ee/kernel/include/timer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ typedef u64 (*timer_alarm_handler_t)(s32 id, u64 scheduled_time, u64 actual_time
6666
extern "C" {
6767
#endif
6868

69+
extern void _ps2sdk_init_timer_impl(void);
70+
extern void _ps2sdk_init_timer(void);
71+
extern void _ps2sdk_deinit_timer_impl(void);
72+
extern void _ps2sdk_deinit_timer(void);
73+
6974
extern s32 InitTimer(s32 in_mode);
7075
extern s32 EndTimer(void);
7176
extern s32 GetTimerPreScaleFactor(void);

ee/kernel/src/initsys.c

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121
void _InitSys(void)
2222
{
2323
InitAlarm();
24-
InitTimer(2);
25-
StartTimerSystemTime();
24+
_ps2sdk_init_timer();
2625
InitThread();
2726
InitExecPS2();
2827
InitTLBFunctions();
@@ -32,8 +31,7 @@ void _InitSys(void)
3231
#ifdef F_TerminateLibrary
3332
void TerminateLibrary(void)
3433
{
35-
StopTimerSystemTime();
36-
EndTimer();
34+
_ps2sdk_deinit_timer();
3735
InitTLB();
3836
}
3937
#endif

ee/kernel/src/timer.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,30 @@ extern timer_ee_global_struct g_Timer;
7979
extern counter_struct_t g_CounterBuf[COUNTER_COUNT] __attribute__((aligned(64)));
8080
#endif
8181

82+
#ifdef F__ps2sdk_init_timer
83+
void __attribute__((weak)) _ps2sdk_init_timer_impl(void);
84+
__attribute__((weak)) void _ps2sdk_init_timer(void)
85+
{
86+
// cppcheck-suppress knownConditionTrueFalse
87+
if (&_ps2sdk_init_timer_impl)
88+
{
89+
_ps2sdk_init_timer_impl();
90+
}
91+
}
92+
#endif
93+
94+
#ifdef F__ps2sdk_deinit_timer
95+
void __attribute__((weak)) _ps2sdk_deinit_timer_impl(void);
96+
__attribute__((weak)) void _ps2sdk_deinit_timer(void)
97+
{
98+
// cppcheck-suppress knownConditionTrueFalse
99+
if (&_ps2sdk_deinit_timer_impl)
100+
{
101+
_ps2sdk_deinit_timer_impl();
102+
}
103+
}
104+
#endif
105+
82106
#ifdef F_SetT2
83107
void SetT2(volatile void *ptr, u32 val)
84108
{
@@ -478,6 +502,18 @@ u64 iGetTimerSystemTime(void)
478502
timer_system_time_now = timer_system_time_now << ((mode & 3) << 2);
479503
return timer_system_time_now;
480504
}
505+
506+
void _ps2sdk_init_timer_impl(void)
507+
{
508+
InitTimer(2);
509+
StartTimerSystemTime();
510+
}
511+
512+
void _ps2sdk_deinit_timer_impl(void)
513+
{
514+
StopTimerSystemTime();
515+
EndTimer();
516+
}
481517
#endif
482518

483519
#ifdef F_GetTimerSystemTime

0 commit comments

Comments
 (0)