Sfoglia il codice sorgente

Emit asm.js code into a dedicated file for asm.js export

This helps prevent browser lockups during start-up at the cost of having
to distribute an extra file.
eska 8 anni fa
parent
commit
5ede1a1226

+ 1 - 0
platform/javascript/detect.py

@@ -91,6 +91,7 @@ def configure(env):
         env.Append(LINKFLAGS=['--compression', lzma_binpath + "," + lzma_decoder + "," + lzma_dec])
 
     env.Append(LINKFLAGS=['-s', 'ASM_JS=1'])
+    env.Append(LINKFLAGS=['--separate-asm'])
     env.Append(LINKFLAGS=['-O2'])
     # env.Append(LINKFLAGS=['-g4'])
 

+ 6 - 0
platform/javascript/export/export.cpp

@@ -183,6 +183,7 @@ void EditorExportPlatformJavaScript::_fix_html(Vector<uint8_t>& p_html, const St
 		current_line = current_line.replace("$GODOT_FS",p_name+"fs.js");
 		current_line = current_line.replace("$GODOT_MEM",p_name+".mem");
 		current_line = current_line.replace("$GODOT_JS",p_name+".js");
+		current_line = current_line.replace("$GODOT_ASM",p_name+".asm.js");
 		current_line = current_line.replace("$GODOT_CANVAS_WIDTH",Globals::get_singleton()->get("display/width"));
 		current_line = current_line.replace("$GODOT_CANVAS_HEIGHT",Globals::get_singleton()->get("display/height"));
 		current_line = current_line.replace("$GODOT_HEAD_TITLE",!html_title.empty()?html_title:(String) Globals::get_singleton()->get("application/name"));
@@ -323,6 +324,11 @@ Error EditorExportPlatformJavaScript::export_project(const String& p_path, bool
 			file=p_path.get_file().basename()+".js";
 		}
 
+		if (file=="godot.asm.js") {
+
+			file=p_path.get_file().basename()+".asm.js";
+		}
+
 		if (file=="godot.mem") {
 
 			//_fix_godot(data);

+ 23 - 14
tools/dist/html_fs/godot.html

@@ -354,21 +354,30 @@
 	<script type="text/javascript" src="$GODOT_FS"></script>
 	<script>
 		(function() {
-			var memoryInitializer = "$GODOT_MEM";
-			if (typeof Module.locateFile === "function") {
-				memoryInitializer = Module.locateFile(memoryInitializer);
-			} else if (Module.memoryInitializerPrefixURL) {
-				memoryInitializer = Module.memoryInitializerPrefixURL + memoryInitializer;
-			}
-			var xhr = Module.memoryInitializerRequest = new XMLHttpRequest();
-			xhr.open("GET", memoryInitializer, true);
-			xhr.responseType = "arraybuffer";
-			xhr.send(null);
+			var script = document.createElement('script');
+			script.src = "$GODOT_ASM";
+			script.onload = function() {
+				setTimeout(function() {
+					(function() {
+						var memoryInitializer = '$GODOT_MEM';
+						if (typeof Module.locateFile === 'function') {
+							memoryInitializer = Module.locateFile(memoryInitializer);
+						} else if (Module.memoryInitializerPrefixURL) {
+							memoryInitializer = Module.memoryInitializerPrefixURL + memoryInitializer;
+						}
+						var xhr = Module.memoryInitializerRequest = new XMLHttpRequest();
+						xhr.open('GET', memoryInitializer, true);
+						xhr.responseType = 'arraybuffer';
+						xhr.send(null);
+					})();
+
+					var script = document.createElement('script');
+					script.src = "$GODOT_JS";
+					document.body.appendChild(script);
+				}, 1); // delaying even 1ms is enough to allow compilation memory to be reclaimed
+			};
+			document.body.appendChild(script);
 		})();
-
-		var script = document.createElement("script");
-		script.src = "$GODOT_JS";
-		document.body.appendChild(script);
 	</script>
 </body>
 </html>