mirror of
https://github.com/swc-project/swc.git
synced 2024-12-26 23:27:56 +03:00
97 lines
2.7 KiB
Rust
97 lines
2.7 KiB
Rust
extern crate swc_node_base;
|
|
|
|
use std::{
|
|
env,
|
|
path::{Path, PathBuf},
|
|
process::Command,
|
|
sync::Arc,
|
|
};
|
|
|
|
use criterion::{black_box, criterion_group, criterion_main, Bencher, Criterion};
|
|
use once_cell::sync::Lazy;
|
|
use swc_common::{
|
|
plugin::{PluginSerializedBytes, VersionedSerializable},
|
|
FileName, FilePathMapping, SourceMap,
|
|
};
|
|
use swc_ecma_ast::EsVersion;
|
|
use swc_ecma_parser::parse_file_as_program;
|
|
use swc_plugin_runner::cache::PluginModuleCache;
|
|
|
|
static SOURCE: &str = include_str!("./assets/input.js");
|
|
|
|
fn plugin_group(c: &mut Criterion) {
|
|
let plugin_dir = PathBuf::from(env::var("CARGO_MANIFEST_DIR").unwrap())
|
|
.join("..")
|
|
.join("..")
|
|
.join("tests")
|
|
.join("rust-plugins")
|
|
.join("swc_internal_plugin");
|
|
|
|
{
|
|
let mut cmd = Command::new("cargo");
|
|
|
|
cmd.current_dir(&plugin_dir);
|
|
cmd.arg("build")
|
|
.arg("--release")
|
|
.arg("--target=wasm32-unknown-unknown");
|
|
|
|
let status = cmd.status().unwrap();
|
|
assert!(status.success());
|
|
}
|
|
|
|
c.bench_function("es/plugin/invoke/1", |b| bench_transform(b, &plugin_dir));
|
|
}
|
|
|
|
fn bench_transform(b: &mut Bencher, plugin_dir: &Path) {
|
|
let cache: Lazy<PluginModuleCache> = Lazy::new(PluginModuleCache::new);
|
|
|
|
b.iter(|| {
|
|
let cm = Arc::new(SourceMap::new(FilePathMapping::empty()));
|
|
|
|
let fm = cm.new_source_file(FileName::Real("src/test.ts".into()), SOURCE.to_string());
|
|
|
|
let program = parse_file_as_program(
|
|
&fm,
|
|
Default::default(),
|
|
EsVersion::latest(),
|
|
None,
|
|
&mut vec![],
|
|
)
|
|
.unwrap();
|
|
|
|
let program = VersionedSerializable::new(program);
|
|
let program_ser = PluginSerializedBytes::try_serialize(&program).unwrap();
|
|
|
|
let mut transform_plugin_executor = swc_plugin_runner::create_plugin_transform_executor(
|
|
&plugin_dir
|
|
.join("target")
|
|
.join("wasm32-unknown-unknown")
|
|
.join("release")
|
|
.join("swc_internal_plugin.wasm"),
|
|
&swc_plugin_runner::cache::PLUGIN_MODULE_CACHE,
|
|
&cm,
|
|
)
|
|
.unwrap();
|
|
|
|
let res = transform_plugin_executor
|
|
.transform(
|
|
&program_ser,
|
|
&PluginSerializedBytes::try_serialize(&VersionedSerializable::new(String::from(
|
|
"{}",
|
|
)))
|
|
.unwrap(),
|
|
&PluginSerializedBytes::try_serialize(&VersionedSerializable::new(String::from(
|
|
"{}",
|
|
)))
|
|
.unwrap(),
|
|
true,
|
|
)
|
|
.unwrap();
|
|
|
|
let _ = black_box(res);
|
|
})
|
|
}
|
|
|
|
criterion_group!(benches, plugin_group);
|
|
criterion_main!(benches);
|