Skip to content

Commit

Permalink
feat(plugin/runner): Support shared wasix runtime (#7504)
Browse files Browse the repository at this point in the history
  • Loading branch information
kwonoj committed Jun 8, 2023
1 parent 89bee90 commit 73929fc
Show file tree
Hide file tree
Showing 13 changed files with 102 additions and 256 deletions.
2 changes: 2 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

10 changes: 10 additions & 0 deletions crates/swc/src/plugin.rs
Original file line number Diff line number Diff line change
Expand Up @@ -100,13 +100,23 @@ impl RustPlugins {
.expect("plugin module should be loaded");

let plugin_name = plugin_module_bytes.get_module_name().to_string();
let runtime = swc_plugin_runner::wasix_runtime::build_wasi_runtime(
crate::config::PLUGIN_MODULE_CACHE
.inner
.get()
.unwrap()
.lock()
.get_fs_cache_root()
.map(|v| std::path::PathBuf::from(v)),
);
let mut transform_plugin_executor =
swc_plugin_runner::create_plugin_transform_executor(
&self.source_map,
&self.unresolved_mark,
&self.metadata_context,
plugin_module_bytes,
Some(p.1),
runtime,
);

let span = tracing::span!(
Expand Down
3 changes: 3 additions & 0 deletions crates/swc_core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,9 @@ plugin_transform_host_native_filesystem_cache = [
"swc_plugin_runner/filesystem_cache",
]

plugin_transform_host_native_shared_runtime = [
"swc_plugin_runner/plugin_transform_host_native_shared_runtime",
]
### Internal features that public features are relying on.
### This is not supposed to be used directly, and does not gaurantee
### stability across each versions.
Expand Down
6 changes: 6 additions & 0 deletions crates/swc_plugin_runner/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,11 @@ plugin_transform_host_native = [
"wasmer-wasix/host-threads",
"wasmer-compiler-cranelift/default",
]
plugin_transform_host_native_shared_runtime = [
"tokio",
"wasmer-wasix/webc_runner",
]

# Supports a cache allow to store compiled bytecode into filesystem location.
# This feature implies in-memory cache support. This is not supported on wasm32 target.
filesystem_cache = ["wasmer-cache"]
Expand All @@ -51,6 +56,7 @@ once_cell = "1.10.0"
parking_lot = "0.12.0"
serde = { version = "1.0.126", features = ["derive"] }
serde_json = "1.0.64"
tokio = { version = "1", default-features = false, optional = true }
tracing = "0.1.32"
wasmer = { version = "3.3.0", default-features = false }
wasmer-wasix = { version = "0.4.0", default-features = false }
Expand Down
1 change: 1 addition & 0 deletions crates/swc_plugin_runner/benches/ecma_invoke.rs
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ fn bench_transform(b: &mut Bencher, plugin_dir: &Path) {
)),
Box::new(plugin_module.clone()),
None,
None,
);

let experimental_metadata: VersionedSerializable<AHashMap<String, String>> =
Expand Down
11 changes: 11 additions & 0 deletions crates/swc_plugin_runner/src/cache.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ const MODULE_SERIALIZATION_VERSION: &str = "v6";

#[derive(Default)]
pub struct PluginModuleCacheInner {
#[cfg(all(not(target_arch = "wasm32"), feature = "filesystem_cache"))]
fs_cache_root: Option<String>,
#[cfg(all(not(target_arch = "wasm32"), feature = "filesystem_cache"))]
fs_cache_store: Option<FileSystemCache>,
// Stores the string representation of the hash of the plugin module to store into
Expand All @@ -51,6 +53,13 @@ pub struct PluginModuleCacheInner {
}

impl PluginModuleCacheInner {
pub fn get_fs_cache_root(&self) -> Option<String> {
#[cfg(all(not(target_arch = "wasm32"), feature = "filesystem_cache"))]
return self.fs_cache_root.clone();

None
}

/// Check if the cache contains bytes for the corresponding key.
pub fn contains(&self, key: &str) -> bool {
let is_in_cache = self.memory_cache_store.contains_key(key)
Expand Down Expand Up @@ -183,6 +192,8 @@ impl PluginModuleCache {
fs_cache_store_root: &Option<String>,
) -> PluginModuleCacheInner {
PluginModuleCacheInner {
#[cfg(all(not(target_arch = "wasm32"), feature = "filesystem_cache"))]
fs_cache_root: fs_cache_store_root.clone(),
#[cfg(all(not(target_arch = "wasm32"), feature = "filesystem_cache"))]
fs_cache_store: if enable_fs_cache_store {
create_filesystem_cache(fs_cache_store_root)
Expand Down
4 changes: 4 additions & 0 deletions crates/swc_plugin_runner/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ mod imported_fn;
mod memory_interop;
pub mod plugin_module_bytes;
mod transform_executor;
pub mod wasix_runtime;

use plugin_module_bytes::PluginModuleBytes;

Expand All @@ -26,13 +27,15 @@ pub fn create_plugin_transform_executor(
metadata_context: &Arc<TransformPluginMetadataContext>,
plugin_module: Box<dyn PluginModuleBytes>,
plugin_config: Option<serde_json::Value>,
runtime: Option<Arc<dyn wasmer_wasix::WasiRuntime + Send + Sync>>,
) -> TransformExecutor {
TransformExecutor::new(
plugin_module,
source_map,
unresolved_mark,
metadata_context,
plugin_config,
runtime,
)
}

Expand All @@ -43,6 +46,7 @@ pub fn create_plugin_transform_executor(
metadata_context: &Arc<TransformPluginMetadataContext>,
plugin_module: Box<dyn PluginModuleBytes>,
plugin_config: Option<serde_json::Value>,
runtime: Option<()>,
) -> TransformExecutor {
unimplemented!("Transform plugin cannot be used without serialization support")
}

1 comment on commit 73929fc

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Benchmark

Benchmark suite Current: 73929fc Previous: 064bcf4 Ratio
es/full/bugs-1 376466 ns/iter (± 20391) 372870 ns/iter (± 12455) 1.01
es/full/minify/libraries/antd 2014782980 ns/iter (± 22742561) 2003887107 ns/iter (± 24660619) 1.01
es/full/minify/libraries/d3 377017217 ns/iter (± 6626706) 386968551 ns/iter (± 10116384) 0.97
es/full/minify/libraries/echarts 1541670690 ns/iter (± 19753660) 1534219412 ns/iter (± 12147064) 1.00
es/full/minify/libraries/jquery 113696390 ns/iter (± 2312827) 115549702 ns/iter (± 3061530) 0.98
es/full/minify/libraries/lodash 132453657 ns/iter (± 3357726) 132370789 ns/iter (± 2011960) 1.00
es/full/minify/libraries/moment 65801657 ns/iter (± 877449) 65914755 ns/iter (± 1302620) 1.00
es/full/minify/libraries/react 23613177 ns/iter (± 190985) 23690238 ns/iter (± 179915) 1.00
es/full/minify/libraries/terser 305850783 ns/iter (± 3147982) 316574259 ns/iter (± 4846609) 0.97
es/full/minify/libraries/three 560222480 ns/iter (± 11589906) 563603248 ns/iter (± 11308071) 0.99
es/full/minify/libraries/typescript 3754246253 ns/iter (± 25005905) 3737491398 ns/iter (± 34661698) 1.00
es/full/minify/libraries/victory 847350725 ns/iter (± 21146738) 841374452 ns/iter (± 11757534) 1.01
es/full/minify/libraries/vue 166369254 ns/iter (± 2141375) 179908714 ns/iter (± 6263673) 0.92
es/full/codegen/es3 40684 ns/iter (± 59) 40730 ns/iter (± 107) 1.00
es/full/codegen/es5 40751 ns/iter (± 76) 40746 ns/iter (± 63) 1.00
es/full/codegen/es2015 40818 ns/iter (± 86) 40843 ns/iter (± 68) 1.00
es/full/codegen/es2016 40756 ns/iter (± 74) 40768 ns/iter (± 85) 1.00
es/full/codegen/es2017 40760 ns/iter (± 43) 40782 ns/iter (± 96) 1.00
es/full/codegen/es2018 40798 ns/iter (± 63) 40748 ns/iter (± 29) 1.00
es/full/codegen/es2019 40752 ns/iter (± 87) 40744 ns/iter (± 247) 1.00
es/full/codegen/es2020 40787 ns/iter (± 59) 40767 ns/iter (± 69) 1.00
es/full/all/es3 209953912 ns/iter (± 1322286) 218263380 ns/iter (± 3330599) 0.96
es/full/all/es5 202031685 ns/iter (± 1600693) 207932329 ns/iter (± 3657862) 0.97
es/full/all/es2015 158218673 ns/iter (± 3383889) 163129288 ns/iter (± 1957091) 0.97
es/full/all/es2016 158002019 ns/iter (± 2457163) 163416755 ns/iter (± 3107238) 0.97
es/full/all/es2017 157072173 ns/iter (± 1758681) 159956204 ns/iter (± 1837808) 0.98
es/full/all/es2018 155628508 ns/iter (± 2490138) 157896386 ns/iter (± 2005748) 0.99
es/full/all/es2019 154836633 ns/iter (± 1426162) 157137432 ns/iter (± 2505089) 0.99
es/full/all/es2020 149374051 ns/iter (± 1940039) 150292862 ns/iter (± 3558600) 0.99
es/full/parser 597150 ns/iter (± 10974) 595048 ns/iter (± 9860) 1.00
es/full/base/fixer 24559 ns/iter (± 28) 24749 ns/iter (± 62) 0.99
es/full/base/resolver_and_hygiene 105251 ns/iter (± 138) 104826 ns/iter (± 159) 1.00
serialization of serde 282 ns/iter (± 1) 285 ns/iter (± 3) 0.99
css/minify/libraries/bootstrap 37362032 ns/iter (± 220728) 36966847 ns/iter (± 301873) 1.01
css/visitor/compare/clone 2759480 ns/iter (± 7456) 2740146 ns/iter (± 30723) 1.01
css/visitor/compare/visit_mut_span 2955333 ns/iter (± 9448) 2992764 ns/iter (± 14068) 0.99
css/visitor/compare/visit_mut_span_panic 3042283 ns/iter (± 16173) 3027545 ns/iter (± 11719) 1.00
css/visitor/compare/fold_span 3814449 ns/iter (± 38942) 3788298 ns/iter (± 15965) 1.01
css/visitor/compare/fold_span_panic 3986388 ns/iter (± 21174) 3937867 ns/iter (± 20151) 1.01
css/lexer/bootstrap_5_1_3 5538725 ns/iter (± 1278) 5521795 ns/iter (± 42457) 1.00
css/lexer/foundation_6_7_4 4755365 ns/iter (± 2074) 4656319 ns/iter (± 1535) 1.02
css/lexer/tailwind_3_1_1 901690 ns/iter (± 213) 885279 ns/iter (± 508) 1.02
css/parser/bootstrap_5_1_3 25116742 ns/iter (± 350042) 24892889 ns/iter (± 270039) 1.01
css/parser/foundation_6_7_4 19725947 ns/iter (± 36416) 19482208 ns/iter (± 79274) 1.01
css/parser/tailwind_3_1_1 3780239 ns/iter (± 8304) 3720038 ns/iter (± 3161) 1.02
es/codegen/colors 738616 ns/iter (± 401400) 725247 ns/iter (± 398026) 1.02
es/codegen/large 3157574 ns/iter (± 1666692) 2984256 ns/iter (± 1562314) 1.06
es/codegen/with-parser/colors 57414 ns/iter (± 496) 57616 ns/iter (± 399) 1.00
es/codegen/with-parser/large 573044 ns/iter (± 928) 572676 ns/iter (± 2631) 1.00
es/minify/libraries/antd 1762426105 ns/iter (± 18092726) 1750386042 ns/iter (± 29070332) 1.01
es/minify/libraries/d3 331316009 ns/iter (± 4444202) 333871601 ns/iter (± 5998168) 0.99
es/minify/libraries/echarts 1346385957 ns/iter (± 16831174) 1326253303 ns/iter (± 18516494) 1.02
es/minify/libraries/jquery 99401195 ns/iter (± 2007164) 99790909 ns/iter (± 1473154) 1.00
es/minify/libraries/lodash 119865510 ns/iter (± 2310998) 122140490 ns/iter (± 1687442) 0.98
es/minify/libraries/moment 59137299 ns/iter (± 2887520) 58458393 ns/iter (± 970726) 1.01
es/minify/libraries/react 21203016 ns/iter (± 254910) 21357118 ns/iter (± 288458) 0.99
es/minify/libraries/terser 263878841 ns/iter (± 5552786) 264063434 ns/iter (± 3768584) 1.00
es/minify/libraries/three 466885356 ns/iter (± 10956843) 473088199 ns/iter (± 19273642) 0.99
es/minify/libraries/typescript 3203543578 ns/iter (± 20082591) 3212912872 ns/iter (± 23624942) 1.00
es/minify/libraries/victory 714698266 ns/iter (± 22179012) 709573868 ns/iter (± 22808021) 1.01
es/minify/libraries/vue 149517718 ns/iter (± 1859860) 147577900 ns/iter (± 2512412) 1.01
es/visitor/compare/clone 2562700 ns/iter (± 41175) 2608634 ns/iter (± 39107) 0.98
es/visitor/compare/visit_mut_span 3070563 ns/iter (± 16737) 3078281 ns/iter (± 11973) 1.00
es/visitor/compare/visit_mut_span_panic 3135651 ns/iter (± 12650) 3137747 ns/iter (± 20278) 1.00
es/visitor/compare/fold_span 4264928 ns/iter (± 21706) 4296989 ns/iter (± 37799) 0.99
es/visitor/compare/fold_span_panic 4411685 ns/iter (± 22445) 4402916 ns/iter (± 20552) 1.00
es/lexer/colors 14714 ns/iter (± 44) 14742 ns/iter (± 40) 1.00
es/lexer/angular 6892457 ns/iter (± 3993) 6943053 ns/iter (± 3162) 0.99
es/lexer/backbone 841460 ns/iter (± 343) 847107 ns/iter (± 774) 0.99
es/lexer/jquery 4754258 ns/iter (± 2659) 4769362 ns/iter (± 4007) 1.00
es/lexer/jquery mobile 7316199 ns/iter (± 10119) 7363646 ns/iter (± 17339) 0.99
es/lexer/mootools 3713415 ns/iter (± 1881) 3738179 ns/iter (± 2033) 0.99
es/lexer/underscore 699569 ns/iter (± 540) 706577 ns/iter (± 798) 0.99
es/lexer/three 22279490 ns/iter (± 22773) 22434541 ns/iter (± 38311) 0.99
es/lexer/yui 4268793 ns/iter (± 4292) 4277558 ns/iter (± 2688) 1.00
es/parser/colors 33063 ns/iter (± 109) 33295 ns/iter (± 70) 0.99
es/parser/angular 17175232 ns/iter (± 261876) 16966707 ns/iter (± 228113) 1.01
es/parser/backbone 2419110 ns/iter (± 17332) 2408877 ns/iter (± 12087) 1.00
es/parser/jquery 13327471 ns/iter (± 104566) 13200453 ns/iter (± 88131) 1.01
es/parser/jquery mobile 20694636 ns/iter (± 446158) 21354832 ns/iter (± 360453) 0.97
es/parser/mootools 10035366 ns/iter (± 39352) 10092602 ns/iter (± 76027) 0.99
es/parser/underscore 2051840 ns/iter (± 12045) 2049281 ns/iter (± 11805) 1.00
es/parser/three 62311441 ns/iter (± 476966) 62895310 ns/iter (± 457018) 0.99
es/parser/yui 10249550 ns/iter (± 94455) 10218693 ns/iter (± 91698) 1.00
es/preset-env/usage/builtin_type 151260 ns/iter (± 32874) 152953 ns/iter (± 33701) 0.99
es/preset-env/usage/property 28952 ns/iter (± 60) 29155 ns/iter (± 114) 0.99
es/resolver/typescript 136468610 ns/iter (± 1811978) 139337012 ns/iter (± 3124593) 0.98
es/fixer/typescript 99228296 ns/iter (± 1876683) 96462180 ns/iter (± 5582311) 1.03
es/hygiene/typescript 211527754 ns/iter (± 1948300) 216289266 ns/iter (± 2659584) 0.98
es/resolver_with_hygiene/typescript 429097171 ns/iter (± 4152605) 429225873 ns/iter (± 4616499) 1.00
es/visitor/base-perf/module_clone 83957 ns/iter (± 390) 84179 ns/iter (± 424) 1.00
es/visitor/base-perf/fold_empty 93485 ns/iter (± 328) 93803 ns/iter (± 390) 1.00
es/visitor/base-perf/fold_noop_impl_all 93705 ns/iter (± 336) 93799 ns/iter (± 282) 1.00
es/visitor/base-perf/fold_noop_impl_vec 93856 ns/iter (± 400) 94163 ns/iter (± 294) 1.00
es/visitor/base-perf/boxing_boxed_clone 60 ns/iter (± 0) 60 ns/iter (± 0) 1
es/visitor/base-perf/boxing_unboxed_clone 44 ns/iter (± 0) 45 ns/iter (± 0) 0.98
es/visitor/base-perf/boxing_boxed 108 ns/iter (± 0) 107 ns/iter (± 0) 1.01
es/visitor/base-perf/boxing_unboxed 81 ns/iter (± 0) 81 ns/iter (± 0) 1
es/visitor/base-perf/visit_contains_this 3619 ns/iter (± 57) 3742 ns/iter (± 89) 0.97
es/base/parallel/resolver/typescript 7067325437 ns/iter (± 441208014) 6978526673 ns/iter (± 523544923) 1.01
es/base/parallel/hygiene/typescript 2461919523 ns/iter (± 24007683) 2403085576 ns/iter (± 16243604) 1.02
misc/visitors/time-complexity/time 5 113 ns/iter (± 0) 110 ns/iter (± 0) 1.03
misc/visitors/time-complexity/time 10 368 ns/iter (± 0) 367 ns/iter (± 0) 1.00
misc/visitors/time-complexity/time 15 770 ns/iter (± 1) 768 ns/iter (± 7) 1.00
misc/visitors/time-complexity/time 20 1439 ns/iter (± 9) 1435 ns/iter (± 0) 1.00
misc/visitors/time-complexity/time 40 7450 ns/iter (± 4) 7462 ns/iter (± 4) 1.00
misc/visitors/time-complexity/time 60 18851 ns/iter (± 12) 18869 ns/iter (± 9) 1.00
es/full-target/es2016 269983 ns/iter (± 408) 269168 ns/iter (± 322) 1.00
es/full-target/es2017 259661 ns/iter (± 432) 258584 ns/iter (± 317) 1.00
es/full-target/es2018 248639 ns/iter (± 297) 247465 ns/iter (± 471) 1.00
es2020_nullish_coalescing 97950 ns/iter (± 191) 97370 ns/iter (± 391) 1.01
es2020_optional_chaining 131837 ns/iter (± 113) 131075 ns/iter (± 383) 1.01
es2022_class_properties 156127 ns/iter (± 262) 156461 ns/iter (± 332) 1.00
es2018_object_rest_spread 99512 ns/iter (± 230) 99049 ns/iter (± 250) 1.00
es2019_optional_catch_binding 87869 ns/iter (± 224) 87308 ns/iter (± 274) 1.01
es2017_async_to_generator 88353 ns/iter (± 244) 88131 ns/iter (± 346) 1.00
es2016_exponentiation 95149 ns/iter (± 244) 94919 ns/iter (± 242) 1.00
es2015_arrow 98015 ns/iter (± 355) 97945 ns/iter (± 701) 1.00
es2015_block_scoped_fn 95966 ns/iter (± 269) 95833 ns/iter (± 303) 1.00
es2015_block_scoping 183976 ns/iter (± 244) 183812 ns/iter (± 286) 1.00

This comment was automatically generated by workflow using github-action-benchmark.

Please sign in to comment.