Author: ericwa
Date: Thu Mar 20 01:44:43 2014
New Revision: 10590
URL: http://svn.gna.org/viewcvs/etoile?rev=10590&view=rev
Log:
Benchmark: Add test to check the COAttributedString
-substringItemGraphWithRange: performance
Added:
trunk/Etoile/Frameworks/CoreObject/Benchmark/TestAttributedStringDiffPerformance.m
Modified:
trunk/Etoile/Frameworks/CoreObject/CoreObject.xcodeproj/project.pbxproj
Added:
trunk/Etoile/Frameworks/CoreObject/Benchmark/TestAttributedStringDiffPerformance.m
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/Benchmark/TestAttributedStringDiffPerformance.m?rev=10590&view=auto
==============================================================================
---
trunk/Etoile/Frameworks/CoreObject/Benchmark/TestAttributedStringDiffPerformance.m
(added)
+++
trunk/Etoile/Frameworks/CoreObject/Benchmark/TestAttributedStringDiffPerformance.m
Thu Mar 20 01:44:43 2014
@@ -0,0 +1,93 @@
+/*
+ Copyright (C) 2014 Eric Wasylishen
+
+ Date: March 2014
+ License: MIT (see COPYING)
+ */
+
+#ifndef GNUSTEP
+
+#import <Foundation/Foundation.h>
+#import <UnitKit/UnitKit.h>
+#import "COEditingContext.h"
+#import "TestCommon.h"
+#import "COContainer.h"
+#import "BenchmarkCommon.h"
+#import "TestAttributedStringCommon.h"
+
+@interface TestAttributedStringDiffPerformance : EditingContextTestCase
<UKTest>
+@end
+
+@implementation TestAttributedStringDiffPerformance
+
+- (COObjectGraphContext *) make1KChunkAttributedString
+{
+ COObjectGraphContext *result = [COObjectGraphContext new];
+ COAttributedString *attrStr = [[COAttributedString alloc]
initWithObjectGraphContext: result];
+ [result setRootObject: attrStr];
+
+ NSMutableArray *chunksArray = [NSMutableArray new];
+
+ for (NSUInteger i=0; i<1000; i++)
+ {
+ COAttributedStringChunk *chunk = [[COAttributedStringChunk
alloc] initWithObjectGraphContext: result];
+ chunk.text = (i % 2 == 0) ? @"xxx" : @"yyy";
+ [chunksArray addObject: chunk];
+ }
+
+ attrStr.chunks = chunksArray;
+
+ return result;
+}
+
+- (NSTimeInterval) timeToCopyObjectGraph: (COObjectGraphContext *)ctx
+{
+ NSDate *start = [NSDate date];
+
+ COObjectGraphContext *tempCtx = [COObjectGraphContext new];
+ (void) [[COCopier new] copyItemWithUUID: [ctx rootItemUUID] fromGraph:
ctx toGraph: tempCtx];
+
+ NSTimeInterval time = [[NSDate date] timeIntervalSinceDate: start];
+ return time;
+}
+
+- (NSTimeInterval) timeToDiffAttributedString: (COAttributedString *)as1
+ withAttributedString:
(COAttributedString *)as2
+{
+ NSDate *start = [NSDate date];
+
+ (void) [[COAttributedStringDiff alloc] initWithFirstAttributedString:
as1
+
secondAttributedString: as2
+
source: nil];
+
+ NSTimeInterval time = [[NSDate date] timeIntervalSinceDate: start];
+ return time;
+}
+
+- (void) testDiffPerformance
+{
+ COObjectGraphContext *ctx1 = [self make1KChunkAttributedString];
+ COObjectGraphContext *ctx2 = [self make1KChunkAttributedString];
+
+ COAttributedString *as1 = [ctx1 rootObject];
+ COAttributedString *as2 = [ctx2 rootObject];
+
+ [self appendHTMLString: @"<I>test</I>" toAttributedString: as2];
+
+ NSTimeInterval diffTime = [self timeToDiffAttributedString: as1
withAttributedString: as2];
+ NSTimeInterval copyTime = [self timeToCopyObjectGraph: ctx1];
+
+ double diffTimesFaster = copyTime / diffTime;
+ UKTrue(diffTimesFaster >= 5);
+
+ NSLog(@"COAttributedStringDiff diff with a trivial insertion and %d
chunks took %d ms. Copying %d objects took %d ms. Expected diff to be at least
5x faster than copy, was %f x faster.",
+ (int)[[as1 chunks] count],
+ (int)(diffTime * 1000),
+ (int)[[ctx1 itemUUIDs] count],
+ (int)(copyTime * 1000),
+ diffTimesFaster);
+}
+
+@end
+
+#endif
Modified:
trunk/Etoile/Frameworks/CoreObject/CoreObject.xcodeproj/project.pbxproj
URL:
http://svn.gna.org/viewcvs/etoile/trunk/Etoile/Frameworks/CoreObject/CoreObject.xcodeproj/project.pbxproj?rev=10590&r1=10589&r2=10590&view=diff
==============================================================================
--- trunk/Etoile/Frameworks/CoreObject/CoreObject.xcodeproj/project.pbxproj
(original)
+++ trunk/Etoile/Frameworks/CoreObject/CoreObject.xcodeproj/project.pbxproj
Thu Mar 20 01:44:43 2014
@@ -185,6 +185,7 @@
6646978017CE7E2600A1B767 /* COSynchronizationServer.m in
Sources */ = {isa = PBXBuildFile; fileRef = 6646977E17CE7E2600A1B767 /*
COSynchronizationServer.m */; };
6646982E17D1C50800A1B767 /* COSQLiteStore+Private.h in Headers
*/ = {isa = PBXBuildFile; fileRef = 6646982D17D1C50800A1B767 /*
COSQLiteStore+Private.h */; settings = {ATTRIBUTES = (Public, ); }; };
6646985A17D3C55600A1B767 /* COObjectGraphContext+Private.h in
Headers */ = {isa = PBXBuildFile; fileRef = 6646985917D3C55500A1B767 /*
COObjectGraphContext+Private.h */; settings = {ATTRIBUTES = (Public, ); }; };
+ 66488DFE18DA41B9009F4C55 /*
TestAttributedStringDiffPerformance.m in Sources */ = {isa = PBXBuildFile;
fileRef = 66488DEF18DA3F6D009F4C55 /* TestAttributedStringDiffPerformance.m */;
};
664E076E18C95BF700CBFF74 /* 1a.json in CopyFiles */ = {isa =
PBXBuildFile; fileRef = 664E075C18C9592700CBFF74 /* 1a.json */; };
664E076F18C95BF900CBFF74 /* 1b.json in CopyFiles */ = {isa =
PBXBuildFile; fileRef = 664E075D18C9592700CBFF74 /* 1b.json */; };
664F279A188E2DC900DF36FC /* TestSynchronizerCommon.m in Sources
*/ = {isa = PBXBuildFile; fileRef = 664F2799188E2DC900DF36FC /*
TestSynchronizerCommon.m */; };
@@ -273,6 +274,7 @@
66B1FC6918727D7E00745859 /* TestAttributedStringHistory.m in
Sources */ = {isa = PBXBuildFile; fileRef = 66B1FC6818727D7E00745859 /*
TestAttributedStringHistory.m */; };
66B1FC72187377ED00745859 /* TestAttributedString.m in Sources
*/ = {isa = PBXBuildFile; fileRef = 66B1FC71187377ED00745859 /*
TestAttributedString.m */; };
66B6DC5C187A020900870370 /* TestDiffManager.m in Sources */ =
{isa = PBXBuildFile; fileRef = 66B6DC5B187A020900870370 /* TestDiffManager.m
*/; };
+ 66BA3D4A18DA6C4B00641D40 /* TestAttributedStringCommon.m in
Sources */ = {isa = PBXBuildFile; fileRef = 660EE3B1186E3DA600E8C22C /*
TestAttributedStringCommon.m */; };
66BBB3BC18516ABC005430B1 /* TestItemStableSerialization.m in
Sources */ = {isa = PBXBuildFile; fileRef = 66BBB3BB18516ABC005430B1 /*
TestItemStableSerialization.m */; };
66BDC4AF17B6ED27003B0EDA /* COBranchInfo.h in Headers */ = {isa
= PBXBuildFile; fileRef = 66C3670917B5F9AF009ACF2F /* COBranchInfo.h */;
settings = {ATTRIBUTES = (Public, ); }; };
66BDC4B017B6ED27003B0EDA /* COPersistentRootInfo.h in Headers
*/ = {isa = PBXBuildFile; fileRef = 66C3670D17B5FA0D009ACF2F /*
COPersistentRootInfo.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -741,6 +743,7 @@
6646977E17CE7E2600A1B767 /* COSynchronizationServer.m */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc;
lineEnding = 0; name = COSynchronizationServer.m; path =
Synchronization/COSynchronizationServer.m; sourceTree = "<group>";
xcLanguageSpecificationIdentifier = xcode.lang.objc; };
6646982D17D1C50800A1B767 /* COSQLiteStore+Private.h */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name =
"COSQLiteStore+Private.h"; path = "Store/COSQLiteStore+Private.h"; sourceTree =
"<group>"; };
6646985917D3C55500A1B767 /* COObjectGraphContext+Private.h */ =
{isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h;
name = "COObjectGraphContext+Private.h"; path =
"Core/COObjectGraphContext+Private.h"; sourceTree = "<group>"; };
+ 66488DEF18DA3F6D009F4C55 /*
TestAttributedStringDiffPerformance.m */ = {isa = PBXFileReference;
fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name =
TestAttributedStringDiffPerformance.m; path =
Benchmark/TestAttributedStringDiffPerformance.m; sourceTree = "<group>"; };
664E075C18C9592700CBFF74 /* 1a.json */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path =
1a.json; sourceTree = "<group>"; };
664E075D18C9592700CBFF74 /* 1b.json */ = {isa =
PBXFileReference; fileEncoding = 4; lastKnownFileType = text.json; path =
1b.json; sourceTree = "<group>"; };
664F2798188E2DC900DF36FC /* TestSynchronizerCommon.h */ = {isa
= PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path
= TestSynchronizerCommon.h; sourceTree = "<group>"; };
@@ -1342,6 +1345,7 @@
66E6823F18B972C4003294EB /* BenchmarkCommon.h
*/,
66E6824018B972C4003294EB /* BenchmarkCommon.m
*/,
66E6826018BA9B5D003294EB /*
TestObjectPerformance.m */,
+ 66488DEF18DA3F6D009F4C55 /*
TestAttributedStringDiffPerformance.m */,
);
name = Benchmark;
sourceTree = "<group>";
@@ -2241,6 +2245,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 66BA3D4A18DA6C4B00641D40 /*
TestAttributedStringCommon.m in Sources */,
+ 66488DFE18DA41B9009F4C55 /*
TestAttributedStringDiffPerformance.m in Sources */,
664F27A1188E69C000DF36FC /*
COSynchronizerFakeMessageTransport.m in Sources */,
664F27A0188E69AD00DF36FC /*
TestSynchronizerCommon.m in Sources */,
66E6824118B972C4003294EB /* BenchmarkCommon.m
in Sources */,
_______________________________________________
Etoile-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/etoile-cvs