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

Reply via email to