test_wasm_recompile.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. /**
  2. * Any copyright is dedicated to the Public Domain.
  3. * http://creativecommons.org/publicdomain/zero/1.0/
  4. */
  5. var testGenerator = testSteps();
  6. function testSteps()
  7. {
  8. const name = "test_wasm_recompile.js";
  9. const objectStoreName = "Wasm";
  10. const wasmData = { key: 1, wasm: null };
  11. // The goal of this test is to prove that wasm is recompiled and the on-disk
  12. // copy updated.
  13. if (!isWasmSupported()) {
  14. finishTest();
  15. yield undefined;
  16. }
  17. getWasmBinary('(module (func (nop)))');
  18. let binary = yield undefined;
  19. wasmData.wasm = getWasmModule(binary);
  20. info("Installing profile");
  21. clearAllDatabases(continueToNextStepSync);
  22. yield undefined;
  23. // The profile was created by an older build (buildId: 20161116145318,
  24. // cpuId: X64=0x2). It contains one stored wasm module (file id 1 - bytecode
  25. // and file id 2 - compiled/machine code). The file create_db.js in the
  26. // package was run locally (specifically it was temporarily added to
  27. // xpcshell-parent-process.ini and then executed:
  28. // mach xpcshell-test dom/indexedDB/test/unit/create_db.js
  29. installPackagedProfile("wasm_recompile_profile");
  30. let filesDir = getChromeFilesDir();
  31. let file = filesDir.clone();
  32. file.append("2");
  33. info("Reading out contents of compiled blob");
  34. let fileReader = new FileReader();
  35. fileReader.onload = continueToNextStepSync;
  36. fileReader.readAsArrayBuffer(File.createFromNsIFile(file));
  37. yield undefined;
  38. let compiledBuffer = fileReader.result;
  39. info("Opening database");
  40. let request = indexedDB.open(name);
  41. request.onerror = errorHandler;
  42. request.onupgradeneeded = unexpectedSuccessHandler;
  43. request.onsuccess = continueToNextStepSync;
  44. yield undefined;
  45. // success
  46. let db = request.result;
  47. db.onerror = errorHandler;
  48. info("Getting wasm");
  49. request = db.transaction([objectStoreName])
  50. .objectStore(objectStoreName).get(wasmData.key);
  51. request.onsuccess = continueToNextStepSync;
  52. yield undefined;
  53. info("Verifying wasm module");
  54. verifyWasmModule(request.result, wasmData.wasm);
  55. yield undefined;
  56. info("Reading out contents of new compiled blob");
  57. fileReader = new FileReader();
  58. fileReader.onload = continueToNextStepSync;
  59. fileReader.readAsArrayBuffer(File.createFromNsIFile(file));
  60. yield undefined;
  61. let newCompiledBuffer = fileReader.result;
  62. info("Verifying blobs differ");
  63. ok(!compareBuffers(newCompiledBuffer, compiledBuffer), "Blobs differ");
  64. info("Getting wasm again");
  65. request = db.transaction([objectStoreName])
  66. .objectStore(objectStoreName).get(wasmData.key);
  67. request.onsuccess = continueToNextStepSync;
  68. yield undefined;
  69. info("Verifying wasm module");
  70. verifyWasmModule(request.result, wasmData.wasm);
  71. yield undefined;
  72. info("Reading contents of new compiled blob again");
  73. fileReader = new FileReader();
  74. fileReader.onload = continueToNextStepSync;
  75. fileReader.readAsArrayBuffer(File.createFromNsIFile(file));
  76. yield undefined;
  77. let newCompiledBuffer2 = fileReader.result;
  78. info("Verifying blob didn't change");
  79. ok(compareBuffers(newCompiledBuffer2, newCompiledBuffer),
  80. "Blob didn't change");
  81. finishTest();
  82. yield undefined;
  83. }