Well, I just spent an entire day and most of the night wrestling with this
slowdown problem, trying to figure out what's causing it - to no avail...:(
I sampled my application while running, but it produced a whole lot of data
that doesn't have any landmarks relative to my code (not that I really know
what I'm looking at). I see what look like handles being requested, but
since my code is in an idle loop that does nothing (certainly doesn't
request handles or dump them), I can't figure out where the slowdown is
happening.
At one point I thought switching to functions would help, but no. Then I
thought it was a problem in my .FLTRs, but removing them all didn't fix it.
I commented out *all* of the event code, and it still slows to a crawl after
about a half hour, so I'm beginning to suspect it's something in the runtime
headers. I switched to FB4 Release 3 (I was using release 1), but that
didn't improve things.
It's a lot to look at, but FWIW, here's the output from the sampling, if
anyone has any bright ideas I'd appreciate it.
Thanks!
- John
------------------------------------------------------------------------
Sampling process 7131 for 3 seconds with 1 millisecond of run time between
samples
Sampling completed, processing symbols...
Analysis of sampling LW418 (pid 7131) every 1 millisecond
Call graph:
1328 Thread_2503
1017 RecoverHandle
1017 FindHandleForPtrFromPool
1017 FindHandleForPtrFromPool
151 0x3924d8
151 WaitNextEvent
151 WNEInternal
151 GetNextEventMatchingMask
151 RunCurrentEventLoopInMode
151 CFRunLoopRunSpecific
151 mach_msg
151 mach_msg_trap
151 mach_msg_trap
19 0x3a67f8
7 0x38c620
6 0x38a1b4
6 0x38a140
6 0x38a04c
6 IsHandleValid
6 RecoverHandle
6 FindHandleForPtrFromPool
6 TSReleaseReader
6 TSReleaseReader
1 0x38a184
1 0x38a184
4 0x38c68c
3 0x39afd0
3 0x38a2b0
3 0x38a1b4
3 0x38a140
3 0x38a04c
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
1 0x39b034
1 0x38b528
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
3 0x38c644
3 0x38a1b4
3 0x38a140
3 0x38a04c
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
2 0x38c4f4
2 0x38a2b0
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
1 0x38c548
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x39af98
1 0x39af98
1 0x39af9c
1 0x39af9c
19 0x3a7284
12 0x3a687c
5 0x38c644
5 0x38a1b4
5 0x38a140
5 0x38a04c
5 IsHandleValid
5 RecoverHandle
5 FindHandleForPtrFromPool
5 TSReleaseReader
5 TSReleaseReader
3 0x38c548
3 0x38a04c
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
2 0x38c620
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x38a1cc
1 GetWRefCon
1 GetWindowData(OpaqueWindowPtr*)
1 HIObject::IsRefValid(void*)
1 HLTBSearchRefTable
1 HLTBSearchRefTable
2 0x38c68c
1 0x39afd0
1 0x38a2b0
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x39b034
1 0x39b034
1 0x38b524
1 0x38b524
5 0x3a6864
3 0x38c68c
2 0x39afd0
2 0x38a2b0
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
1 LMGetMemErr
1 GetThreadGlobals
1 __pthread_getspecific
1 __pthread_getspecific
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x39b034
1 0x38b528
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x38c4f4
1 0x38a2b0
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x38c620
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
2 0x3a67f8
1 0x38c4f4
1 0x38a2b0
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x38c620
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
17 0x3a687c
8 0x38c68c
5 0x39afd0
5 0x38a2b0
5 0x38a1b4
5 0x38a140
5 0x38a04c
5 IsHandleValid
5 RecoverHandle
5 FindHandleForPtrFromPool
5 TSReleaseReader
5 TSReleaseReader
3 0x39b034
3 0x38b528
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
4 0x38c548
4 0x38a04c
4 IsHandleValid
4 RecoverHandle
4 FindHandleForPtrFromPool
4 TSReleaseReader
4 TSReleaseReader
3 0x38c4f4
3 0x38a2b0
3 0x38a1b4
3 0x38a140
3 0x38a04c
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
2 0x38c620
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
16 0x3924a4
16 0x391788
16 IdleControls
16 DepthFirstTraversePanes
16 DepthFirstTraversePanes
16 IdleIterationProc(HIView*, void*)
13 SendControlDefArbitraryMessage(HIView*, short, long,
long*)
13 SendEventToEventTargetWithOptions
13 SendEventToEventTargetInternal(OpaqueEventRef*,
OpaqueEventTargetRef*, HandlerCallRec*)
13 DispatchEventToHandlers(EventTargetRec*,
OpaqueEventRef*, HandlerCallRec*)
13
HIView::EventHandler(OpaqueEventHandlerCallRef*, OpaqueEventRef*, void*)
13 0x39a9e0
10 RecoverHandle
10 FindHandleForPtrFromPool
10 FindHandleForPtrFromPool
3 0x38b528
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
1 GetColorAndPenState(ColorPenState*)
1 dyld_stub_GetPenState
1 dyld_stub_GetPenState
1 IdleIterationProc(HIView*, void*)
1 SetThemeBackgroundForWindow
1 SetThemeBackground
1 DataEngine::ApplyBrush(TTheme*, short, unsigned
char)
1 _HIThemeGetCUIBackgroundRGBAColorForThemeBrush
1 _HIThemeCopyCUIBackgroundColorForThemeBrush
1 _HIThemeCopyCUIColor
1 CUICopyMeasurements
1 CUIRenderer::CopyMeasurements(CGRect,
CGContext*, __CFDictionary const*, __CFArray const*)
1 __CFDictionaryFindBuckets1b
1 __CFDictionaryFindBuckets1b
12 0x391fa0
12 0x391910
12 FindWindow
12 FindWindowOfClass
12 FindWindowCommon(Point, OpaqueWindowPtr**, short*)
12 FindPlatformWindow
12 CGSFindWindowAndOwner
12 _CGSFindWindow
12 mach_msg
12 mach_msg_trap
12 mach_msg_trap
10 0x3a6864
4 0x38c68c
3 0x39afd0
3 0x38a2b0
3 0x38a1b4
3 0x38a140
3 0x38a04c
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
1 0x39b034
1 0x38b528
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
3 0x38c548
3 0x38a04c
3 IsHandleValid
3 RecoverHandle
3 FindHandleForPtrFromPool
3 TSReleaseReader
3 TSReleaseReader
1 0x38c4f4
1 0x38a2d8
1 0x38a2d8
1 0x38c644
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x39b170
1 0x39b170
10 0x49a588
8 0x4999cc
3 0x38c68c
2 0x39afd0
2 0x38a2b0
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
1 0x39b034
1 0x38b528
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
2 0x38c4f4
2 0x38a2b0
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
1 0x38c548
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x38c620
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 __compare_and_swap32b
1 __compare_and_swap32b
1 0x38c644
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
2 0x499a28
1 0x396268
1 0x38a2b0
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x39628c
1 0x3957dc
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
7 0x38c708
7 0x38a1b4
7 0x38a140
7 0x38a04c
7 IsHandleValid
7 RecoverHandle
7 FindHandleForPtrFromPool
7 TSReleaseReader
7 TSReleaseReader
5 0x38a1b4
5 0x38a140
5 0x38a04c
5 IsHandleValid
5 RecoverHandle
5 FindHandleForPtrFromPool
5 TSReleaseReader
5 TSReleaseReader
5 0x3a726c
2 0x38c620
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
2 0x38c68c
2 0x39b034
2 0x38b528
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
1 0x38c548
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
5 0x3a72a4
2 0x38c644
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 dyld_stub_OSAtomicCompareAndSwap32Barrier
1 dyld_stub_OSAtomicCompareAndSwap32Barrier
2 0x38c68c
2 0x39afd0
2 0x38a2b0
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
1 0x38c620
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
4 0x3a727c
3 0x38c68c
1 0x39afd0
1 0x38a2b0
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x39affc
1 GetKeyboardFocus
1 HIViewGetFocus
1 HasNecessaryContentRootForWindow(OpaqueWindowPtr*)
1 HIView::GetNonCompositedRootForWindow(OpaqueWindowPtr*)
1
HIView::GetNonCompositedRootForWindow(OpaqueWindowPtr*)
1 0x39b034
1 0x38b528
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x38c4f4
1 0x38a2b0
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
4 0x3a7294
4 0x38c68c
2 0x39afd0
2 0x38a2b0
2 0x38a1b4
2 0x38a140
2 0x38a04c
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
2 0x39b034
2 0x38b528
2 IsHandleValid
2 RecoverHandle
2 FindHandleForPtrFromPool
2 TSReleaseReader
2 TSReleaseReader
2 0x38a2b4
2 0x38a2b4
2 0x747970
2 0x747970
2 HIObject::IsOfClass(HIObjectClass*)
2 HIObject::IsOfClass(HIObjectClass*)
2 LockPortList
1 dyld_stub_OSAtomicCompareAndSwap32
1 dyld_stub_OSAtomicCompareAndSwap32
1 dyld_stub_pthread_self
1 dyld_stub_pthread_self
1 0x36e474
1 0x36e474
1 0x38a184
1 0x38a184
1 0x38a1b8
1 0x38a1b8
1 0x38c6d0
1 0x38a1b4
1 0x38a140
1 0x38a04c
1 IsHandleValid
1 RecoverHandle
1 FindHandleForPtrFromPool
1 TSReleaseReader
1 TSReleaseReader
1 0x39af9c
1 0x39af9c
1 0x39afd4
1 0x39afd4
1 0x4390b0
1 0x4390b0
1 0x44c52c
1 GetScrapFlavorSize
1 GetFlavorDataAndOrSize(OpaqueScrap*, unsigned long, long*,
void*)
1 PasteboardCopyItemFlavorData
1 TranslationPerformForData
1 CreateTEXTFromNeXTPlainASCIIPasteboardType(__CFData
const*, __CFData const**)
1 CorePasteboardTextMungerWithData(__CFData const*,
unsigned char, unsigned char)
1 CorePasteboardTextMungerWithData(__CFData const*,
unsigned char, unsigned char)
1 0x622cc0
1 0x622cc0
1 0x6e8458
1 0x6e8458
1 0x747128
1 0x747128
1 0x7475f0
1 0x7475f0
1 GetHandleSize
1 GetHandleSize
1 GetWindowData(OpaqueWindowPtr*)
1 HIObject::IsRefValid(void*)
1 HIObject::IsRefValid(void*)
1 GetWindowDataQuietly(OpaqueWindowPtr*)
1 GetWindowDataQuietly(OpaqueWindowPtr*)
1 HIRectToQDRect
1 HIRectToQDRect
1 IsValidPort
1 IsValidPort
1 LMGetMemErr
1 GetThreadGlobals
1 GetThreadGlobals
1 SetThreadPort
1 SetThreadPort
1328 Thread_2603
1328 _pthread_start
1328 CAPThread::Entry(CAPThread*)
1328 HALRunLoop::OwnThread(void*)
1328 CFRunLoopRunSpecific
1328 mach_msg
1328 mach_msg_trap
1328 mach_msg_trap
Total number in stack (recursive counted multiple, when >=5):
50 FindHandleForPtrFromPool
50 RecoverHandle
48 IsHandleValid
47 TSReleaseReader
39 0x38a04c
32 0x38a140
32 0x38a1b4
16 0x38a2b0
10 0x38c68c
10 0x39b034
9 0x38b528
9 0x39afd0
8 0x38c620
7 0x38c4f4
6 0x38c548
5 0x38c644
Sort by top of stack, same collapsed (when >= 5):
mach_msg_trap 1491
FindHandleForPtrFromPool 1027
TSReleaseReader 98
Sample analysis of process 7131 written to file /dev/stdout