Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit1d954f4

Browse files
Revert "[skwasm] Dynamic Threading (#164748)" (#165350)
This reverts commitb2a4a05.This has been causing issues when rolling to flutter/packages repo. Seeflutter/flutter#165347.
1 parentb836fb2 commit1d954f4

File tree

16 files changed

+309
-205
lines changed

16 files changed

+309
-205
lines changed

‎engine/src/build/config/compiler/BUILD.gn‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -277,9 +277,9 @@ config("compiler") {
277277
}
278278

279279
if (is_wasm) {
280-
if (wasm_use_workers) {
281-
cflags+= ["-sWASM_WORKERS=1" ]
282-
ldflags+= ["-sWASM_WORKERS=1" ]
280+
if (wasm_use_pthreads) {
281+
cflags+= ["-pthread" ]
282+
ldflags+= ["-pthread" ]
283283
}if (wasm_shared_memory) {
284284
cflags+= ["-sSHARED_MEMORY=1" ]
285285
ldflags+= ["-sSHARED_MEMORY=1" ]
@@ -396,12 +396,12 @@ config("compiler") {
396396
# to say that it does. Define them here instead.
397397
defines+= ["HAVE_SYS_UIO_H" ]
398398

399-
# When Android requires new flags consider also editing the flags in
400-
# the following locations.
399+
# When Android requires new flags consider also editing the flags in
400+
# the following locations.
401401
# Framework plugin_ffi template: packages/flutter_tools/templates/plugin_ffi/src.tmpl/CMakeLists.txt.tmpl
402402
# Example PR: https://github.com/flutter/flutter/pull/155508
403-
# Dart Lang JNI package: pkgs/jni/src/CMakeLists.txt
404-
# Example PR: https://github.com/dart-lang/native/pull/1615
403+
# Dart Lang JNI package: pkgs/jni/src/CMakeLists.txt
404+
# Example PR: https://github.com/dart-lang/native/pull/1615
405405
ldflags+= [
406406
"-Wl,--no-undefined",
407407
"-Wl,--exclude-libs,ALL",

‎engine/src/build/toolchain/wasm.gni‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ declare_args() {
1111
# The location of an activated embedded emsdk.
1212
emsdk_dir=rebase_path("//flutter/prebuilts/emsdk")
1313

14-
wasm_use_workers=false
14+
wasm_use_pthreads=false
1515
wasm_shared_memory=false
1616
wasm_use_dwarf=false
1717
}

‎engine/src/flutter/ci/licenses_golden/licenses_flutter‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42734,6 +42734,8 @@ ORIGIN: ../../../flutter/lib/web_ui/skwasm/filters.cpp + ../../../flutter/LICENS
4273442734
ORIGIN: ../../../flutter/lib/web_ui/skwasm/fonts.cpp + ../../../flutter/LICENSE
4273542735
ORIGIN: ../../../flutter/lib/web_ui/skwasm/helpers.h + ../../../flutter/LICENSE
4273642736
ORIGIN: ../../../flutter/lib/web_ui/skwasm/image.cpp + ../../../flutter/LICENSE
42737+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/library_skwasm_multi_threaded.js + ../../../flutter/LICENSE
42738+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/library_skwasm_single_threaded.js + ../../../flutter/LICENSE
4273742739
ORIGIN: ../../../flutter/lib/web_ui/skwasm/library_skwasm_support.js + ../../../flutter/LICENSE
4273842740
ORIGIN: ../../../flutter/lib/web_ui/skwasm/paint.cpp + ../../../flutter/LICENSE
4273942741
ORIGIN: ../../../flutter/lib/web_ui/skwasm/path.cpp + ../../../flutter/LICENSE
@@ -42743,6 +42745,8 @@ ORIGIN: ../../../flutter/lib/web_ui/skwasm/skwasm_support.h + ../../../flutter/L
4274342745
ORIGIN: ../../../flutter/lib/web_ui/skwasm/string.cpp + ../../../flutter/LICENSE
4274442746
ORIGIN: ../../../flutter/lib/web_ui/skwasm/surface.cpp + ../../../flutter/LICENSE
4274542747
ORIGIN: ../../../flutter/lib/web_ui/skwasm/surface.h + ../../../flutter/LICENSE
42748+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/surface_mt.cpp + ../../../flutter/LICENSE
42749+
ORIGIN: ../../../flutter/lib/web_ui/skwasm/surface_st.cpp + ../../../flutter/LICENSE
4274642750
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/line_metrics.cpp + ../../../flutter/LICENSE
4274742751
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/paragraph.cpp + ../../../flutter/LICENSE
4274842752
ORIGIN: ../../../flutter/lib/web_ui/skwasm/text/paragraph_builder.cpp + ../../../flutter/LICENSE
@@ -45705,6 +45709,8 @@ FILE: ../../../flutter/lib/web_ui/skwasm/filters.cpp
4570545709
FILE: ../../../flutter/lib/web_ui/skwasm/fonts.cpp
4570645710
FILE: ../../../flutter/lib/web_ui/skwasm/helpers.h
4570745711
FILE: ../../../flutter/lib/web_ui/skwasm/image.cpp
45712+
FILE: ../../../flutter/lib/web_ui/skwasm/library_skwasm_multi_threaded.js
45713+
FILE: ../../../flutter/lib/web_ui/skwasm/library_skwasm_single_threaded.js
4570845714
FILE: ../../../flutter/lib/web_ui/skwasm/library_skwasm_support.js
4570945715
FILE: ../../../flutter/lib/web_ui/skwasm/paint.cpp
4571045716
FILE: ../../../flutter/lib/web_ui/skwasm/path.cpp
@@ -45714,6 +45720,8 @@ FILE: ../../../flutter/lib/web_ui/skwasm/skwasm_support.h
4571445720
FILE: ../../../flutter/lib/web_ui/skwasm/string.cpp
4571545721
FILE: ../../../flutter/lib/web_ui/skwasm/surface.cpp
4571645722
FILE: ../../../flutter/lib/web_ui/skwasm/surface.h
45723+
FILE: ../../../flutter/lib/web_ui/skwasm/surface_mt.cpp
45724+
FILE: ../../../flutter/lib/web_ui/skwasm/surface_st.cpp
4571745725
FILE: ../../../flutter/lib/web_ui/skwasm/text/line_metrics.cpp
4571845726
FILE: ../../../flutter/lib/web_ui/skwasm/text/paragraph.cpp
4571945727
FILE: ../../../flutter/lib/web_ui/skwasm/text/paragraph_builder.cpp

‎engine/src/flutter/lib/web_ui/dev/steps/copy_artifacts_step.dart‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,13 +76,15 @@ class CopyArtifactsStep implements PipelineStep {
7676
finalString canvaskitSourceDirectory;
7777
finalString canvaskitChromiumSourceDirectory;
7878
finalString skwasmSourceDirectory;
79+
finalString skwasmStSourceDirectory;
7980
switch (source) {
8081
caseLocalArtifactSource(:final mode):
8182
final buildDirectory=getBuildDirectoryForRuntimeMode(mode).path;
8283
flutterJsSourceDirectory= pathlib.join(buildDirectory,'flutter_web_sdk','flutter_js');
8384
canvaskitSourceDirectory= pathlib.join(buildDirectory,'canvaskit');
8485
canvaskitChromiumSourceDirectory= pathlib.join(buildDirectory,'canvaskit_chromium');
8586
skwasmSourceDirectory= pathlib.join(buildDirectory,'skwasm');
87+
skwasmStSourceDirectory= pathlib.join(buildDirectory,'skwasm_st');
8688

8789
caseGcsArtifactSource(:final realm):
8890
final artifactsDirectory= (await_downloadArtifacts(realm)).path;
@@ -94,6 +96,7 @@ class CopyArtifactsStep implements PipelineStep {
9496
'chromium',
9597
);
9698
skwasmSourceDirectory= pathlib.join(artifactsDirectory,'canvaskit');
99+
skwasmStSourceDirectory= pathlib.join(artifactsDirectory,'canvaskit');
97100
}
98101

99102
await environment.webTestsArtifactsDir.create(recursive:true);
@@ -113,6 +116,7 @@ class CopyArtifactsStep implements PipelineStep {
113116
if (artifactDeps.skwasm) {
114117
copied.add('Skwasm');
115118
awaitcopyWasmLibrary('skwasm', skwasmSourceDirectory,'canvaskit');
119+
awaitcopyWasmLibrary('skwasm_st', skwasmStSourceDirectory,'canvaskit');
116120
}
117121
print('Copied artifacts: ${copied.join(', ')}');
118122
}

‎engine/src/flutter/lib/web_ui/flutter_js/src/skwasm_loader.js‎

Lines changed: 12 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -6,64 +6,24 @@ import { createWasmInstantiator } from "./instantiate_wasm.js";
66
import{resolveUrlWithSegments}from"./utils.js";
77

88
exportconstloadSkwasm=async(deps,config,browserEnvironment,baseUrl)=>{
9-
constrawSkwasmUrl=resolveUrlWithSegments(baseUrl,'skwasm.js')
9+
constfileStem=(browserEnvironment.crossOriginIsolated&&!config.forceSingleThreadedSkwasm) ?"skwasm" :"skwasm_st";
10+
constrawSkwasmUrl=resolveUrlWithSegments(baseUrl,`${fileStem}.js`)
1011
letskwasmUrl=rawSkwasmUrl;
1112
if(deps.flutterTT.policy){
1213
skwasmUrl=deps.flutterTT.policy.createScriptURL(skwasmUrl);
1314
}
14-
constwasmInstantiator=createWasmInstantiator(resolveUrlWithSegments(baseUrl,'skwasm.wasm'));
15+
constwasmInstantiator=createWasmInstantiator(resolveUrlWithSegments(baseUrl,`${fileStem}.wasm`));
1516
constskwasm=awaitimport(skwasmUrl);
1617
returnawaitskwasm.default({
17-
skwasmSingleThreaded:!browserEnvironment.crossOriginIsolated||config.forceSingleThreadedSkwasm,
1818
instantiateWasm:wasmInstantiator,
19-
locateFile:(filename,scriptDirectory)=>{
20-
// The wasm workers API has a separate .ww.js file that bootstraps the
21-
// web worker. However, it turns out this worker bootstrapper doesn't
22-
// actually work with ES6 modules, which we have enabled. So we instead
23-
// pass our own bootstrapper that loads skwasm.js as an ES6 module, and
24-
// queues/flushes pending messages that were received during the
25-
// asynchronous load.
26-
if(filename.endsWith('.ww.js')){
27-
consturl=resolveUrlWithSegments(baseUrl,filename);
28-
returnURL.createObjectURL(newBlob(
29-
[`
30-
"use strict";
31-
32-
let eventListener;
33-
eventListener = (message) => {
34-
const pendingMessages = [];
35-
const data = message.data;
36-
data["instantiateWasm"] = (info,receiveInstance) => {
37-
const instance = new WebAssembly.Instance(data["wasm"], info);
38-
return receiveInstance(instance, data["wasm"])
39-
};
40-
import(data.js).then(async (skwasm) => {
41-
await skwasm.default(data);
42-
43-
removeEventListener("message", eventListener);
44-
for (const message of pendingMessages) {
45-
dispatchEvent(message);
46-
}
47-
});
48-
console.log("removing initial listener");
49-
removeEventListener("message", eventListener);
50-
eventListener = (message) => {
51-
52-
pendingMessages.push(message);
53-
};
54-
55-
addEventListener("message", eventListener);
56-
};
57-
addEventListener("message", eventListener);
58-
`
59-
],
60-
{'type':'application/javascript'}));
61-
}
62-
returnurl;
63-
},
64-
// Because of the above workaround, the worker is just a blob and
65-
// can't locate the main script using a relative path to itself,
66-
// so we pass the main script location in.
67-
mainScriptUrlOrBlob:rawSkwasmUrl,
19+
// When hosted via a CDN or some other url that is not the same
20+
// origin as the main script of the page, we will fail to create
21+
// a web worker with the bootstrapping script. This workaround will
22+
// make sure that the worker JS can be loaded regardless of where
23+
// it is hosted.
24+
mainScriptUrlOrBlob:newBlob(
25+
[`import '${skwasmUrl}'`],
26+
{'type':'application/javascript'},
27+
),
6828
});
6929
}

‎engine/src/flutter/lib/web_ui/skwasm/BUILD.gn‎

Lines changed: 84 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -4,69 +4,96 @@
44

55
import("//build/toolchain/wasm.gni")
66

7-
wasm_lib("skwasm") {
8-
public_configs= ["//flutter:config" ]
7+
template("skwasm_variant") {
8+
wasm_lib(target_name) {
9+
public_configs= ["//flutter:config" ]
910

10-
sources= [
11-
"canvas.cpp",
12-
"contour_measure.cpp",
13-
"data.cpp",
14-
"export.h",
15-
"filters.cpp",
16-
"fonts.cpp",
17-
"helpers.h",
18-
"image.cpp",
19-
"paint.cpp",
20-
"path.cpp",
21-
"picture.cpp",
22-
"shaders.cpp",
23-
"skwasm_support.h",
24-
"string.cpp",
25-
"surface.cpp",
26-
"text/line_metrics.cpp",
27-
"text/paragraph.cpp",
28-
"text/paragraph_builder.cpp",
29-
"text/paragraph_style.cpp",
30-
"text/strut_style.cpp",
31-
"text/text_style.cpp",
32-
"vertices.cpp",
33-
"wrappers.h",
34-
]
11+
sources= [
12+
"canvas.cpp",
13+
"contour_measure.cpp",
14+
"data.cpp",
15+
"export.h",
16+
"filters.cpp",
17+
"fonts.cpp",
18+
"helpers.h",
19+
"image.cpp",
20+
"paint.cpp",
21+
"path.cpp",
22+
"picture.cpp",
23+
"shaders.cpp",
24+
"skwasm_support.h",
25+
"string.cpp",
26+
"surface.cpp",
27+
"text/line_metrics.cpp",
28+
"text/paragraph.cpp",
29+
"text/paragraph_builder.cpp",
30+
"text/paragraph_style.cpp",
31+
"text/strut_style.cpp",
32+
"text/text_style.cpp",
33+
"vertices.cpp",
34+
"wrappers.h",
35+
]
36+
37+
cflags= ["-mreference-types" ]
38+
39+
ldflags= [
40+
"-std=c++20",
41+
"-lGL",
42+
"-sUSE_WEBGL2=1",
43+
"-sMAX_WEBGL_VERSION=2",
44+
"-sOFFSCREENCANVAS_SUPPORT",
45+
"-sALLOW_MEMORY_GROWTH",
46+
"-sALLOW_TABLE_GROWTH",
47+
"-lexports.js",
48+
"-sEXPORTED_FUNCTIONS=[stackAlloc]",
49+
"-sEXPORTED_RUNTIME_METHODS=[addFunction,wasmExports,wasmMemory,stackAlloc]",
50+
"-sINCOMING_MODULE_JS_API=[instantiateWasm,noExitRuntime,mainScriptUrlOrBlob]",
51+
"-sUSE_ES6_IMPORT_META=0",
52+
"--js-library",
53+
rebase_path("library_skwasm_support.js"),
54+
]
3555

36-
cflags= ["-mreference-types" ]
56+
inputs= [rebase_path("library_skwasm_support.js") ]
3757

38-
ldflags= [
39-
"-std=c++20",
40-
"-lGL",
41-
"-sUSE_WEBGL2=1",
42-
"-sMAX_WEBGL_VERSION=2",
43-
"-sOFFSCREENCANVAS_SUPPORT",
44-
"-sALLOW_MEMORY_GROWTH",
45-
"-sALLOW_TABLE_GROWTH",
46-
"-lexports.js",
47-
"-sEXPORTED_FUNCTIONS=[stackAlloc]",
48-
"-sEXPORTED_RUNTIME_METHODS=[addFunction,wasmExports,wasmMemory,stackAlloc]",
49-
"-sINCOMING_MODULE_JS_API=[instantiateWasm,locateFile,noExitRuntime,mainScriptUrlOrBlob,wasmMemory,wasm,skwasmSingleThreaded]",
50-
"-sUSE_ES6_IMPORT_META=0",
51-
"--js-library",
52-
rebase_path("library_skwasm_support.js"),
53-
]
58+
if (invoker.multi_threaded) {
59+
sources+= ["surface_mt.cpp" ]
60+
ldflags+= [
61+
"-sPTHREAD_POOL_SIZE=1",
62+
"-Wno-pthreads-mem-growth",
63+
"--js-library",
64+
rebase_path("library_skwasm_multi_threaded.js"),
65+
]
66+
inputs+= [rebase_path("library_skwasm_multi_threaded.js") ]
67+
}else {
68+
sources+= ["surface_st.cpp" ]
69+
ldflags+= [
70+
"--js-library",
71+
rebase_path("library_skwasm_single_threaded.js"),
72+
]
73+
inputs+= [rebase_path("library_skwasm_single_threaded.js") ]
74+
}
5475

55-
inputs= [rebase_path("library_skwasm_support.js") ]
76+
if (is_debug) {
77+
ldflags+= [
78+
"-sASSERTIONS=1",
79+
"-sGL_ASSERTIONS=1",
80+
]
81+
}else {
82+
ldflags+= ["--closure=1" ]
83+
}
5684

57-
if (is_debug) {
58-
ldflags+= [
59-
"-sASSERTIONS=1",
60-
"-sGL_ASSERTIONS=1",
61-
"-sSTACK_OVERFLOW_CHECK=2",
85+
deps= [
86+
"//flutter/skia",
87+
"//flutter/skia/modules/skparagraph",
88+
"//flutter/skia/modules/skunicode",
6289
]
63-
}else {
64-
ldflags+= ["--closure=1" ]
6590
}
91+
}
92+
93+
skwasm_variant("skwasm") {
94+
multi_threaded=true
95+
}
6696

67-
deps= [
68-
"//flutter/skia",
69-
"//flutter/skia/modules/skparagraph",
70-
"//flutter/skia/modules/skunicode",
71-
]
97+
skwasm_variant("skwasm_st") {
98+
multi_threaded=false
7299
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
// This file adds JavaScript APIs that are accessible to the C++ layer.
6+
// See: https://emscripten.org/docs/porting/connecting_cpp_and_javascript/Interacting-with-code.html#implement-a-c-api-in-javascript
7+
8+
mergeInto(LibraryManager.library,{
9+
$skwasm_threading_setup__postset:'skwasm_threading_setup();',
10+
$skwasm_threading_setup:function(){
11+
// This value represents the difference between the time origin of the main
12+
// thread and whichever web worker this code is running on. This is so that
13+
// when we report frame timings, that they are in the same time domain
14+
// regardless of whether they are captured on the main thread or the web
15+
// worker.
16+
lettimeOriginDelta=0;
17+
skwasm_registerMessageListener=function(threadId,listener){
18+
consteventListener=function({data}){
19+
constskwasmMessage=data.skwasmMessage;
20+
if(!skwasmMessage){
21+
return;
22+
}
23+
if(skwasmMessage=='syncTimeOrigin'){
24+
timeOriginDelta=performance.timeOrigin-data.timeOrigin;
25+
return;
26+
}
27+
listener(data);
28+
};
29+
if(!threadId){
30+
addEventListener("message",eventListener);
31+
}else{
32+
PThread.pthreads[threadId].addEventListener("message",eventListener);
33+
PThread.pthreads[threadId].postMessage({
34+
skwasmMessage:'syncTimeOrigin',
35+
timeOrigin:performance.timeOrigin,
36+
});
37+
}
38+
};
39+
skwasm_getCurrentTimestamp=function(){
40+
returnperformance.now()+timeOriginDelta;
41+
};
42+
skwasm_postMessage=function(message,transfers,threadId){
43+
if(threadId){
44+
PThread.pthreads[threadId].postMessage(message,transfers);
45+
}else{
46+
postMessage(message,transfers);
47+
}
48+
};
49+
},
50+
$skwasm_threading_setup__deps:['$skwasm_registerMessageListener','$skwasm_getCurrentTimestamp','$skwasm_postMessage'],
51+
$skwasm_registerMessageListener:function(){},
52+
$skwasm_registerMessageListener__deps:['$skwasm_threading_setup'],
53+
$skwasm_getCurrentTimestamp:function(){},
54+
$skwasm_getCurrentTimestamp__deps:['$skwasm_threading_setup'],
55+
$skwasm_postMessage:function(){},
56+
$skwasm_postMessage__deps:['$skwasm_threading_setup'],
57+
});

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2026 Movatter.jp