1 #include "TestCommon.h"
3 #include "nsCRT.h" /* should be "plstr.h"? */
5 #include "nsIServiceManager.h"
6 #include "nsIComponentRegistrar.h"
7 #include "nsISupportsArray.h"
9 static nsIIOService
*gIOService
= nsnull
;
11 //-----------------------------------------------------------------------------
14 load_sync_1(nsISupports
*element
, void *data
)
16 nsCOMPtr
<nsIInputStream
> stream
;
17 nsCOMPtr
<nsIURI
> uri( do_QueryInterface(element
) );
21 rv
= NS_OpenURI(getter_AddRefs(stream
), uri
, gIOService
);
23 uri
->GetAsciiSpec(spec
);
24 fprintf(stderr
, "*** failed opening %s [rv=%x]\n", spec
.get(), rv
);
32 rv
= stream
->Read(buf
, sizeof(buf
), &bytesRead
);
33 if (NS_FAILED(rv
) || bytesRead
== 0) {
35 uri
->GetAsciiSpec(spec
);
36 fprintf(stderr
, "*** failed reading %s [rv=%x]\n", spec
.get(), rv
);
46 load_sync(nsISupportsArray
*urls
)
48 urls
->EnumerateForwards(load_sync_1
, nsnull
);
52 //-----------------------------------------------------------------------------
54 static int gRequestCount
= 0;
56 class MyListener
: public nsIStreamListener
60 NS_DECL_NSIREQUESTOBSERVER
61 NS_DECL_NSISTREAMLISTENER
64 virtual ~MyListener() {}
67 NS_IMPL_ISUPPORTS2(MyListener
, nsIStreamListener
, nsIRequestObserver
)
70 MyListener::OnStartRequest(nsIRequest
*req
, nsISupports
*ctx
)
76 MyListener::OnDataAvailable(nsIRequest
*req
, nsISupports
*ctx
,
77 nsIInputStream
*stream
,
78 PRUint32 offset
, PRUint32 count
)
82 PRUint32 n
, bytesRead
;
84 n
= PR_MIN(count
, sizeof(buf
));
85 rv
= stream
->Read(buf
, n
, &bytesRead
);
96 MyListener::OnStopRequest(nsIRequest
*req
, nsISupports
*ctx
, nsresult status
)
98 if (NS_FAILED(status
)) {
101 fprintf(stderr
, "*** failed loading %s [reason=%x]\n", spec
.get(), status
);
103 if (--gRequestCount
== 0) {
104 // post shutdown event
111 load_async_1(nsISupports
*element
, void *data
)
113 nsCOMPtr
<nsIURI
> uri( do_QueryInterface(element
) );
117 MyListener
*listener
= new MyListener();
121 nsresult rv
= NS_OpenURI(listener
, nsnull
, uri
, gIOService
);
122 NS_RELEASE(listener
);
123 if (NS_SUCCEEDED(rv
))
126 printf(">> NS_OpenURI failed [rv=%x]\n", rv
);
131 load_async(nsISupportsArray
*urls
)
133 urls
->EnumerateForwards(load_async_1
, nsnull
);
139 //-----------------------------------------------------------------------------
142 read_file(const char *fname
, nsISupportsArray
*urls
)
144 FILE *fp
= fopen(fname
, "r");
146 printf("failed opening file: %s\n", fname
);
147 return NS_ERROR_FAILURE
;
150 nsCOMPtr
<nsIURI
> uri
;
153 while (fgets(buf
, sizeof(buf
), fp
)) {
154 // remove trailing newline
155 buf
[strlen(buf
) - 1] = 0;
156 rv
= NS_NewURI(getter_AddRefs(uri
), buf
, nsnull
, gIOService
);
158 printf("*** ignoring malformed uri: %s\n", buf
);
160 //nsXPIDLCString spec;
161 //uri->GetSpec(getter_Copies(spec));
162 //printf("read url: %s\n", spec.get());
163 urls
->AppendElement(uri
);
171 //-----------------------------------------------------------------------------
176 printf("usage: TestPerf [-sync|-async] <file-of-urls>\n");
180 main(int argc
, char **argv
)
182 if (test_common_init(&argc
, &argv
) != 0)
193 if (PL_strcasecmp(argv
[1], "-sync") == 0)
195 else if (PL_strcasecmp(argv
[1], "-async") == 0)
202 nsCOMPtr
<nsIServiceManager
> servMan
;
203 NS_InitXPCOM2(getter_AddRefs(servMan
), nsnull
, nsnull
);
204 nsCOMPtr
<nsIComponentRegistrar
> registrar
= do_QueryInterface(servMan
);
205 NS_ASSERTION(registrar
, "Null nsIComponentRegistrar");
206 registrar
->AutoRegister(nsnull
);
208 // cache the io service
210 nsCOMPtr
<nsIIOService
> ioserv( do_GetIOService() );
211 NS_ADDREF(gIOService
= ioserv
);
214 nsCOMPtr
<nsISupportsArray
> urls
;
215 rv
= NS_NewISupportsArray(getter_AddRefs(urls
));
216 if (NS_FAILED(rv
)) return -1;
218 rv
= read_file(argv
[2], urls
);
220 printf("failed reading file-of-urls\n");
225 urls
->Count(&urlCount
);
227 PRIntervalTime start
= PR_IntervalNow();
230 rv
= load_sync(urls
);
232 rv
= load_async(urls
);
235 printf("load failed\n");
239 PRIntervalTime end
= PR_IntervalNow();
240 fprintf(stderr
, "read: %u urls; total time: %u milliseconds\n",
242 PR_IntervalToMilliseconds(end
- start
));
244 NS_RELEASE(gIOService
);