[futurebasic] Re: [FB] Slowdown in Leopard?

Message: < previous - next > : Reply : Subscribe : Cleanse
Home   : November 2007 : Group Archive : Group : All Groups

From: John McKernon <mckernonjunk@...>
Date: Mon, 05 Nov 2007 23:10:08 -0500
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