From 5ed475eeddc3de4cf473586c6e4479f88e053d28 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Wed, 9 Jun 2010 14:15:27 -0400 Subject: [PATCH] Slightly faster _couldBeKeyEquivalent (1% of runtime in 3000 calls). Performance test included. --- AppKit/CPEvent.j | 27 ++++---- Tests/AppKit/CPKeyEquivalentPerformance.j | 76 +++++++++++++++++++++++ 2 files changed, 89 insertions(+), 14 deletions(-) create mode 100644 Tests/AppKit/CPKeyEquivalentPerformance.j diff --git a/AppKit/CPEvent.j b/AppKit/CPEvent.j index cf62a7597..b2b62fa00 100644 --- a/AppKit/CPEvent.j +++ b/AppKit/CPEvent.j @@ -21,6 +21,7 @@ */ @import +@import "CPText.j" #include "CoreGraphics/CGGeometry.h" @@ -539,22 +540,20 @@ var _CPEventPeriodicEventPeriod = 0, - (BOOL)_couldBeKeyEquivalent { - // FIXME: More cases? Space? - return _type === CPKeyDown && - ((_modifierFlags & (CPCommandKeyMask | CPControlKeyMask) && - [_characters length] > 0) || - [self _hasActionCharacter]); -} + if (_type !== CPKeyDown) + return NO; -- (BOOL)_hasActionCharacter -{ - var characters = [self characters], - characterCount = [characters length]; + var characterCount = _characters.length; + + if (!characterCount) + return NO; + + if (_modifierFlags & (CPCommandKeyMask | CPControlKeyMask)) + return YES; for(var i=0; i +@import +@import +@import + +[CPApplication sharedApplication]; + +@implementation CPKeyEquivalentPerformance : OJTestCase + +- (void)testKeyEquivalentSpeed +{ + var REPEATS = 1000, + theWindow = [[CPWindow alloc] initWithContentRect:CGRectMake(0,0,200,150) + styleMask:CPWindowNotSizable], + contentView = [theWindow contentView], + subView1 = [[CPView alloc] initWithFrame:CGRectMakeZero()], + subView2 = [[CPView alloc] initWithFrame:CGRectMakeZero()], + button1 = [CPButton buttonWithTitle:"when"], + button2 = [CPButton buttonWithTitle:"you have eliminated"], + button3 = [CPButton buttonWithTitle:"the impossible"]; + + [contentView addSubview:subView1]; + [contentView addSubview:subView2]; + [subView1 addSubview:button1]; + [subView2 addSubview:button2]; + [subView2 addSubview:button3]; + + [button1 setTarget:self]; + [button1 setAction:@selector(clicked:)]; + [button1 setKeyEquivalent:"a"]; + [button1 setKeyEquivalentModifierMask:CPControlKeyMask]; + button1.clicks = 0; + + [button2 setTarget:self]; + [button2 setAction:@selector(clicked:)]; + [button2 setKeyEquivalent:"a"]; + [button2 setKeyEquivalentModifierMask:CPAlternateKeyMask|CPCommandKeyMask]; + button2.clicks = 0; + + [button3 setTarget:self]; + [button3 setAction:@selector(clicked:)]; + [button3 setKeyEquivalent:"A"]; + [button3 setKeyEquivalentModifierMask:CPControlKeyMask]; + button3.clicks = 0; + + var start = (new Date).getTime(); + + for (var i=0; i