Between Safari 3.0.2 Beta and ToT, signing into newsgator.com (using their 'beta' reader, haven't tried the 'classic' one) has slowed significantly. On my 1.2GHz G4 machine, a local debug build of r24761 hangs Safari for about a minute, the latest nightly (also r24761) for about 30 seconds while Safari 3.0.2 Beta only takes roughly 5 seconds. My significantly faster Windows box also shows a large slowdown between 3.0.2 Beta and ToT. I've created an account with the username/password of webkit/webkit for testing. The number of feeds does not seem to matter - the WebKit test account only has 1 feed while my personal one has about 85 with roughly the same hang time for each. r24761 debug sample: Sort by top of stack, same collapsed (when >= 5): mach_msg_trap 863 select 288 semaphore_wait_signal_trap 288 KJS::PropertyMap::mark() const 56 KJS::JSImmediate::isImmediate(KJS::JSValue const*) 28 KJS::Collector::collect() 26 KJS::JSImmediate::getTag(KJS::JSValue const*) 23 KJS::JSValue::mark() 20 KJS::Collector::cellBlock(KJS::JSCell const*) 16 KJS::Collector::cellOffset(KJS::JSCell const*) 13 KJS::CollectorBitmap::get(unsigned long) const 13 KJS::Collector::isCellMarked(KJS::JSCell const*) 11 KJS::JSValue::asCell() const 11 KJS::JSValue::marked() const 9 KJS::JSValue::asCell() 8 KJS::Collector::markCell(KJS::JSCell*) 7 KJS::JSCell::marked() const 7 KJS::ArrayInstance::mark() 5 KJS::Collector::cellBlock(KJS::JSCell*) 5 KJS::CollectorBitmap::set(unsigned long) 5
Created attachment 15730 [details] full sample
<rdar://problem/5368990>
The large string extra cost thing is making it garbage collect about ever ninth allocate (and unfortunately it does 120,000 allocates). It ends up spending almost 5 seconds in the garbage collector while signing in. Maybe the cost for the big strings should be a bit lower? (I tried dividing the costs by 10 and the garbage collection time dropped to under a half second, but I suppose memory consumption was higher.)
Fixed by Maciej in <http://trac.webkit.org/projects/webkit/changeset/24873>.