Yeah I'd thought about those methods. Problem is if I just do a delay for the remainer of frame time left, there is no telling how long the actual flip takes, so I'd be best delaying for a smaller number by one or two for safety so that no flips are ever missed by accident (Dreamora: is that what you meant by getting out of sync with vsync?).
Problem with a 300 frame (or even 180) test is that's 5 seconds long so you can't just have your game sitting there with a black screen doing that or saying "loading" or whatever. So you think, OK I'll test the average on the title screen, but then what if it's animated and immediately needs to know the average frame length. Perhaps it would be worth testing for say 30 frames (roughly 0.5 seconds) on a black screen and then using that average and then refining it over time. I guess that it might have to "reset" the average every so often though because random delays caused by windows may gradually lower the average. Naturally you'd also have to track Alt+TAb and any other interference (e.g. window draggin) to make sure it doesn't get included in the average.
Problem with a 300 frame (or even 180) test is that's 5 seconds long so you can't just have your game sitting there with a black screen doing that or saying "loading" or whatever. So you think, OK I'll test the average on the title screen, but then what if it's animated and immediately needs to know the average frame length. Perhaps it would be worth testing for say 30 frames (roughly 0.5 seconds) on a black screen and then using that average and then refining it over time. I guess that it might have to "reset" the average every so often though because random delays caused by windows may gradually lower the average. Naturally you'd also have to track Alt+TAb and any other interference (e.g. window draggin) to make sure it doesn't get included in the average.