From af38858926e45f67c93db73fa226e71cf9e8c1ef Mon Sep 17 00:00:00 2001 From: Richard Frith-MacDonald Date: Mon, 14 Sep 2009 16:06:07 +0000 Subject: [PATCH] Only notify observers once per second. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/performance/trunk@28670 72102866-910b-0410-8b05-ffd578937521 --- GSTicker.m | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/GSTicker.m b/GSTicker.m index 9ceced5..28573ac 100644 --- a/GSTicker.m +++ b/GSTicker.m @@ -69,6 +69,7 @@ static NSDate *startDate = nil; @public NSTimer *theTimer; NSMutableArray *observers; + unsigned last; } @end @@ -306,20 +307,27 @@ NSTimeInterval GSTickerTimeNow() if ([tt->observers count] > 0) { - NSArray *a = [tt->observers copy]; + NSArray *a; + unsigned tick; GSTickerTimeNow(); - NS_DURING - { - [a makeObjectsPerformSelector: @selector(fire:) - withObject: tt->observers]; - } - NS_HANDLER - { - NSLog(@"Problem firing ticker observers: %@", localException); - } - NS_ENDHANDLER - RELEASE(a); + tick = GSTickerTimeTick(); + if (tick != tt->last) + { + tt->last = tick; + a = [tt->observers copy]; + NS_DURING + { + [a makeObjectsPerformSelector: @selector(fire:) + withObject: tt->observers]; + } + NS_HANDLER + { + NSLog(@"Problem firing ticker observers: %@", localException); + } + NS_ENDHANDLER + RELEASE(a); + } } ti = GSTickerTimeNow();