// Portions copyright 2012 Google, Inc. // Copyright 2012 Onan Games. All rights reserved. // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are // met: // // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above // copyright notice, this list of conditions and the following // disclaimer in the documentation and/or other materials provided // with the distribution. // * Neither the name of Google Inc. nor the names of its // contributors may be used to endorse or promote products derived // from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
var MandreelBenchmark = new BenchmarkSuite('Mandreel', [16831872, 49852],
[new Benchmark('Mandreel', false, false,
15,
runMandreel,
setupMandreel,
tearDownMandreel,
RMSMandreel,
4)]);
var mandreelSumSquaredPauses = 0; var mandreelSamples = 0; var mandreelSampleTimeStart = 0.0;
function setupMandreel() { // Check for Typed Arrays support, throw error if not. if (!(typeof Uint8Array != "undefined" && typeof Float64Array != "undefined" && typeof (new Uint8Array(0)).subarray != "undefined")) { throw"TypedArrayUnsupported";
}
var my_old_constructors; var my_heap; var my_heap8; var my_heap32; var my_heapNewPos;
function my_mandreel_call_constructors(_ptr, size,stackPos) {
my_heapNewPos = heapNewPos;
my_heap = new ArrayBuffer(mandreel_total_memory);
my_heap8 = new Int8Array(my_heap);
my_heap32 = new Int32Array(my_heap); for (var i=0;i<mandreel_total_memory/4;i++) {
my_heap32[i] = heap32[i];
}
my_old_constructors(_ptr,size,stackPos);
}
var Mandreel_currentTime = 0;
function Date_now() {
Mandreel_currentTime += 16; return Mandreel_currentTime;
}
function Mandreel_checkState() { var sum = 0; for (var i = 0; i < heap32.length; i += 100) {
sum = (sum * 3 + heap32[i]) & 0xFFFFFF;
} if (sum != 8001026) {
alert("Check sum mismatch: expected ???, actual " + sum);
}
}
// Original Mandreel code follows. // Modifications for benchmarking are marked in comments.
//////////////////////////////////////////// function appStartState(state,param)
{ // mandreel.js program is been loaded if ( state == "loadingScript" )
{
}
// mandreel.js program has been loaded if ( state == "scriptLoaded" )
{
}
// loading pack data file if (state == "loadingData")
{ // param bytes loaded
}
// Audio system is been started if ( state == "loadingAudio" )
{
}
// Audio system is ready and the default audio preloading has been done if ( state == "audioLoaded" )
{
}
// Mandreel has been started, render will start automatically if ( state == "ready" )
{ // Hide loading image var canvasElement = Mandreel_document.getElementById('loading'); if ( canvasElement != null )
canvasElement.style.visibility = "hidden";
}
// An error has been produced during the start process and the app must quit if ( state == "error" )
{ if ( param == "webgl_not_found" )
{
window.location = "http://get.webgl.org"; return;
}
alert(param);
}
}
// End of js/main.js file.
// Start of js/mandreelapp.js file.
var mandreelAppMandreelJs = "mandreel.js"; var mandreelAppMandreelJsCompressed = false; var mandreelAppWorkingFolder = "data/js/"; var mandreelAppLog = false; var mandreelAppLocalHost = "http://localhost"; var mandreelAppReadDataFromLocalHost = false; var mandreelAppReadMandreelJsFromLocalHost = false; var mandreelAppHostedAudioServer = null; var mandreelAppHostedAudioUrl = null; var mandrelCurrentFatVersion = "1.4"; var mandreelAppPlatform = "webgl"; var mandreelAppCanvasWidth = 1024; var mandreelAppCanvasHeight = 768; var mandreelAppWidthSrc = 1024; var mandreelAppHeightSrc = 768; var mandreelAppCanvasName = "canvas"; var mandreelAppCanvasDiv = "canvasDiv"; var mandreelAppUseFlashSockets = false; var mandreelAppUsePackAsyncTexture = new Array(); //var mandreelBufferPackAsyncTexture = null; var mandreelAppForceFocus = true; var _imandreel_pause_game = false;
/* The following code was removed for benchmarking:
navigator.pointer = navigator.pointer || navigator.webkitPointer || navigator.mozPointer || null;*/
/* The following code was removed for benchmarking: if (!Date_now) { Date_now = function() { return +new Date(); };
};*/
////////////////////////////////////////////
if (Mandreel_window["console"])
{ if (!Mandreel_window["dump"]) Mandreel_window["dump"] = function dump(str){ if ( mandreelAppLog ) console.log(str) };
} else
{ if (!Mandreel_window["dump"]) Mandreel_window["dump"] = function dump(str){ };
}
//////////////////////////////////////////// var mandreel_packfiledata_name = null; var mandreel_packfiledata_compressed = false; var mandreel_packfiledata_size = 0; var mandreel_total_packtexture_size = 0; var mandreel_total_pogfile_size = 0; var mandreel_loaded_packtexture_size = 0; var mandreel_jslzma_size = 0; var mandreel_swf_size = 0;
var mandreelJsScriptLoaded_loaded = false;
var mandreel_swf_last_total_size = 0; function mandreel_swf_size_updated(str)
{ var params = str.split(','); if ( mandreel_swf_size == 0 )
{
mandreel_swf_last_loaded_size = 0;
}
mandreel_swf_size = parseInt(params[0]); var loaded = parseInt(params[1]); var delta_size = loaded - mandreel_swf_last_loaded_size;
mandreel_swf_last_loaded_size = loaded;
var percentage = ((100*loaded)/mandreel_swf_size)|0; if (percentage>100)
percentage = 100;
if ( mandreelAppStartStateFunc )
mandreelAppStartStateFunc("loadingScriptUpdate",percentage);
imandreel_update_load(delta_size,0);
}
function mandreel_swf_size_loaded(str)
{ if ( mandreelAppStartStateFunc )
mandreelAppStartStateFunc("scriptLoaded","");
}
function mandreelNextDecompress(mandreel_result_lzma)
{
if ( mandreelAppStartStateFunc )
{ var totalBytesLeft = mandreel_result_lzma.totalSize - mandreel_result_lzma.remainingBytes;
function mandreel_load_packfile(array_buffer)
{ if (array_buffer)
{
mandreelLoadPackData(array_buffer,false); return;
}
var working_folder = mandreelAppWorkingFolder; if ( mandreelAppReadDataFromLocalHost )
working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder; var packdata_request = new XMLHttpRequest(); var url = working_folder+mandreel_packfiledata_name;
packdata_request.open("GET", url, true);
if("responseType" in packdata_request)
packdata_request.responseType="arraybuffer"; else
packdata_request.overrideMimeType('text/plain; charset=x-user-defined');
var last_loaded_size = 0;
packdata_request.onreadystatechange = function()
{ if (packdata_request.readyState != 4) return;
if (packdata_request.status == 200)
{ var buffer; if (packdata_request.responseType=="arraybuffer")
buffer=packdata_request.response; elseif (packdata_request.mozResponseArrayBuffer != null)
buffer = packdata_request.mozResponseArrayBuffer; else
buffer=packdata_request.response;
if (mandreel_packfiledata_compressed)
{ var inStream = {
data: new Uint8Array(buffer),
offset: 0,
readByte: function(){ returnthis.data[this.offset ++];
}
};
function imandreel_update_load(size, total)
{ if (total == 0)
total = mandreel_packfiledata_size + mandreel_total_packtexture_size + mandreel_total_pogfile_size + mandreel_jslzma_size + mandreel_swf_size;
mandreel_update_total_size+=size;
var percentage = ((100*mandreel_update_total_size)/total)|0;
if (percentage>100)
percentage = 100; if (mandreelAppStartStateFunc)
mandreelAppStartStateFunc("loadingProgress",percentage);
}
function imandreel_packasynctexture_load(array_buffer)
{ if (array_buffer)
{
imandreel_packasynctexture_loaded(array_buffer, false); return;
}
var working_folder = mandreelAppWorkingFolder; if ( mandreelAppReadDataFromLocalHost )
working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder; var packdata_request = new XMLHttpRequest(); var url = working_folder+_mandreel_currentPackTexture;
packdata_request.open("GET", url, true);
if("responseType" in packdata_request)
packdata_request.responseType="arraybuffer"; else
packdata_request.overrideMimeType('text/plain; charset=x-user-defined');
var last_loaded_size = 0;
packdata_request.onreadystatechange = function()
{ if (packdata_request.readyState != 4) return;
if (packdata_request.status == 200)
{ var buffer; if (packdata_request.responseType=="arraybuffer")
buffer=packdata_request.response; elseif (packdata_request.mozResponseArrayBuffer != null)
buffer = packdata_request.mozResponseArrayBuffer; else
buffer=packdata_request.response;
var percentage = ((100*mandreel_loaded_packtexture_size)/mandreel_total_packtexture_size)|0;
if (percentage>100)
percentage = 100;
if ( mandreelAppStartStateFunc )
mandreelAppStartStateFunc("loadingTextureAsyncPack",percentage);
}
packdata_request.send();
}
function imandreelLoadNextTexturePack()
{ if (mandreelAppUsePackAsyncTexture.length)
{
_mandreel_currentPackTexture = mandreelAppUsePackAsyncTexture.pop();
mandreel_fs_load_binary(_mandreel_currentPackTexture, imandreel_packasynctexture_load);
} else
imandreelLoadAudio();
}
function imandreelJsScriptLoaded()
{
imandreelLoadNextTexturePack();
}
////////////////////////////////////////////
function mandreelDecompressJSReady(code, save_file)
{ if (save_file)
mandreel_fs_saveFile(mandreelAppMandreelJs + ".lzma", code);
var ga = Mandreel_document.createElement('script');
ga.type = "text/javascript";
ga.text = code; var s = Mandreel_document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
s.parentNode.removeChild(ga);
mandreelJsScriptLoaded();
}
function mandreelNextDecompressJS(mandreel_result_lzma)
{
if ( mandreelAppStartStateFunc )
{ var totalBytesLeft = mandreel_result_lzma.totalSize - mandreel_result_lzma.remainingBytes;
function mandreel_load_compressed_js(code_js)
{ if (code_js)
{
mandreelDecompressJSReady(code_js,false); return;
} var xmlhttp_get = new XMLHttpRequest();
var url = mandreelAppMandreelJs + ".lzma"; if ( mandreelAppReadMandreelJsFromLocalHost )
url = mandreelAppLocalHost+"/"+url;
xmlhttp_get.open('GET',url);
if("responseType" in xmlhttp_get)
xmlhttp_get.responseType="arraybuffer"; else
xmlhttp_get.overrideMimeType('text/plain; charset=x-user-defined');
var last_loaded_size = 0;
xmlhttp_get.onreadystatechange = function()
{ if (xmlhttp_get.readyState==4)
{ if (xmlhttp_get.status==200 || xmlhttp_get.status==0)
{
var inStream = {
data: new Uint8Array(xmlhttp_get.response),
offset: 0,
readByte: function(){ returnthis.data[this.offset ++];
}
};
var outStream = {
data: new String(""),
offset: 0,
binary_mode : false,
writeByte: function(value){ this.data+=String.fromCharCode(value);
}
};
var result = LZMA.decompress2(inStream,inStream,outStream,null); if (result == null)
mandreelDecompressJSReady(outStream.data,true); else
Mandreel_setTimeout(mandreelNextDecompressJS,10,result);
} else
{
alert('error ' + xmlhttp_get.status);
}
}
if ( mandreelAppStartStateFunc )
mandreelAppStartStateFunc("loadingScriptUpdate",percentage);
}
xmlhttp_get.send();
}
function mandreelLoadMandreelJsScript()
{ if (mandreelAppMandreelJsCompressed)
{
mandreel_fs_load_text(mandreelAppMandreelJs + ".lzma", mandreel_load_compressed_js);
} else
{ var ga = Mandreel_document.createElement('script');
ga.type = 'text/javascript';
ga.async = true;
ga.onload = ga.onreadystatechange = mandreelJsScriptLoaded; var url = mandreelAppMandreelJs; if ( mandreelAppReadMandreelJsFromLocalHost )
ga.src = mandreelAppLocalHost+"/"+url; else
ga.src = url; var s = Mandreel_document.getElementsByTagName('script')[0]; if ( mandreelAppStartStateFunc )
mandreelAppStartStateFunc("loadingScript","");
s.parentNode.insertBefore(ga, s);
}
}
//////////////////////////////////////////// function mandreelFatLoaded()
{ if ( mandreelAppPlatform == "nacl" )
{
g_mandreel_working_folder = mandreelAppWorkingFolder; if ( mandreelAppReadDataFromLocalHost )
g_mandreel_working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder;
function mandreelLoadFat()
{
mandreelFatPreloadRequest = new Mandreel_XMLHttpRequest(); var working_folder = mandreelAppWorkingFolder; if ( mandreelAppReadDataFromLocalHost )
working_folder = mandreelAppLocalHost+"/"+mandreelAppWorkingFolder; var url = working_folder+"mandreel.fat.dat"; if ( mandreelAppPlatform == "nacl" )
url = working_folder+"mandreel.fat";
mandreelFatPreloadRequest.open("GET", url, true);
mandreelFatPreloadRequest.onreadystatechange = function()
{ if (mandreelFatPreloadRequest.readyState != 4) return; if ( mandreelFatPreloadRequest.status != 404 && mandreelFatPreloadRequest.response != null)
{
mandreelFatData = mandreelFatPreloadRequest.response;
} if ( mandreelFatData == "" )
{
dump("error loading mandreel.fat file, Maybe the working folder is not correctly set???");
}
var packfiledata = null; var compressed = false; var packfiledata_size = 0; var total_packtexture_size = 0; var pogsize = 0;
// Check version var FatLines = mandreelFatData.split('\n'); for ( var i=0;i<FatLines.length;++i )
{ var line = mandreel_removecr(FatLines[i]); var params = line.split(','); if ( params[0] == "version" )
{ if ( params[1] != mandrelCurrentFatVersion )
dump("warning: mandreel.fat version number is ("+params[1]+") and it should be ("+mandrelCurrentFatVersion+")");
} elseif ( params[0] == "platform" && params[1] != "js" && (mandreelAppPlatform == "webgl" || mandreelAppPlatform == "canvas") )
dump("warning: mandreel.fat platform is ("+params[1]+") and it should be (js)"); elseif ( params[0] == "platform" && params[1] != "nacl" && mandreelAppPlatform == "nacl" )
dump("warning: mandreel.fat platform is ("+params[1]+") and it should be (nacl)"); elseif (params[0] == 'packdata')
{
packfiledata = params[1];
compressed = params[2].charAt(0) == '1';
packfiledata_size = parseInt(params[3], 10);
} elseif (params[0] == 'flashsockets')
{
mandreelAppUseFlashSockets = true;
} elseif (params[0] == 'packtexture')
{ var filename = params[1]; var size_packtexture = parseInt(params[3], 10);
total_packtexture_size+=size_packtexture;
mandreelAppUsePackAsyncTexture.push(filename);
} elseif (params[0] == 'audiopreloadfile')
{
pogsize = parseInt(params[2],10);
} elseif (params[0] == 'audiodriver' && params[1] == 'webaudio')
{ try { preCreatedWebAudioContext = new webkitAudioContext(); } catch(err) { preCreatedWebAudioContext = null; }
}
}
var mandreelAppStartStateFunc = 0; var mandreelDisableSpaceKey = true; //////////////////////////////////////////// function mandreelAppStart(startStateFunc,params)
{
mandreelAppStartStateFunc = startStateFunc;
if ( typeof(params.log) != 'undefined' )
mandreelAppLog = params.log;
if ( typeof(params.platform) != 'undefined' )
mandreelAppPlatform = params.platform;
if (typeof(params.mandreelJSCompressed) != 'undefined' )
mandreelAppMandreelJsCompressed = params.mandreelJSCompressed;
/* The following code is removed for benchmarking: if ((mandreel_BrowserDetect.browser == 'Chrome' || mandreel_BrowserDetect.browser == 'Safari') && mandreel_BrowserDetect.OS == 'Mac' && mandreelAppPlatform == "flash")
mandreelDisableSpaceKey = false; */
//next lines are necessary to fix the problem //with offsetParent if (!__isIE && !__isOperaOld || __isIENew)
{ while (offsetParent != parentNode &&
parentNode !== null) {
res.x -= parentNode.scrollLeft;
res.y -= parentNode.scrollTop; if (__isFireFoxOld || __isWebKit)
{
borderWidth =
kGetBorderWidth(parentNode);
res.x += borderWidth.left;
res.y += borderWidth.top;
}
parentNode = parentNode.parentNode;
}
}
parentNode = offsetParent.parentNode;
offsetParent = offsetParent.offsetParent;
}
}
} return res;
} function __getIEVersion()
{ var rv = -1; // Return value assumes failure. if (navigator.appName == 'Microsoft Internet Explorer')
{ var ua = navigator.userAgent; var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})"); if (re.exec(ua) != null)
rv = parseFloat(RegExp.$1);
} return rv;
} function __getOperaVersion()
{ var rv = 0; // Default value if (Mandreel_window.opera)
{ var sver = Mandreel_window.opera.version();
rv = parseFloat(sver);
} return rv;
} /* The following code was removed for benchmarking: var __userAgent = navigator.userAgent; var __isIE = navigator.appVersion.match(/MSIE/) != null; var __IEVersion = __getIEVersion(); var __isIENew = __isIE && __IEVersion >= 8; var __isIEOld = __isIE && !__isIENew; var __isFireFox = __userAgent.match(/firefox/i) != null; var __isFireFoxOld = __isFireFox && ((__userAgent.match(/firefox\/2./i) != null) || (__userAgent.match(/firefox\/1./i) != null)); var __isFireFoxNew = __isFireFox && !__isFireFoxOld; var __isWebKit = navigator.appVersion.match(/WebKit/) != null; var __isChrome = navigator.appVersion.match(/Chrome/) != null; var __isOpera = Mandreel_window.opera != null; var __operaVersion = __getOperaVersion();
var __isOperaOld = __isOpera && (__operaVersion < 10); */ function __parseBorderWidth(width)
{ var res = 0; if (typeof(width) == "string" && width != null && width != "" )
{ var p = width.indexOf("px"); if (p >= 0)
{
res = parseInt(width.substring(0, p));
} else
{ //do not know how to calculate other values (such as 0.5em or 0.1cm) correctly now so just set the width to 1 pixel
res = 1;
}
} return res;
} function __getBorderWidth(element)
{ var res = new Object();
res.left = 0; res.top = 0; res.right = 0; res.bottom = 0; if (Mandreel_window.getComputedStyle)
{ //for Firefox var elStyle = Mandreel_window.getComputedStyle(element, null);
res.left = parseInt(elStyle.borderLeftWidth.slice(0, -2));
res.top = parseInt(elStyle.borderTopWidth.slice(0, -2));
res.right = parseInt(elStyle.borderRightWidth.slice(0, -2));
res.bottom = parseInt(elStyle.borderBottomWidth.slice(0, -2));
} else
{ //for other browsers
res.left = __parseBorderWidth(element.style.borderLeftWidth);
res.top = __parseBorderWidth(element.style.borderTopWidth);
res.right = __parseBorderWidth(element.style.borderRightWidth);
res.bottom = __parseBorderWidth(element.style.borderBottomWidth);
} return res;
}
//////////////////////////////////////////// // WebGL //////////////////////////////////////////// var imandreel_gl = null; var imandreel_ctx_canvas = null; var imandreel_is_ready = 0; var imandreel_oldTime = Date_now();
function mandreel_wheel(event) { imandreel_onMouseWheel(event);event.preventDefault(); event.returnValue=false; }
//////////////////////////////////////////// function mandreelAppStartRenderWebGL()
{ /* The following code was removed for benchmarking: var canvas = document.getElementById(mandreelAppCanvasName);
// Set the focus to the canvas div if (mandreelAppForceFocus)
{ var canvasDiv = Mandreel_document.getElementById(mandreelAppCanvasDiv);
canvasDiv.focus();
}
// Call mandreel app draw funtion (__draw()) var nowTime = Date_now(); if (!g_mandreel_frame_locked)
{
g_mandreel_frame_inframe = true; if (!_imandreel_pause_game)
mandreelAppDraw(nowTime-imandreel_oldTime);
g_mandreel_frame_inframe = false;
}
imandreel_oldTime = nowTime;
}
function render()
{ // Call mandreel app draw funtion (__draw()) var nowTime = Date_now(); if (!g_mandreel_frame_locked)
{
g_mandreel_frame_inframe = true; if (!_imandreel_pause_game)
mandreelAppDraw(nowTime-imandreel_oldTime);
g_mandreel_frame_inframe = false;
}
imandreel_oldTime = nowTime;
}
var imandreel_last_movex = 0; var imandreel_last_movey = 0;
//////////////////////////////////////////// function imandreel_onMouseMove(e)
{ if (!imandreel_is_ready) return;
if (_imandreel_pause_game) return;
var pos = mandreelAppGetElementAbsolutePos(mandreelAppCanvasName); var setX = e.clientX - pos.x; var setY = e.clientY - pos.y;
//////////////////////////////////////////// function imandreel_onMouseDblClick(e)
{ if (!imandreel_is_ready) return;
if (_imandreel_pause_game) return;
var pos = mandreelAppGetElementAbsolutePos(mandreelAppCanvasName); var setX = e.clientX - pos.x; var setY = e.clientY - pos.y;
mandreelAppMouseDblClick(setX,setY);
}
//////////////////////////////////////////// var mandreel_mouse_down = false; var mandreel_rmouse_down = false; function imandreel_onMouseDown(e)
{ if (!imandreel_is_ready) return;
if (_imandreel_pause_game) return;
var rightclick; if (!e) var e = Mandreel_window.event; if (e.which) rightclick = (e.which == 3); elseif (e.button) rightclick = (e.button == 2);
var pos = mandreelAppGetElementAbsolutePos(mandreelAppCanvasName); var setX = e.clientX - pos.x; var setY = e.clientY - pos.y;
if (!rightclick)
{ if (mandreel_mouse_down) return;
mandreel_mouse_down = true;
mandreelAppMouseButton(1,setX,setY);
} else
{ if (mandreel_rmouse_down) return;
//////////////////////////////////////////// function imandreel_onKeyDown(e)
{ if (e.which === 8) // disable back button on browser
{
e.preventDefault();
} if (!imandreel_is_ready) return;
if (_imandreel_pause_game) return;
var KeyID = e.keyCode;
mandreelAppKeyEvent(1,KeyID);
}
var imandreel_flash_global_sp = 0; var imandreel_flash_global_sp2 = 0; var imandreel_flash_current_sp = 0;
function MandreelInterSwfLoaded2()
{
} function MandreelInterSwfLoaded()
{
appStartState('scriptLoaded'); var flashMovie = swfobject.getObjectById(mandreelAppCanvasDiv)
dump(flashMovie.width);
flashMovie.MandreelInit();
function mandreel_fs_init(callback, size_bytes, url_time)
{
g_mandreel_timestamp_fs = 99999999999999;
var aux = null; try { aux = webkitStorageInfo; } catch(err) { aux = null; } if (aux == null)
{ //callback(false);
var time_request = new XMLHttpRequest();
time_request.open('GET',url_time);
time_request.onreadystatechange = function()
{ if (time_request.readyState==4)
{ if (time_request.status==200 || time_request.status==0)
{
if (time_request.responseText)
{
g_mandreel_timestamp_fs = parseFloat(time_request.responseText);
dump('mandreel_init_fs time ' + g_mandreel_timestamp_fs);
}
}
webkitStorageInfo.requestQuota(
webkitStorageInfo.PERSISTENT , // or PERSISTENT
size_bytes, function(bytes) { dump('request quota succeed');}, function () { dump('request quota failed');} );
// g_mandreel_timestamp_fs =0;
var time_request = new XMLHttpRequest();
time_request.open('GET',url_time);
time_request.onreadystatechange = function()
{ if (time_request.readyState==4)
{ if (time_request.status==200 || time_request.status==0)
{
if (time_request.responseText)
{
g_mandreel_timestamp_fs = parseFloat(time_request.responseText);
dump('mandreel_init_fs time ' + g_mandreel_timestamp_fs);
}
}
var my_requestFileSystem = Mandreel_window.requestFileSystem || Mandreel_window.webkitRequestFileSystem;
if (callback)
Mandreel_setTimeout(callback, 100, true);
} , function(e) { MandreelFsErrorHandler(e); if (callback) callback(false); } );
}
}
time_request.send();
}
mandreel_indexedDB.load = function(file_name, callback)
{ var db = mandreel_indexedDB.db; var trans = db.transaction(["cache"]); var store = trans.objectStore("cache");
var key = file_name;
var getReq = store.get(key);
getReq.onsuccess = function (ev) { if (getReq.result)
{
dump('chanka ' + g_mandreel_timestamp_fs + ' ' + getReq.result.timeStamp + '\n'); if (getReq.result.timeStamp>=g_mandreel_timestamp_fs)
callback(getReq.result.data); else
callback(null);
} else
callback(null);
}
getReq.onerror = function (ev) {
console.log("index.get failed. Error: " + ev.message);
}
}
function mandreel_fs_get_url(file_name, callback)
{ if (mandreel_indexedDB.db)
{
callback(null); return;
}
if (g_mandreel_fs == null)
{
callback(null); return;
}
mandreel_indexedDB.save = function(file_name, data)
{ var db = mandreel_indexedDB.db;
var trans = db.transaction(["cache"], IDBTransaction.READ_WRITE); var store = trans.objectStore("cache"); var request = store.put({ "data": data, "timeStamp" : Date_now()/1000, "fileName" : file_name
});
request.onsuccess = function(e) { // Re-render all the todo's // html5rocks.indexedDB.getAllTodoItems();
dump('mandreel_indexedDB.save ok ');
};
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.