What changed in 10.10 scrollView / scrollPoint?
What changed in 10.10 scrollView / scrollPoint?
- Subject: What changed in 10.10 scrollView / scrollPoint?
- From: Gideon King <email@hidden>
- Date: Mon, 17 Nov 2014 23:58:31 +1000
Hi, I have an app where I need to programmatically scroll the content of a full screen scroll view.
I have always done this using scrollPoint on my view. I have been using this since 10.6. My view is not layer backed and has a single subview which is a layer *hosting* view.
Now in Yosemite 10.10, this takes a *very* long time at 100% CPU, with a stack trace looking something like this:
CoreGraphics`argb32_sample_argb32 + 621
CoreGraphics`argb32_image_mark + 1696
CoreGraphics`RGBA32_image + 1156
libRIP.A.dylib`ripl_Mark + 23
libRIP.A.dylib`RIPLayerBltImage + 1146
libRIP.A.dylib`ripc_RenderImage + 265
libRIP.A.dylib`ripc_EndLayer + 1204
CoreGraphics`CGContextEndTransparencyLayer + 53
QuartzCore`-[CALayer renderInContext:] + 1025
QuartzCore`-[CALayer _renderSublayersInContext:] + 479
QuartzCore`-[CALayer renderInContext:] + 1082
AppKit`-[NSView _layerBackedDisplayRectIgnoringOpacity:inContext:isRootView:flipContextIfNeedeed:] + 245
AppKit`-[NSView(NSInternal) _drawLayerInContext:] + 252
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:] + 1121
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:] + 2135
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:topView:] + 117
AppKit`-[NSView _drawRectBasedDisplayRectIgnoringOpacity:inContext:] + 214
AppKit`-[NSView displayRectIgnoringOpacity:inContext:] + 529
AppKit`-[_NSMirrorDocumentView drawRect:] + 370
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:] + 1186
AppKit`__46-[NSView(NSLayerKitGlue) drawLayer:inContext:]_block_invoke + 218
AppKit`-[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 2407
AppKit`-[NSView(NSLayerKitGlue) drawLayer:inContext:] + 108
AppKit`-[_NSBackingLayerContents drawLayer:inContext:] + 145
QuartzCore`-[CALayer drawInContext:] + 119
AppKit`-[_NSTiledLayer drawTile:inContext:] + 625
AppKit`-[_NSTiledLayerContents drawLayer:inContext:] + 169
QuartzCore`-[CALayer drawInContext:] + 119
AppKit`-[NSTileLayer drawInContext:] + 169
QuartzCore`CABackingStoreUpdate_ + 3306
QuartzCore`___ZN2CA5Layer8display_Ev_block_invoke + 59
QuartzCore`x_blame_allocations + 81
QuartzCore`CA::Layer::display_() + 1546
AppKit`-[NSTileLayer display] + 119
AppKit`-[_NSTiledLayerContents update:] + 5688
AppKit`-[_NSTiledLayer display] + 375
QuartzCore`CA::Layer::display_if_needed(CA::Transaction*) + 603
QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 35
QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 242
QuartzCore`CA::Transaction::commit() + 390
AppKit`-[NSClipView _immediateScrollToPoint:] + 8642
AppKit`-[NSClipView scrollToPoint:] + 241
AppKit`-[NSScrollView scrollClipView:toPoint:] + 75
AppKit`-[NSClipView _scrollTo:animateScroll:flashScrollerKnobs:] + 1682
AppKit`-[NSClipView _scrollPoint:fromView:] + 86
AppKit`-[NSView scrollPoint:] + 38
NovaMind`-[NMSCanvasView scrollPoint:](self=0x000000010f011a90, _cmd=0x00007fff920309d8, aPoint=NSPoint at 0x00007fff5fbfbe60) + 320 at NMSCanvasView.m:607
I have checked my view, my superview (the clipview), and the scrollview and none of them have layers, so I don’t know what is being drawn.
Also once this operation is complete, it seems to update again, outside the call to scrollPoint like this:
CoreGraphics`argb32_image_mark + 1866
CoreGraphics`RGBA32_image + 1156
libRIP.A.dylib`ripl_Mark + 23
libRIP.A.dylib`RIPLayerBltImage + 1146
libRIP.A.dylib`ripc_RenderImage + 265
libRIP.A.dylib`ripc_EndLayer + 1204
CoreGraphics`CGContextEndTransparencyLayer + 53
QuartzCore`-[CALayer renderInContext:] + 1025
QuartzCore`-[CALayer _renderSublayersInContext:] + 479
QuartzCore`-[CALayer renderInContext:] + 1082
AppKit`-[NSView _layerBackedDisplayRectIgnoringOpacity:inContext:isRootView:flipContextIfNeedeed:] + 245
AppKit`-[NSView(NSInternal) _drawLayerInContext:] + 252
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:] + 1121
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:] + 2135
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inContext:topView:] + 117
AppKit`-[NSView _drawRectBasedDisplayRectIgnoringOpacity:inContext:] + 214
AppKit`-[NSView displayRectIgnoringOpacity:inContext:] + 529
AppKit`-[_NSMirrorDocumentView drawRect:] + 370
AppKit`-[NSView(NSInternal) _recursive:displayRectIgnoringOpacity:inGraphicsContext:CGContext:topView:shouldChangeFontReferenceColor:] + 1186
AppKit`__46-[NSView(NSLayerKitGlue) drawLayer:inContext:]_block_invoke + 218
AppKit`-[NSView(NSLayerKitGlue) _drawViewBackingLayer:inContext:drawingHandler:] + 2407
AppKit`-[NSView(NSLayerKitGlue) drawLayer:inContext:] + 108
AppKit`-[_NSBackingLayerContents drawLayer:inContext:] + 145
QuartzCore`-[CALayer drawInContext:] + 119
AppKit`-[_NSTiledLayer drawTile:inContext:] + 625
AppKit`-[_NSTiledLayerContents drawLayer:inContext:] + 169
QuartzCore`-[CALayer drawInContext:] + 119
AppKit`-[NSTileLayer drawInContext:] + 169
QuartzCore`CABackingStoreUpdate_ + 3306
QuartzCore`___ZN2CA5Layer8display_Ev_block_invoke + 59
QuartzCore`x_blame_allocations + 81
QuartzCore`CA::Layer::display_() + 1546
AppKit`-[NSTileLayer display] + 119
AppKit`-[_NSTiledLayerContents update:] + 5688
AppKit`-[_NSTiledLayer display] + 375
QuartzCore`CA::Layer::display_if_needed(CA::Transaction*) + 603
QuartzCore`CA::Layer::layout_and_display_if_needed(CA::Transaction*) + 35
QuartzCore`CA::Context::commit_transaction(CA::Transaction*) + 242
QuartzCore`CA::Transaction::commit() + 390
AppKit`-[NSView(NSLayerKitGlue) _drawRectAsLayerTree:] + 517
AppKit`-[NSView _drawRect:clip:] + 397
AppKit`-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1875
AppKit`-[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2903 (9 times)
AppKit`-[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 913
AppKit`-[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 333
AppKit`-[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 2761
AppKit`-[NSView displayIfNeeded] + 1876
AppKit`-[NSWindow displayIfNeeded] + 232
AppKit`__40+[NSAnimationManager performAnimations:]_block_invoke_2 + 1004
AppKit`NSPerformWithScreenUpdatesDisabled + 65
AppKit`__40+[NSAnimationManager performAnimations:]_block_invoke + 130
AppKit`+[NSAnimationManager performAnimations:] + 1156
AppKit`-[NSScreenDisplayLink _fire] + 399
CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 20
CoreFoundation`__CFRunLoopDoTimer + 1059
CoreFoundation`__CFRunLoopDoTimers + 301
CoreFoundation`__CFRunLoopRun + 2024
CoreFoundation`CFRunLoopRunSpecific + 296
HIToolbox`RunCurrentEventLoopInMode + 235
HIToolbox`ReceiveNextEventCommon + 431
HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 71
AppKit`_DPSNextEvent + 964
AppKit`-[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 194
AppKit`-[NSApplication run] + 594
OmniAppKit`-[OAApplication run] + 127
AppKit`NSApplicationMain + 1832
NovaMind`main(argc=3, argv=0x00007fff5fbff8e0) + 34 at main.m:11
NovaMind`start + 52
This is also very slow and takes 100% CPU. Normal pinch to zoom and two finger swipe scrolling works at normal speed.
Any clues?
Thanks
Gideon
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden