> On 4 Jul 2017, at 6:02 pm, Graham Cox <graham....@bigpond.com> wrote:
> 
> I can live with layer-backing as a solution, it doesn’t appear to have any 
> downsides.


I spoke too soon.

Layer backing disguises the performance issue by capturing the first render 
pass which is then used for scrolling. So scrolling is fast.

But the render pass itself is still really slow. It’s not quite as bad, because 
it only does it once for each new reload of the table view, rather than on 
every scroll change. But it’s still spending an excruciating amount of time 
rendering the title of the pop-up button, but most of it is in the mysterious 
rgba64_DAplusdDA function. This is called twice for each pop-up button 
rendered, and the time divides fairly evenly between them.

It’s a bit hard to post the full stack trace as it’s so deep, but here are the 
two main branches, with much in between them collapsed (every line is meant to 
be indented from the one above, but mail isn’t preserving the formatting at 
all).

24.72 s   78.7% 0 s                                          -[NSTableView 
drawRect:]
24.55 s   78.1% 0 s                                           -[NSTableView 
drawRowIndexes:clipRect:]
24.54 s   78.1% 1.00 ms                                        -[NSTableView 
drawRow:clipRect:]
24.16 s   76.9% 0 s                                             -[NSTableView 
_drawContentsAtRow:column:withCellFrame:]
22.30 s   70.9% 0 s                                              
-[NSPopUpButtonCell drawWithFrame:inView:]
10.63 s   33.8% 0 s                                               
-[NSMenuItemCell drawWithFrame:inView:]
10.45 s   33.2% 1.00 ms                                            
-[NSMenuItemCell drawInteriorWithFrame:inView:]
10.44 s   33.2% 0 s                                                 
-[NSMenuItemCell drawTitleWithFrame:inView:]
10.44 s   33.2% 1.00 ms                                              
-[NSButtonCell _configureAndDrawTitleWithRect:cellFrame:controlView:]
10.36 s   32.9% 0 s                                                   
drawTitle_withFrame_inView_
10.36 s   32.9% 1.00 ms                                                
-[NSPopUpButtonCell drawTitle:withFrame:inView:]
10.29 s   32.7% 0 s                                                     
_NSStringDrawingCore
10.29 s   32.7% 2.00 ms                                                  
__NSStringDrawingEngine
10.20 s   32.4% 1.00 ms                                                   
-[NSLineFragmentRenderingContext drawAtPoint:inContext:]
10.19 s   32.4% 1.00 ms                                                    
-[CUICatalog 
drawGlyphs:atPositions:inContext:withFont:count:stylePresetName:styleConfiguration:foregroundColor:]
10.16 s   32.3% 1.00 ms                                                     
-[CUITextEffectStack 
drawGlyphs:inContext:usingFont:atPositions:count:lineHeight:inBounds:atScale:]
9.71 s   30.9%  0 s                                                          
CGContextEndTransparencyLayer
9.71 s   30.9%  0 s                                                           
ripc_EndLayer
9.70 s   30.8%  0 s                                                            
ripc_RenderImage
9.70 s   30.8%  0 s                                                             
RIPLayerBltImage
9.70 s   30.8%  0 s                                                             
 ripl_Mark
9.70 s   30.8%  1.00 ms                                                         
  rgba64_image
9.61 s   30.5%  2.15 s                                                          
   rgba64_mark
7.46 s   23.7%  7.46 s                                                          
    rgba64_DAplusdDA



24.72 s   78.7% 0 s                                          -[NSTableView 
drawRect:]
24.55 s   78.1% 0 s                                           -[NSTableView 
drawRowIndexes:clipRect:]
24.54 s   78.1% 1.00 ms                                        -[NSTableView 
drawRow:clipRect:]
24.16 s   76.9% 0 s                                             -[NSTableView 
_drawContentsAtRow:column:withCellFrame:]
22.30 s   70.9% 0 s                                              
-[NSPopUpButtonCell drawWithFrame:inView:]
10.63 s   33.8% 0 s                                               
-[NSMenuItemCell drawWithFrame:inView:]
10.38 s   33.0% 0 s                                               -[NSCell 
_endVibrantBlendGroup]
10.38 s   33.0% 0 s                                                
CGContextEndTransparencyLayer
10.38 s   33.0% 0 s                                                 
ripc_EndLayer
9.66 s   30.7%  0 s                                                  
ripc_RenderImage
9.66 s   30.7%  1.00 ms                                               
RIPLayerBltImage
9.66 s   30.7%  0 s                                                    ripl_Mark
9.66 s   30.7%  0 s                                                     
rgba64_image
9.58 s   30.4%  2.07 s                                                   
rgba64_mark
7.51 s   23.8%  7.51 s                                                    
rgba64_DAplusdDA


What seems weird to me is that the time used to render the string itself is not 
a problem - it’s the blitting of the resulting captured CGLayer afterwards that 
seems to kill it. But that doesn’t seem to be happening for any other content 
in the table view - just the pop-up button’s title. All the other strings I’m 
drawing don’t figure here at all (and there are two of those for every pop-up).

I’m going to see if I can put together a minimal test case that shows the same 
issue - it’s really looking like Apple’s bug to me.


_______________________________________________

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

Reply via email to