Moving the delegate send inside does not matter. Reverting the changes in
BDSKFileSearchIndex.m fixes the beachball. Attached a sample.

Christiaan

On Jan 20, 2008 8:05 PM, Christiaan Hofman <[EMAIL PROTECTED]> wrote:

> I do see it getting BDSKFileSearch. But the changes in
> BDSKFileSearchIndex give me the beachball. Probably because many
> delegate are send, between threads.
>
> Haven't tried moving sampling and moving the delegate send.
>
> Christiaan
>
> On 20 Jan 2008, at 7:54 PM, Adam R. Maxwell wrote:
>
> > Odd; it's /much/ faster here whether the files are indexed or not,
> > probably because it no longer uses waitUntilDone:YES.
> >
> > Can you try moving the delegate send in the BDSKSearch inside the test
> > for time?  That should make it cheaper.  What does sampling show?
> >
> > On Jan 20, 2008, at 10:49 AM, Christiaan Hofman wrote:
> >
> >> I get a serious beach ball after these changes.
> >>
> >> Christiaan
> >>
> >> On 20 Jan 2008, at 7:22 PM, [EMAIL PROTECTED] wrote:
> >>
> >>> Revision: 12597
> >>>          http://bibdesk.svn.sourceforge.net/bibdesk/?
> >>> rev=12597&view=rev
> >>> Author:   amaxwell
> >>> Date:     2008-01-20 10:22:13 -0800 (Sun, 20 Jan 2008)
> >>>
> >>> Log Message:
> >>> -----------
> >>> Throttle search/flush in the BDSKSearch so we can just send
> >>> delegate messages in the index.  This gives good progress bar
> >>> updates without killing indexing.
> >>>
> >>> Modified Paths:
> >>> --------------
> >>>    trunk/bibdesk/BDSKFileSearch.h
> >>>    trunk/bibdesk/BDSKFileSearch.m
> >>>    trunk/bibdesk/BDSKFileSearchIndex.m
> >>>
> >>> Modified: trunk/bibdesk/BDSKFileSearch.h
> >>> ===================================================================
> >>> --- trunk/bibdesk/BDSKFileSearch.h  2008-01-20 16:20:14 UTC (rev
> >>> 12596)
> >>> +++ trunk/bibdesk/BDSKFileSearch.h  2008-01-20 18:22:13 UTC (rev
> >>> 12597)
> >>> @@ -66,6 +66,7 @@
> >>>
> >>>     BDSKSearchPrivateIvars *data;
> >>>     id delegate;
> >>> +    CFAbsoluteTime lastUpdateTime;
> >>> }
> >>>
> >>> /*
> >>>
> >>> Modified: trunk/bibdesk/BDSKFileSearch.m
> >>> ===================================================================
> >>> --- trunk/bibdesk/BDSKFileSearch.m  2008-01-20 16:20:14 UTC (rev
> >>> 12596)
> >>> +++ trunk/bibdesk/BDSKFileSearch.m  2008-01-20 18:22:13 UTC (rev
> >>> 12597)
> >>> @@ -87,6 +87,7 @@
> >>>
> >>>         data = [[BDSKSearchPrivateIvars alloc] init];
> >>>         [self setDelegate:aDelegate];
> >>> +        lastUpdateTime = CFAbsoluteTimeGetCurrent();
> >>>     }
> >>>     return self;
> >>> }
> >>> @@ -125,7 +126,8 @@
> >>>
> >>>         // if there's a search in progress, we'll cancel it and re-
> >>> update
> >>>         // if not, we'll notify the delegate with an empty array,
> >>> since the index is still working
> >>> -        if (NULL != search) {
> >>> +        // throttle the cancel/flush to 10 Hz, since that slows
> >>> down indexing
> >>> +        if (NULL != search && (CFAbsoluteTimeGetCurrent() -
> >>> lastUpdateTime) > 0.1) {
> >>>             [self cancel];
> >>>             [self updateSearchResults];
> >>>         }
> >>> @@ -170,11 +172,13 @@
> >>>     SKIndexRef skIndex = [searchIndex index];
> >>>     NSAssert(NULL != skIndex, @"-[BDSKFileSearchIndex index]
> >>> returned NULL");
> >>>
> >>> -    if (SKIndexFlush(skIndex) ==  FALSE) {
> >>> +    if (NULL == skIndex || SKIndexFlush(skIndex) ==  FALSE) {
> >>>         NSLog(@"failed to flush index %@", searchIndex);
> >>>         return;
> >>>     }
> >>>
> >>> +    lastUpdateTime = CFAbsoluteTimeGetCurrent();
> >>> +
> >>>     SKSearchRef skSearch = SKSearchCreate(skIndex, (CFStringRef)
> >>> searchString, options);
> >>>     [self setSearch:skSearch];
> >>>     CFRelease(skSearch);
> >>>
> >>> Modified: trunk/bibdesk/BDSKFileSearchIndex.m
> >>> ===================================================================
> >>> --- trunk/bibdesk/BDSKFileSearchIndex.m     2008-01-20 16:20:14 UTC
> >>> (rev 12596)
> >>> +++ trunk/bibdesk/BDSKFileSearchIndex.m     2008-01-20 18:22:13 UTC
> >>> (rev 12597)
> >>> @@ -293,10 +293,6 @@
> >>>         id anItem = nil;
> >>>         BDSKMultiValueDictionary *indexedIdentifierURLs =
> >>> [[[BDSKMultiValueDictionary alloc] init] autorelease];
> >>>
> >>> -        // see comment later; may need tuning here since this is
> >>> much faster than adding new docs to the index
> >>> -        const int32_t flushInterval = 100;
> >>> -        int32_t countSinceLastFlush = 10;
> >>> -
> >>>         // update the identifierURLs with the items, find items to
> >>> add and URLs to remove
> >>>         OSMemoryBarrier();
> >>>         while(flags.shouldKeepRunning == 1 && (anItem = [itemEnum
> >>> nextObject])) {
> >>> @@ -326,16 +322,13 @@
> >>>                 @synchronized(self) {
> >>>                     progressValue = (numberIndexed /
> >>> totalObjectCount) * 100;
> >>>                 }
> >>> -                if (countSinceLastFlush-- == 0) {
> >>> -                    // must update before sending the delegate
> >>> message
> >>> -                    pthread_rwlock_wrlock(&rwlock);
> >>> -                    [identifierURLs
> >>> addEntriesFromDictionary:indexedIdentifierURLs];
> >>> -                    pthread_rwlock_unlock(&rwlock);
> >>> -                    [indexedIdentifierURLs removeAllObjects];
> >>> -
> >>> -                    [[OFMessageQueue mainQueue]
> >>> queueSelectorOnce:@selector(searchIndexDidUpdate) forObject:self
> >>> withObject:nil];
> >>> -                    countSinceLastFlush = flushInterval;
> >>> -                }
> >>> +                // must update before sending the delegate message
> >>> +                pthread_rwlock_wrlock(&rwlock);
> >>> +                [identifierURLs
> >>> addEntriesFromDictionary:indexedIdentifierURLs];
> >>> +                pthread_rwlock_unlock(&rwlock);
> >>> +                [indexedIdentifierURLs removeAllObjects];
> >>> +
> >>> +                [self performSelectorOnMainThread:@selector
> >>> (searchIndexDidUpdate) withObject:nil waitUntilDone:NO];
> >>>             }
> >>>
> >>>             OSMemoryBarrier();
> >>> @@ -422,11 +415,7 @@
> >>>
> >>>     NSEnumerator *enumerator = [items objectEnumerator];
> >>>     id anObject = nil;
> >>> -
> >>> -    // This threshold is sort of arbitrary; for small batches,
> >>> frequent updates are better if the delegate has a progress
> >>> indicator, but for large batches (initial indexing), it can kill
> >>> performance to be continually flushing and searching while indexing.
> >>> -    const int32_t flushInterval = [items count] > 20 ? 5 : 1;
> >>> -    int32_t countSinceLastFlush = flushInterval;
> >>> -
> >>> +
> >>>     // Use a local pool since initial indexing can use a fair
> >>> amount of memory, and it's not released until the thread's run loop
> >>> starts
> >>>     NSAutoreleasePool *pool = [NSAutoreleasePool new];
> >>>
> >>> @@ -440,13 +429,10 @@
> >>>             progressValue = (numberIndexed / totalObjectCount) *
> >>> 100;
> >>>         }
> >>>
> >>> -        if (countSinceLastFlush-- == 0) {
> >>> -            [pool release];
> >>> -            pool = [NSAutoreleasePool new];
> >>> -
> >>> -            [self performSelectorOnMainThread:@selector
> >>> (searchIndexDidUpdate) withObject:nil waitUntilDone:NO];
> >>> -            countSinceLastFlush = flushInterval;
> >>> -        }
> >>> +        [pool release];
> >>> +        pool = [NSAutoreleasePool new];
> >>> +
> >>> +        [self performSelectorOnMainThread:@selector
> >>> (searchIndexDidUpdate) withObject:nil waitUntilDone:NO];
> >>>         OSMemoryBarrier();
> >>>     }
> >>>
> >>>
> >>>
> >>> This was sent by the SourceForge.net collaborative development
> >>> platform, the world's largest Open Source development site.
> >>>
> >>> --------------------------------------------------------------------
> >>> --
> >>> ---
> >>> This SF.net email is sponsored by: Microsoft
> >>> Defy all challenges. Microsoft(R) Visual Studio 2008.
> >>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> >>> _______________________________________________
> >>> Bibdesk-commit mailing list
> >>> [EMAIL PROTECTED]
> >>> https://lists.sourceforge.net/lists/listinfo/bibdesk-commit
> >>
> >>
> >> ---------------------------------------------------------------------
> >> ----
> >> This SF.net email is sponsored by: Microsoft
> >> Defy all challenges. Microsoft(R) Visual Studio 2008.
> >> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> >> _______________________________________________
> >> Bibdesk-develop mailing list
> >> Bibdesk-develop@lists.sourceforge.net
> >> https://lists.sourceforge.net/lists/listinfo/bibdesk-develop
> >
> >
> > ----------------------------------------------------------------------
> > ---
> > This SF.net email is sponsored by: Microsoft
> > Defy all challenges. Microsoft(R) Visual Studio 2008.
> > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> > _______________________________________________
> > Bibdesk-develop mailing list
> > Bibdesk-develop@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/bibdesk-develop
>
>

Attachment: Sample of BibDesk.txt.gz
Description: GNU Zip compressed data

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bibdesk-develop mailing list
Bibdesk-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-develop

Reply via email to