WebKit:
authorsullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Feb 2004 22:50:55 +0000 (22:50 +0000)
committersullivan <sullivan@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Feb 2004 22:50:55 +0000 (22:50 +0000)
        - WebKit changes to allow performance improvements to bookmarks

        Reviewed by Darin.

        * History.subproj/WebHistoryItemPrivate.h:
        added notificationsSuppressed/setNotificationsSuppressed, and setURLString
        * History.subproj/WebHistoryItem.m:
        (-[WebHistoryItem setNotificationsSuppressed:]):
        setter for new flag. When this flag is set, making changes to the WebHistoryItem
        will not cause WebHistoryChanged notifications to be sent. This is a big speedup
        for reading bookmarks from disk, since currently each WebBookmarkLeaf object
        keeps around a WebHistoryItem object that isn't really part of history and thus
        doesn't need to send notifications about history changing.
        (-[WebHistoryItem notificationsSuppressed]):
        getter for new flag
        (-[WebHistoryItem setURLString:]):
        new method, extracted from guts of setURL:; this allows callers (though
        currently only callers at Apple) that have a URL string in hand to set
        it directly on the WebHistoryItem rather than converting to a URL and
        back, both relatively slow operations. Also, doesn't sent a notification
        if notifications are suppressed.
        (-[WebHistoryItem setURL:]):
        now calls extracted method
        (-[WebHistoryItem setAlternateTitle:]):
        doesn't send notification if notifications are suppressed
        (-[WebHistoryItem setOriginalURLString:]):
        ditto
        (-[WebHistoryItem setTitle:]):
        ditto
        (-[WebHistoryItem _setLastVisitedTimeInterval:]):
        ditto

WebBrowser:

        - A number of performance improvements to importing bookmarks. Some but not all of
        them also apply to reading our native bookmarks from disk. When I started this,
        importing bookmarks from Netscape's HTML format was actually slower than importing
        bookmarks from our property list format, hard though that might be to imagine. Now
        importing the HTML format takes about half the time it used to, and now it's about
        40% faster than importing the property list format, at least with my 33,000 bookmark
        sample file (and importing our property list format also sped up).

        Reviewed by Darin.

        * BookmarksController.m:
        (-[BookmarksController mergeBuiltInBookmarksIfNecessary]):
        added count to timing log message
        (-[BookmarksController exportBookmarks:]):
        added timing log message
        (-[BookmarksController importFavoritesFrom:intoBookmarksFolder:settingPrefKey:]):
        added count to timing log message, and commented-out calls to start & stop sampling
        for the next time someone works on this. Also, in the case where we're importing
        from a user-chosen file instead of automatically, bypass the merging code because
        the merging code is unnecessarily complicated for the "just shlurp this pile o'
        bookmarks into a new folder" case.

        * BookmarksViewController.m:
        (-[BookmarksViewController changeAddressForBookmark:to:]):
        Use bestURLStringForUserTypedString here (when user manually edits a URL in the
        outline view) so that we don't have to use it in the general case of setting
        a bookmark's URL string, since it's slow. When programmatically setting a bookmark's
        URL string we can often just use an existing string as-is.

        * FormCompletionController.m:
        (+[FormCompletionController _saveCompletionDB:]):
        Fix the way an #ifdef was declared so it compiles in a deployment build that
        has LOG_DISABLED set to 0.

        * WebBookmarkGroupPrivate.h:
        * WebBookmarkGroup.m:
        (-[WebBookmarkGroup _bookmarkChild:wasAddedToParent:]):
        added this private-ish helper method to avoid creating an array in the case
        where we aren't even going to use it because notifications are suppressed
        (-[WebBookmarkGroup _bookmarkChild:wasRemovedFromParent:]):
        ditto

        * WebBookmarkImporter.m:
        (-[WebBookmarkImporter unescapeHTML:]):
        bail out early if there's no ampersand at all in the string (the normal case), to avoid
        creating a mutable string

        * WebBookmarkLeaf.m:
        (-[WebBookmarkLeaf init]):
        suppress notifications on our private WebHistoryItem
        (-[WebBookmarkLeaf setURLString:]):
        call the new setURLString: method on our private WebHistoryItem instead of converting
        to a URL and then calling setURL: (which then converts back to a string)

        * WebBookmarkList.m:
        (-[WebBookmarkList removeChild:]):
        call new -[WebBookmarkGroup _bookmarkChild:wasRemovedFromParent:] so we don't have to
        create an NSArray here
        (-[WebBookmarkList insertChild:atIndex:]):
        call new -[WebBookmarkGroup _bookmarkChild:wasAddedToParent:] so we don't have to
        create an NSArray here

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@6128 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKit/ChangeLog
WebKit/History.subproj/WebHistoryItem.m
WebKit/History.subproj/WebHistoryItemPrivate.h

index 77a6848069574c2e9963b0d339af8e3c9fafeabd..8a71688e7e72ca4d00ae4633179e057dac6b2eeb 100644 (file)
@@ -1,3 +1,37 @@
+2004-02-27  John Sullivan  <sullivan@apple.com>
+
+        - WebKit changes to allow performance improvements to bookmarks 
+
+        Reviewed by Darin.
+
+        * History.subproj/WebHistoryItemPrivate.h:
+        added notificationsSuppressed/setNotificationsSuppressed, and setURLString
+        * History.subproj/WebHistoryItem.m:
+        (-[WebHistoryItem setNotificationsSuppressed:]):
+        setter for new flag. When this flag is set, making changes to the WebHistoryItem
+        will not cause WebHistoryChanged notifications to be sent. This is a big speedup
+        for reading bookmarks from disk, since currently each WebBookmarkLeaf object
+        keeps around a WebHistoryItem object that isn't really part of history and thus
+        doesn't need to send notifications about history changing.
+        (-[WebHistoryItem notificationsSuppressed]):
+        getter for new flag
+        (-[WebHistoryItem setURLString:]):
+        new method, extracted from guts of setURL:; this allows callers (though
+        currently only callers at Apple) that have a URL string in hand to set
+        it directly on the WebHistoryItem rather than converting to a URL and
+        back, both relatively slow operations. Also, doesn't sent a notification
+        if notifications are suppressed.
+        (-[WebHistoryItem setURL:]):
+        now calls extracted method
+        (-[WebHistoryItem setAlternateTitle:]):
+        doesn't send notification if notifications are suppressed
+        (-[WebHistoryItem setOriginalURLString:]):
+        ditto
+        (-[WebHistoryItem setTitle:]):
+        ditto
+        (-[WebHistoryItem _setLastVisitedTimeInterval:]):
+        ditto
+
 2004-02-26  Chris Blumenberg  <cblu@apple.com>
 
        WebKit side of:
index 0269cafad65f38c9e0fa1e12d6d371c18b13592d..ed7ac4579f5025712dee1457b14914af0073be24 100644 (file)
@@ -47,6 +47,7 @@ NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotificatio
     NSMutableDictionary *pageCache;
     BOOL isTargetItem;
     BOOL alwaysAttemptToUsePageCache;
+    BOOL notificationsSuppressed;
     int visitCount;
     // info used to repost form data
     NSData *formData;
@@ -159,8 +160,10 @@ NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotificatio
     [_private->displayTitle release];
     _private->displayTitle = newDisplayTitle;
 
-    [[NSNotificationCenter defaultCenter]
+    if (!_private->notificationsSuppressed) {
+        [[NSNotificationCenter defaultCenter]
         postNotificationName: WebHistoryItemChangedNotification object: self userInfo: nil];
+    }
 }
 
 
@@ -278,18 +281,24 @@ NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotificatio
     return _private->parent;
 }
 
-- (void)setURL:(NSURL *)URL
+- (void)setURLString:(NSString *)string
 {
-    NSString *string = [URL _web_originalDataAsString];
     if (!(string == _private->URLString || [string isEqual:_private->URLString])) {
         [self _retainIconInDatabase:NO];
         [_private->URLString release];
         _private->URLString = [string copy];
         [self _retainIconInDatabase:YES];
     }
-
-    [[NSNotificationCenter defaultCenter]
+    
+    if (!_private->notificationsSuppressed) {
+        [[NSNotificationCenter defaultCenter]
         postNotificationName: WebHistoryItemChangedNotification object: self userInfo: nil];
+    }
+}
+
+- (void)setURL:(NSURL *)URL
+{
+    [self setURLString:[URL _web_originalDataAsString]];
 }
 
 // The first URL we loaded to get to where this history item points.  Includes both client
@@ -300,8 +309,10 @@ NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotificatio
     [_private->originalURLString release];
     _private->originalURLString = newURL;
 
-    [[NSNotificationCenter defaultCenter]
+    if (!_private->notificationsSuppressed) {
+        [[NSNotificationCenter defaultCenter]
         postNotificationName: WebHistoryItemChangedNotification object: self userInfo: nil];
+    }
 }
 
 - (void)setTitle:(NSString *)title
@@ -315,8 +326,10 @@ NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotificatio
     [_private->title release];
     _private->title = newTitle;
 
-    [[NSNotificationCenter defaultCenter]
+    if (!_private->notificationsSuppressed) {
+        [[NSNotificationCenter defaultCenter]
         postNotificationName: WebHistoryItemChangedNotification object: self userInfo: nil];
+    }
 }
 
 - (void)setTarget:(NSString *)target
@@ -342,8 +355,10 @@ NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotificatio
         _private->visitCount++;
     }
 
-    [[NSNotificationCenter defaultCenter]
+    if (!_private->notificationsSuppressed) {
+        [[NSNotificationCenter defaultCenter]
         postNotificationName: WebHistoryItemChangedNotification object: self userInfo: nil];
+    }
 }
 
 // FIXME:  Remove this accessor and related ivar.
@@ -568,6 +583,16 @@ NSString *WebHistoryItemChangedNotification = @"WebHistoryItemChangedNotificatio
     return _private->alwaysAttemptToUsePageCache;
 }
 
+- (void)setNotificationsSuppressed:(BOOL)flag
+{
+    _private->notificationsSuppressed = flag;
+}
+
+- (BOOL)notificationsSuppressed
+{
+    return _private->notificationsSuppressed;
+}
+
 
 
 static WebWindowWatcher *_windowWatcher;
index 7d1d9b314e83eac6861979e265c14153db529214..0f24358a40b2f56e41623a3856310066cbc0ee35 100644 (file)
@@ -36,6 +36,7 @@
 - (void)_mergeAutoCompleteHints:(WebHistoryItem *)otherItem;
 
 - (void)setURL:(NSURL *)URL;
+- (void)setURLString:(NSString *)string;
 - (void)setOriginalURLString:(NSString *)URL;
 - (void)setTarget:(NSString *)target;
 - (void)setParent:(NSString *)parent;
@@ -56,6 +57,9 @@
 - (void)setAlwaysAttemptToUsePageCache:(BOOL)flag;
 - (BOOL)alwaysAttemptToUsePageCache;
 
+- (void)setNotificationsSuppressed:(BOOL)flag;
+- (BOOL)notificationsSuppressed;
+
 - (NSCalendarDate *)_lastVisitedDate;
 - (void)_setLastVisitedTimeInterval:(NSTimeInterval)time;