1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/netwerk/test/TestCachePerformance.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,198 @@ 1.4 +var DEBUG = true; 1.5 + 1.6 +var clientID = "javascript"; 1.7 +var nsICache = Components.interfaces.nsICache; 1.8 + 1.9 +function getCacheService() 1.10 +{ 1.11 + var nsCacheService = Components.classes["@mozilla.org/network/cache-service;1"]; 1.12 + var service = nsCacheService.getService(Components.interfaces.nsICacheService); 1.13 + return service; 1.14 +} 1.15 + 1.16 +function createCacheSession(clientID, storagePolicy, streamable) 1.17 +{ 1.18 + var service = getCacheService(); 1.19 + var session = service.createSession(clientID, storagePolicy, streamable); 1.20 + return session; 1.21 +} 1.22 + 1.23 +function openCacheEntry(url, mode) 1.24 +{ 1.25 + var session = createCacheSession(clientID, nsICache.STORE_ON_DISK, true); 1.26 + var entry = session.openCacheEntry(url, mode); 1.27 + return entry; 1.28 +} 1.29 + 1.30 +function wrapInputStream(input) 1.31 +{ 1.32 + var nsIScriptableInputStream = Components.interfaces.nsIScriptableInputStream; 1.33 + var factory = Components.classes["@mozilla.org/scriptableinputstream;1"]; 1.34 + var wrapper = factory.createInstance(nsIScriptableInputStream); 1.35 + wrapper.init(input); 1.36 + return wrapper; 1.37 +} 1.38 + 1.39 +function getIOService() 1.40 +{ 1.41 + var CID = Components.classes["@mozilla.org/network/io-service;1"]; 1.42 + var service = CID.getService(Components.interfaces.nsIIOService); 1.43 + return service; 1.44 +} 1.45 + 1.46 +function downloadHTTP(spec) 1.47 +{ 1.48 + var ioService = getIOService(); 1.49 + var uri = ioService.newURI(spec, null, null); 1.50 + var channel = ioService.newChannelFromURI(uri); 1.51 + var input = wrapInputStream(channel.open()); 1.52 + var data = input.read(input.available()); 1.53 + input.close(); 1.54 + return data; 1.55 +} 1.56 + 1.57 +function download(url) 1.58 +{ 1.59 + var data = ""; 1.60 + var buffer = java.lang.reflect.Array.newInstance(java.lang.Byte.TYPE, 65536); 1.61 + var stream = url.getContent(); 1.62 + while (true) { 1.63 + var count = stream.read(buffer); 1.64 + if (count <= 0) 1.65 + break; 1.66 + var str = new java.lang.String(buffer, 0, count); 1.67 + data += str; 1.68 + } 1.69 + stream.close(); 1.70 + return data; 1.71 +} 1.72 + 1.73 +function write(url, data) 1.74 +{ 1.75 + var key = url.toString(); 1.76 + var outputEntry = openCacheEntry(key, nsICache.ACCESS_WRITE); 1.77 + var output = outputEntry.transport.openOutputStream(0, -1, 0); 1.78 + var count = output.write(data, data.length); 1.79 + 1.80 + // store some metadata. 1.81 + outputEntry.setMetaDataElement("size", data.length); 1.82 + 1.83 + output.close(); 1.84 + outputEntry.markValid(); 1.85 + outputEntry.close(); 1.86 + 1.87 + return count; 1.88 +} 1.89 + 1.90 +function read(url) 1.91 +{ 1.92 + var key = url.toString(); 1.93 + var inputEntry = openCacheEntry(key, nsICache.ACCESS_READ); 1.94 + var input = wrapInputStream(inputEntry.transport.openInputStream(0, -1, 0)); 1.95 + var data = input.read(input.available()); 1.96 + input.close(); 1.97 + inputEntry.close(); 1.98 + return data; 1.99 +} 1.100 + 1.101 +function readMetaData(url, element) 1.102 +{ 1.103 + var key = url.toString(); 1.104 + var inputEntry = openCacheEntry(key, nsICache.ACCESS_READ); 1.105 + var metadata = inputEntry.getMetaDataElement(element); 1.106 + inputEntry.close(); 1.107 + return metadata; 1.108 +} 1.109 + 1.110 +function doom(url) 1.111 +{ 1.112 + var key = url.toString(); 1.113 + var doomedEntry = openCacheEntry(key, nsICache.ACCESS_READ_WRITE); 1.114 + doomedEntry.doom(); 1.115 + doomedEntry.close(); 1.116 +} 1.117 + 1.118 +function test() 1.119 +{ 1.120 + // download some real content from the network. 1.121 + var url = new java.net.URL("http://www.mozilla.org"); 1.122 + var key = url.toString(); 1.123 + var data = download(url); 1.124 + 1.125 + if (write(url, data) == data.length) 1.126 + print("disk cache write works!"); 1.127 + else 1.128 + print("disk cache write broken!"); 1.129 + 1.130 + if (read(url) == data) 1.131 + print("disk cache read works!"); 1.132 + else 1.133 + print("disk cache read broken!"); 1.134 + 1.135 + if (readMetaData(url, "size") == data.length) 1.136 + print("disk cache metadata works!"); 1.137 + else 1.138 + print("disk cache metadata broken!"); 1.139 +} 1.140 + 1.141 +function median(array) 1.142 +{ 1.143 + var cmp = function(x, y) { return x - y; } 1.144 + array.sort(cmp); 1.145 + var middle = Math.floor(array.length / 2); 1.146 + return array[middle]; 1.147 +} 1.148 + 1.149 +function sum(array) 1.150 +{ 1.151 + var s = 0; 1.152 + var len = array.length; 1.153 + for (var i = 0; i < len; ++i) 1.154 + s += array[i]; 1.155 + return s; 1.156 +} 1.157 + 1.158 +function time() 1.159 +{ 1.160 + var N = 50; 1.161 + var System = java.lang.System; 1.162 + var url = new java.net.URL("http://www.mozilla.org"); 1.163 + var downloadTimes = new Array(); 1.164 + for (var i = 0; i < N; ++i) { 1.165 + var begin = System.currentTimeMillis(); 1.166 + download(url); 1.167 + var end = System.currentTimeMillis(); 1.168 + downloadTimes.push(end - begin); 1.169 + } 1.170 + var downloadTotal = sum(downloadTimes); 1.171 + var downloadMean = downloadTotal / N; 1.172 + var downloadMedian = median(downloadTimes); 1.173 + print("" + N + " downloads took " + downloadTotal + " milliseconds."); 1.174 + print("mean = " + downloadMean + " milliseconds."); 1.175 + print("median = " + downloadMedian + " milliseconds."); 1.176 + 1.177 + var readTimes = new Array(); 1.178 + for (var i = 0; i < N; ++i) { 1.179 + var begin = System.currentTimeMillis(); 1.180 + read(url); 1.181 + var end = System.currentTimeMillis(); 1.182 + readTimes.push(end - begin); 1.183 + } 1.184 + var readTotal = sum(readTimes); 1.185 + var readMean = readTotal / N; 1.186 + var readMedian = median(readTimes); 1.187 + print("" + N + " reads took " + readTotal + " milliseconds."); 1.188 + print("mean = " + readMean + " milliseconds."); 1.189 + print("median = " + readMedian + " milliseconds."); 1.190 +} 1.191 + 1.192 +// load the cache service before doing anything with Java... 1.193 +getCacheService(); 1.194 + 1.195 +if (DEBUG) { 1.196 + print("cache service loaded."); 1.197 +} else { 1.198 + print("running disk cache test."); 1.199 + test(); 1.200 + print("disk cache test complete."); 1.201 +}