On 5 Jan 2008, at 5:51 PM, Adam R. Maxwell wrote: > > On Jan 5, 2008, at 4:22 AM, Christiaan Hofman wrote: > >> >> On 4 Jan 2008, at 6:23 PM, Adam R. Maxwell wrote: >> >>>>> I found that drawing speed also acts as an implicit throttle on >>>>> the >>>>> render thread, so the queue uses waitUntilDone:YES. I found that >>>>> rendering was too fast under some conditions, and all the drawing >>>>> updates led to a beachball. Using OpenGL to draw might be a >>>>> performance win, but I've been afraid to open that can of worms; >>>>> maybe >>>>> on a branch. Apple uses mipmaps in iPhoto according to class- >>>>> dump. >>>>> >>>>> -- >>>>> adam >>>> >> >> That sounds like being inefficient. Can't we just collect rendered >> icons until the main thread is ready, rather than flushing every 5 >> icons? > > What do you mean by "ready?" All the delegate method is really doing > is adding some dirty regions for display, so they're redrawn on the > next pass through the event loop. >
Ready means that the delegate method has returned. The same as what waitUntilDone:YES would do, only it would not block the render thread during that time. >> I'm thinking of putting a main thread method in the iconQueue >> in between the render thread and the delegate method. It would send >> the delegate method and when it's done notifies the render thread >> (e.g. using OSAtomic). The render thread can then flush only when the >> main thread is ready (perhaps with a minimum number of items to >> flush), otherwise it just collects the rendered icons. Perhaps for >> the last batch it would waitUntilDone. Does this sound like it could >> work? > > I'm afraid I don't follow; again, this depends on what you mean by the > main thread being ready. > > It's fastest in terms of wall clock time to render all icons and then > only redisplay at the end, but that wasn't a good user experience. > Come to think of it, I also recall that waitUntilDone:NO improved > performance on single-core and killed it on dual-core. That may not > be the case now, since the delegate method only marks certain regions > for redisplay...and other parts handle that better as well. If it's just using setNeedsDisplay it may not make much of a difference. Christiaan ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Bibdesk-develop mailing list Bibdesk-develop@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bibdesk-develop