timing switched to use NSDate instead of Microseconds (cleaner), fixed regression in auto frame skip menu item

This commit is contained in:
gecko_reverse 2008-09-21 08:06:31 +00:00
parent 81cbfa5015
commit 3c525b9f46
2 changed files with 11 additions and 14 deletions

View File

@ -1134,6 +1134,7 @@ NSMenuItem *screenshot_to_file_item = nil;
[pause_item setState:NSOffState]; [pause_item setState:NSOffState];
} }
[frame_skip_auto_item setTarget:self];
for(i = 0; i < MAX_FRAME_SKIP; i++)[frame_skip_item[i] setTarget:self]; for(i = 0; i < MAX_FRAME_SKIP; i++)[frame_skip_item[i] setTarget:self];
[self setFrameSkip:[self frameSkip]]; //set the menu checkmarks correctly [self setFrameSkip:[self frameSkip]]; //set the menu checkmarks correctly

View File

@ -1255,8 +1255,8 @@ bool opengl_init()
u32 cycles = 0; u32 cycles = 0;
NSDate *frame_end_date; NSDate *frame_start_date, *frame_end_date, *ideal_frame_end_date;
unsigned long long frame_start_time, frame_end_time;
int frames_to_skip = 0; int frames_to_skip = 0;
//program main loop //program main loop
@ -1271,9 +1271,9 @@ bool opengl_init()
paused = false; paused = false;
int speed_limit_this_frame = speed_limit; //dont let speed limit change midframe int speed_limit_this_frame = speed_limit; //dont let speed limit change midframe
if(speed_limit_this_frame)frame_end_date = [[NSDate alloc] initWithTimeIntervalSinceNow: DS_SECONDS_PER_FRAME / ((float)speed_limit_this_frame / 100.0)]; if(speed_limit_this_frame)ideal_frame_end_date = [NSDate dateWithTimeIntervalSinceNow: DS_SECONDS_PER_FRAME / ((float)speed_limit_this_frame / 100.0)];
Microseconds((struct UnsignedWide*)&frame_start_time); frame_start_date = [NSDate dateWithTimeIntervalSinceNow:0];
[execution_lock lock]; [execution_lock lock];
@ -1287,14 +1287,11 @@ bool opengl_init()
[execution_lock unlock]; [execution_lock unlock];
Microseconds((struct UnsignedWide*)&frame_end_time); frame_end_date = [NSDate dateWithTimeIntervalSinceNow:0];
//speed limit //speed limit
if(speed_limit_this_frame) if(speed_limit_this_frame)
{ [NSThread sleepUntilDate:ideal_frame_end_date];
[NSThread sleepUntilDate:frame_end_date];
[frame_end_date release];
}
if(frames_to_skip > 0) if(frames_to_skip > 0)
frames_to_skip--; frames_to_skip--;
@ -1304,10 +1301,9 @@ bool opengl_init()
if(frame_skip < 0) if(frame_skip < 0)
{ //automatic { //automatic
//i don't know if theres a standard strategy, but here we calculate //i don't know if theres a standard strategy, but here we calculate how much
//how much longer the frame took than it should have, then set it to skip //longer the frame took than it should have, then set it to skip that many frames.
//that many frames. frames_to_skip = [frame_end_date timeIntervalSinceDate:frame_start_date] / (float)DS_SECONDS_PER_FRAME;
frames_to_skip = ((double)(frame_end_time - frame_start_time)) / ((double)DS_MICROSECONDS_PER_FRAME);
if(frames_to_skip > 10)frames_to_skip = 10; if(frames_to_skip > 10)frames_to_skip = 10;
} else } else