Toggle navigation
Toggle navigation
This project
Loading...
Sign in
iOS
/
asi-http-request
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
Ben Copsey
2010-01-06 11:57:16 +0000
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
ac1eafa59e2dc46c39945da271bfa4543e01a870
ac1eafa5
1 parent
b3de943a
Added updated performance tests, ready for 1.5 showdown
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
138 additions
and
9 deletions
Classes/ASIHTTPRequest.m
Classes/Tests/PerformanceTests.h
Classes/Tests/PerformanceTests.m
Classes/ASIHTTPRequest.m
View file @
ac1eafa
...
...
@@ -21,7 +21,7 @@
#import "ASIInputStream.h"
// Automatically set on build
NSString
*
ASIHTTPRequestVersion
=
@"v1.2-2
4 2009-12-18
"
;
NSString
*
ASIHTTPRequestVersion
=
@"v1.2-2
5 2010-01-06
"
;
// We use our own custom run loop mode as CoreAnimation seems to want to hijack our threads otherwise
static
CFStringRef
ASIHTTPRequestRunMode
=
CFSTR
(
"ASIHTTPRequest"
);
...
...
Classes/Tests/PerformanceTests.h
View file @
ac1eafa
...
...
@@ -10,6 +10,8 @@
#import "ASITestCase.h"
@interface
PerformanceTests
:
ASITestCase
{
NSURL
*
testURL
;
NSDate
*
testStartDate
;
int
requestsComplete
;
NSMutableArray
*
responseData
;
...
...
@@ -19,6 +21,7 @@
-
(
void
)
testASIHTTPRequestAsyncPerformance
;
-
(
void
)
testNSURLConnectionAsyncPerformance
;
@property
(
retain
,
nonatomic
)
NSURL
*
testURL
;
@property
(
retain
,
nonatomic
)
NSDate
*
testStartDate
;
@property
(
assign
,
nonatomic
)
int
requestsComplete
;
@property
(
retain
,
nonatomic
)
NSMutableArray
*
responseData
;
...
...
Classes/Tests/PerformanceTests.m
View file @
ac1eafa
...
...
@@ -9,6 +9,8 @@
#import "PerformanceTests.h"
#import "ASIHTTPRequest.h"
// IMPORTANT - these tests need to be run one at a time!
@interface
NSURLConnectionSubclass
:
NSURLConnection
{
int
tag
;
}
...
...
@@ -21,19 +23,142 @@
@implementation
PerformanceTests
-
(
void
)
setUp
{
[
self
setTestURL
:[
NSURL
URLWithString
:
@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_%28abridged%29.txt"
]];
//[self setTestURL:[NSURL URLWithString:@"http://allseeing-i.com"]];
}
-
(
void
)
testASIHTTPRequestSynchronousPerformance
{
[
self
performSelectorOnMainThread
:
@selector
(
runSynchronousASIHTTPRequests
)
withObject
:
nil
waitUntilDone
:
YES
];
}
-
(
void
)
runSynchronousASIHTTPRequests
{
int
runTimes
=
10
;
NSTimeInterval
times
[
runTimes
];
int
i
;
for
(
i
=
0
;
i
<
runTimes
;
i
++
)
{
NSDate
*
startTime
=
[
NSDate
date
];
ASIHTTPRequest
*
request
=
[
ASIHTTPRequest
requestWithURL
:
testURL
];
//Send the same headers as NSURLRequest
[
request
addRequestHeader
:
@"Pragma"
value
:
@"no-cache"
];
[
request
addRequestHeader
:
@"Accept"
value
:
@"*/*"
];
[
request
addRequestHeader
:
@"Accept-Language"
value
:
@"en/us"
];
[
request
start
];
if
([
request
error
])
{
NSLog
(
@"Request failed - cannot proceed with test"
);
return
;
}
times
[
i
]
=
[[
NSDate
date
]
timeIntervalSinceDate
:
startTime
];
}
NSTimeInterval
bestTime
=
1000
;
NSTimeInterval
worstTime
=
0
;
NSTimeInterval
totalTime
=
0
;
for
(
i
=
0
;
i
<
runTimes
;
i
++
)
{
if
(
times
[
i
]
<
bestTime
)
{
bestTime
=
times
[
i
];
}
if
(
times
[
i
]
>
worstTime
)
{
worstTime
=
times
[
i
];
}
totalTime
+=
times
[
i
];
}
NSLog
(
@"Ran %hi requests in %f seconds (average time: %f secs / best time: %f secs / worst time: %f secs)"
,
runTimes
,
totalTime
,
totalTime
/
runTimes
,
bestTime
,
worstTime
);
}
-
(
void
)
testNSURLConnectionSynchronousPerformance
{
[
self
performSelectorOnMainThread
:
@selector
(
runSynchronousNSURLConnections
)
withObject
:
nil
waitUntilDone
:
YES
];
}
-
(
void
)
runSynchronousNSURLConnections
{
int
runTimes
=
10
;
NSTimeInterval
times
[
runTimes
];
int
i
;
for
(
i
=
0
;
i
<
runTimes
;
i
++
)
{
NSDate
*
startTime
=
[
NSDate
date
];
NSURLResponse
*
response
=
nil
;
NSError
*
error
=
nil
;
NSMutableURLRequest
*
request
=
[
NSMutableURLRequest
requestWithURL
:
testURL
cachePolicy
:
NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval
:
10
];
[
NSURLConnection
sendSynchronousRequest
:
request
returningResponse
:
&
response
error
:&
error
];
if
(
error
)
{
NSLog
(
@"Request failed - cannot proceed with test"
);
return
;
}
times
[
i
]
=
[[
NSDate
date
]
timeIntervalSinceDate
:
startTime
];
}
NSTimeInterval
bestTime
=
1000
;
NSTimeInterval
worstTime
=
0
;
NSTimeInterval
totalTime
=
0
;
for
(
i
=
0
;
i
<
runTimes
;
i
++
)
{
if
(
times
[
i
]
<
bestTime
)
{
bestTime
=
times
[
i
];
}
if
(
times
[
i
]
>
worstTime
)
{
worstTime
=
times
[
i
];
}
totalTime
+=
times
[
i
];
}
NSLog
(
@"Ran %hi requests in %f seconds (average time: %f secs / best time: %f secs / worst time: %f secs)"
,
runTimes
,
totalTime
,
totalTime
/
runTimes
,
bestTime
,
worstTime
);
}
-
(
void
)
testASIHTTPRequestAsyncPerformance
{
[
self
performSelectorOnMainThread
:
@selector
(
startASIHTTPRequests
)
withObject
:
nil
waitUntilDone
:
NO
];
}
-
(
void
)
testQueuedASIHTTPRequestAsyncPerformance
{
[
self
performSelectorOnMainThread
:
@selector
(
startASIHTTPRequestsWithQueue
)
withObject
:
nil
waitUntilDone
:
NO
];
}
-
(
void
)
startASIHTTPRequests
{
bytesDownloaded
=
0
;
[
self
setRequestsComplete
:
0
];
[
self
setTestStartDate
:[
NSDate
date
]];
int
i
;
for
(
i
=
0
;
i
<
5
;
i
++
)
{
ASIHTTPRequest
*
request
=
[
ASIHTTPRequest
requestWithURL
:[
NSURL
URLWithString
:
@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_(abridged).txt"
]];
for
(
i
=
0
;
i
<
10
;
i
++
)
{
ASIHTTPRequest
*
request
=
[
ASIHTTPRequest
requestWithURL
:
testURL
];
//Send the same headers as NSURLRequest
[
request
addRequestHeader
:
@"Pragma"
value
:
@"no-cache"
];
[
request
addRequestHeader
:
@"Accept"
value
:
@"*/*"
];
[
request
addRequestHeader
:
@"Accept-Language"
value
:
@"en/us"
];
[
request
setDelegate
:
self
];
[
request
startAsynchronous
];
}
}
-
(
void
)
startASIHTTPRequestsWithQueue
{
bytesDownloaded
=
0
;
[
self
setRequestsComplete
:
0
];
[
self
setTestStartDate
:[
NSDate
date
]];
int
i
;
NSOperationQueue
*
queue
=
[[[
NSOperationQueue
alloc
]
init
]
autorelease
];
[
queue
setMaxConcurrentOperationCount
:
4
];
for
(
i
=
0
;
i
<
10
;
i
++
)
{
ASIHTTPRequest
*
request
=
[
ASIHTTPRequest
requestWithURL
:
testURL
];
//Send the same headers as NSURLRequest
[
request
addRequestHeader
:
@"Pragma"
value
:
@"no-cache"
];
[
request
addRequestHeader
:
@"Accept"
value
:
@"*/*"
];
[
request
addRequestHeader
:
@"Accept-Language"
value
:
@"en/us"
];
[
request
setUseCookiePersistance
:
NO
];
[
request
setUseSessionPersistance
:
NO
];
[
request
setDelegate
:
self
];
[
queue
addOperation
:
request
];
}
}
-
(
void
)
requestFailed
:
(
ASIHTTPRequest
*
)
request
{
GHFail
(
@"Cannot proceed with ASIHTTPRequest test - a request failed"
);
...
...
@@ -43,8 +168,8 @@
{
bytesDownloaded
+=
[[
request
responseData
]
length
];
requestsComplete
++
;
if
(
requestsComplete
==
5
)
{
NSLog
(
@"ASIHTTPRequest: Completed
5
(downloaded %lu bytes) requests in %f seconds"
,
bytesDownloaded
,[[
NSDate
date
]
timeIntervalSinceDate
:[
self
testStartDate
]]);
if
(
requestsComplete
==
10
)
{
NSLog
(
@"ASIHTTPRequest: Completed
10
(downloaded %lu bytes) requests in %f seconds"
,
bytesDownloaded
,[[
NSDate
date
]
timeIntervalSinceDate
:[
self
testStartDate
]]);
}
}
...
...
@@ -61,8 +186,8 @@
[
self
setResponseData
:[
NSMutableArray
arrayWithCapacity
:
5
]];
int
i
;
for
(
i
=
0
;
i
<
5
;
i
++
)
{
NSURLRequest
*
request
=
[
NSURLRequest
requestWithURL
:
[
NSURL
URLWithString
:
@"http://allseeing-i.com/ASIHTTPRequest/tests/the_great_american_novel_(abridged).txt"
]
cachePolicy
:
NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval
:
10
];
for
(
i
=
0
;
i
<
10
;
i
++
)
{
NSURLRequest
*
request
=
[
NSURLRequest
requestWithURL
:
testURL
cachePolicy
:
NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval
:
10
];
[[
self
responseData
]
addObject
:[
NSMutableData
data
]];
NSURLConnectionSubclass
*
connection
=
[[[
NSURLConnectionSubclass
alloc
]
initWithRequest
:
request
delegate
:
self
startImmediately
:
YES
]
autorelease
];
[
connection
setTag
:
i
];
...
...
@@ -88,11 +213,12 @@
{
bytesDownloaded
+=
[[
responseData
objectAtIndex
:[
connection
tag
]]
length
];
requestsComplete
++
;
if
(
requestsComplete
==
5
)
{
NSLog
(
@"NSURLConnection: Completed
5
(downloaded %lu bytes) requests in %f seconds"
,
bytesDownloaded
,[[
NSDate
date
]
timeIntervalSinceDate
:[
self
testStartDate
]]);
if
(
requestsComplete
==
10
)
{
NSLog
(
@"NSURLConnection: Completed
10
(downloaded %lu bytes) requests in %f seconds"
,
bytesDownloaded
,[[
NSDate
date
]
timeIntervalSinceDate
:[
self
testStartDate
]]);
}
}
@synthesize
testURL
;
@synthesize
requestsComplete
;
@synthesize
testStartDate
;
@synthesize
responseData
;
...
...
Please
register
or
login
to post a comment