Bug 346849: Add a "Save Image as..." entry to the context menu for <canvas>, Original...
[mozilla-central.git] / netwerk / test / TestCachePerformance.js
blob36e772aea2d5f2b2e692e3f8b5bdcf3c3dcfbc7a
1 var DEBUG = true;
3 var clientID = "javascript";
4 var nsICache = Components.interfaces.nsICache;
6 function getCacheService()
8     var nsCacheService = Components.classes["@mozilla.org/network/cache-service;1"];
9     var service = nsCacheService.getService(Components.interfaces.nsICacheService);
10     return service;
13 function createCacheSession(clientID, storagePolicy, streamable)
15     var service = getCacheService();
16     var session = service.createSession(clientID, storagePolicy, streamable);
17     return session;
20 function openCacheEntry(url, mode)
22     var session = createCacheSession(clientID, nsICache.STORE_ON_DISK, true);
23     var entry = session.openCacheEntry(url, mode);
24     return entry;
27 function dumpLeaks()
29     var leakDetector = Components.classes["@mozilla.org/xpcom/leakdetector;1"].getService(Components.interfaces.nsILeakDetector);
30     leakDetector.dumpLeaks();
33 function wrapInputStream(input)
35     var nsIScriptableInputStream = Components.interfaces.nsIScriptableInputStream;
36     var factory = Components.classes["@mozilla.org/scriptableinputstream;1"];
37     var wrapper = factory.createInstance(nsIScriptableInputStream);
38     wrapper.init(input);
39     return wrapper;
42 function getIOService()
44     var CID = Components.classes["@mozilla.org/network/io-service;1"];
45     var service = CID.getService(Components.interfaces.nsIIOService);
46     return service;
49 function downloadHTTP(spec)
51     var ioService = getIOService();
52     var uri = ioService.newURI(spec, null, null);
53     var channel = ioService.newChannelFromURI(uri);
54     var input = wrapInputStream(channel.open());
55     var data = input.read(input.available());
56     input.close();
57     return data;
60 function download(url)
62     var data = "";
63     var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 65536);
64     var stream = url.getContent();
65     while (true) {
66         var count = stream.read(buffer);
67         if (count <= 0)
68             break;
69         var str = new java.lang.String(buffer, 0, count);
70         data += str;
71     }
72     stream.close();
73     return data;
76 function write(url, data)
78     var key = url.toString();
79     var outputEntry = openCacheEntry(key, nsICache.ACCESS_WRITE);
80     var output = outputEntry.transport.openOutputStream(0, -1, 0);
81     var count = output.write(data, data.length);
83     // store some metadata.
84     outputEntry.setMetaDataElement("size", data.length);
86     output.close();
87     outputEntry.markValid();
88     outputEntry.close();
90     return count;
93 function read(url)
95     var key = url.toString();
96     var inputEntry = openCacheEntry(key, nsICache.ACCESS_READ);
97     var input = wrapInputStream(inputEntry.transport.openInputStream(0, -1, 0));
98     var data = input.read(input.available());
99     input.close();
100     inputEntry.close();
101     return data;
104 function readMetaData(url, element)
106     var key = url.toString();
107     var inputEntry = openCacheEntry(key, nsICache.ACCESS_READ);
108     var metadata = inputEntry.getMetaDataElement(element);
109     inputEntry.close();
110     return metadata;
113 function doom(url)
115     var key = url.toString();
116     var doomedEntry = openCacheEntry(key, nsICache.ACCESS_READ_WRITE);
117     doomedEntry.doom();
118     doomedEntry.close();
121 function test()
123     // download some real content from the network.
124     var url = new java.net.URL("http://www.mozilla.org");
125     var key = url.toString();
126     var data = download(url);
127     
128     if (write(url, data) == data.length)
129         print("disk cache write works!");
130     else
131         print("disk cache write broken!");
133     if (read(url) == data)
134         print("disk cache read works!");
135     else
136         print("disk cache read broken!");
137         
138     if (readMetaData(url, "size") == data.length)
139         print("disk cache metadata works!");
140     else
141         print("disk cache metadata broken!");
144 function median(array)
146     var cmp = function(x, y) { return x - y; }
147     array.sort(cmp);
148     var middle = Math.floor(array.length / 2);
149     return array[middle];
152 function sum(array)
154     var s = 0;
155     var len = array.length;
156     for (var i = 0; i < len; ++i)
157         s += array[i];
158     return s;
161 function time()
163     var N = 50;
164     var System = java.lang.System;
165     var url = new java.net.URL("http://www.mozilla.org");
166     var downloadTimes = new Array();
167     for (var i = 0; i < N; ++i) {
168         var begin = System.currentTimeMillis();
169         download(url);
170         var end = System.currentTimeMillis();
171         downloadTimes.push(end - begin);
172     }
173     var downloadTotal = sum(downloadTimes);
174     var downloadMean = downloadTotal / N;
175     var downloadMedian = median(downloadTimes);
176     print("" + N + " downloads took " + downloadTotal + " milliseconds.");
177     print("mean = " + downloadMean + " milliseconds.");
178     print("median = " + downloadMedian + " milliseconds.");
180     var readTimes = new Array();
181     for (var i = 0; i < N; ++i) {
182         var begin = System.currentTimeMillis();
183         read(url);
184         var end = System.currentTimeMillis();
185         readTimes.push(end - begin);
186     }
187     var readTotal = sum(readTimes);
188     var readMean = readTotal / N;
189     var readMedian = median(readTimes);
190     print("" + N + " reads took " + readTotal + " milliseconds.");
191     print("mean = " + readMean + " milliseconds.");
192     print("median = " + readMedian + " milliseconds.");
195 // load the cache service before doing anything with Java...
196 getCacheService();
198 if (DEBUG) {
199     print("cache service loaded.");
200 } else {
201     print("running disk cache test.");
202     test();
203     print("disk cache test complete.");