My Warp Life implementation of Conway's Game of Life updates its model - a square grid of bits - up to 8,000 times per second, but invalidates the display with a display link. It works really well and results in a frame rate far faster than the refresh rate but with smooth animation.
I was puzzled that my App was getting only one-tenth of the available CPU. This turned out to be due to my early code invalidating the display every generation. I operated the life generation update on a separate thread but invalidated the display on the main - GUI - thread. Ninety percent of my CPU was devoted to back and forth context switches that did no other work of any sort. My current use of the display link resulted in a tenfold increase in performance. Michael David Crawford P.E., Consulting Process Architect mdcrawf...@gmail.com http://mike.soggywizard.com/ One Must Not Trifle With Wizards For It Makes Us Soggy And Hard To Light. On Tue, Sep 22, 2015 at 7:51 PM, Greg Parker <gpar...@apple.com> wrote: > >> On Sep 22, 2015, at 6:56 PM, Jerry Krinock <je...@ieee.org> wrote: >> >> In Apple document QA1385, in Listing 2, describing how to drive OpenGL >> Rendering Loops 10 years ago, an NSTimer, repeating every 1 millisecond, is >> added to an app’s run loop [1]. > > Just to be clear: don't do that. Use CVDisplayLink. > > >> Referring to this timer, the text says that: >> >> "When vertical synchronization is enabled in your OpenGL application, during >> each retrace period, when the timer fires, …” >> >> Hmmmm, a timer with time interval of 1 millisecond is now going to fire >> during each retrace period, 16.7 milliseconds or so! This implies that when >> vertical synchronization is enabled in an OpenGL application, the >> application’s run loop, in all modes, is synchronized to the video frame and >> can go no faster. Is this correct? > > It is not. The timer would fire multiple times per retrace if it were > unhindered. But at some point the timer callback will provoke an OpenGL > buffer swap, and that will block until the next retrace when vertical > synchronization is enabled. The gated buffer swap inside the timer callback > is the rate-limiting factor, not anything in the runloop or NSTimer itself. > > > -- > Greg Parker gpar...@apple.com Runtime Wrangler > > > > _______________________________________________ > > Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) > > Please do not post admin requests or moderator comments to the list. > Contact the moderators at cocoa-dev-admins(at)lists.apple.com > > Help/Unsubscribe/Update your Subscription: > https://lists.apple.com/mailman/options/cocoa-dev/mdcrawford%40gmail.com > > This email sent to mdcrawf...@gmail.com _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com