Mailing Lists: Apple Mailing Lists
Image of Mac OS face in stamp
Re: using Quartz Debug to help understand/optimize CALayer drawing
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: using Quartz Debug to help understand/optimize CALayer drawing



There's currently no way that Quartz Debug can tell you what Core Animation is drawing. CA draws like any OpenGL application into a surface attached to your window, and Quartz Debug and the Quartz window server will either not be told about each screen update at all (if the surface is unoccluded by other windows) or will be told that the entire surface was updated (most likely what you're seeing.)

The best solution is to run your program with the environment variable CA_COLOR_FLUSH=1 set, to turn on Core Animation's own version of "flash screen updates" for the individual parts of the window that it redraws.

Other useful debugging options are:

CA_COLOR_NO_WAIT=1 like the "no delay after flash" option in Quartz Debug
CA_COLOR_OPAQUE=1 shows opaque vs non-opaque regions in red and green
- minimizing "redness" is a good way to improve performance
CA_PRINT_TREE=1 logs the CA render tree to stderr every frame


	John

On Oct 9, 2008, at 1:37 PM, Michael B Johnson wrote:

So I have a CALayer that has many children. As these child layers come into the visible rect of the enclosing view, NSOperations are fired off to load the contents of these child layers. I bundle up the layer updates into as many operations as I have cores, and enclose each NSOperation's work in a CATransaction blocks.

As each layer gets its new contents set (by having its delegate property set to non-nil), I mark that layer's bounds rect dirty. My hope was that when the view redraw, it would only have to update that rectangle.

Unfortunately, Quart Debug with "Flash Screen Updates" on, shows that the entire view (which is 4 megapixels) is getting updated each time.

I've chunked the layer update transactions into groups of 10, and I've also grouped the layers into groups (I have ~300 groups of layers, each of which has about 300 children - where each group is a column of layers on a grid), and nothing seems to affect the redraw.

So I have three options:

(1) I'm still doing something wrong with my dirtying logic, and managing to dirty the whole view
(2) QuartzDebug is lying to me
(3) Core Animation doesn't work the way I think


I'm thinking it's probably 1 or 3...

Any thoughts?



--> Michael B. Johnson, PhD
--> http://homepage.mac.com/drwave (personal)
--> http://xenia.media.mit.edu/~wave (alum)
--> MPG Lead
--> Pixar Animation Studios




_______________________________________________ Do not post admin requests to the list. They will be ignored. Quartz-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden

_______________________________________________ Do not post admin requests to the list. They will be ignored. Quartz-dev mailing list (email@hidden) Help/Unsubscribe/Update your Subscription: This email sent to email@hidden
References: 
 >using Quartz Debug to help understand/optimize CALayer drawing (From: Michael B Johnson <email@hidden>)



Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Contact Apple | Terms of Use | Privacy Policy

Copyright © 2011 Apple Inc. All rights reserved.