mirror of
https://github.com/swc-project/swc.git
synced 2024-11-25 22:34:04 +03:00
perf(es/codegen): Use scoped allocator (#9248)
**Description:** Main: <img width="711" alt="스크린샷 2024-07-15 오후 8 05 50" src="https://github.com/user-attachments/assets/508a29e8-744f-4017-a819-b7576e61d287"> new: <img width="711" alt="스크린샷 2024-07-15 오후 8 05 19" src="https://github.com/user-attachments/assets/bcf3107d-e843-4fab-8b8a-fc6376705273">
This commit is contained in:
parent
5cc6449734
commit
970f32398c
5
Cargo.lock
generated
5
Cargo.lock
generated
@ -3841,6 +3841,7 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sourcemap",
|
||||
"swc_allocator",
|
||||
"swc_atoms",
|
||||
"swc_common",
|
||||
"swc_config",
|
||||
@ -4151,6 +4152,7 @@ dependencies = [
|
||||
"serde",
|
||||
"serde_json",
|
||||
"sourcemap",
|
||||
"swc_allocator",
|
||||
"swc_atoms",
|
||||
"swc_common",
|
||||
"swc_ecma_ast",
|
||||
@ -4592,6 +4594,7 @@ dependencies = [
|
||||
"rustc-hash",
|
||||
"serde",
|
||||
"smallvec",
|
||||
"swc_allocator",
|
||||
"swc_atoms",
|
||||
"swc_common",
|
||||
"swc_ecma_ast",
|
||||
@ -4763,6 +4766,7 @@ dependencies = [
|
||||
"serde",
|
||||
"sha1",
|
||||
"string_enum",
|
||||
"swc_allocator",
|
||||
"swc_atoms",
|
||||
"swc_common",
|
||||
"swc_config",
|
||||
@ -4966,6 +4970,7 @@ dependencies = [
|
||||
"codspeed-criterion-compat",
|
||||
"criterion",
|
||||
"serde",
|
||||
"swc_allocator",
|
||||
"swc_common",
|
||||
"swc_ecma_ast",
|
||||
"swc_ecma_codegen",
|
||||
|
@ -21,6 +21,7 @@ rustc-hash = { workspace = true }
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
serde_json = { workspace = true }
|
||||
sourcemap = { workspace = true }
|
||||
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
|
||||
|
||||
swc_atoms = { version = "0.6.5", path = "../swc_atoms" }
|
||||
swc_common = { version = "0.35.0", path = "../swc_common", features = [
|
||||
|
@ -171,10 +171,10 @@ where
|
||||
{
|
||||
let _timer = timer!("Compiler::print");
|
||||
|
||||
let mut src_map_buf = vec![];
|
||||
let mut src_map_buf = swc_allocator::vec::Vec::new();
|
||||
|
||||
let src = {
|
||||
let mut buf = vec![];
|
||||
let mut buf = Vec::new();
|
||||
{
|
||||
let mut w = swc_ecma_codegen::text_writer::JsWriter::new(
|
||||
cm.clone(),
|
||||
|
@ -164,7 +164,7 @@ impl Stmt {
|
||||
}
|
||||
}
|
||||
|
||||
// Memory layout depedns on the version of rustc.
|
||||
// Memory layout depends on the version of rustc.
|
||||
// #[cfg(target_pointer_width = "64")]
|
||||
// assert_eq_size!(Stmt, [u8; 56]);
|
||||
|
||||
|
@ -25,6 +25,7 @@ serde = { workspace = true }
|
||||
sourcemap = { workspace = true }
|
||||
tracing = { workspace = true }
|
||||
|
||||
swc_allocator = { version = "0.1.5", path = "../swc_allocator" }
|
||||
swc_atoms = { version = "0.6.5", path = "../swc_atoms" }
|
||||
swc_common = { version = "0.35.0", path = "../swc_common" }
|
||||
swc_ecma_ast = { version = "0.116.0", path = "../swc_ecma_ast" }
|
||||
|
@ -1,6 +1,7 @@
|
||||
extern crate swc_malloc;
|
||||
|
||||
use codspeed_criterion_compat::{black_box, criterion_group, criterion_main, Bencher, Criterion};
|
||||
use swc_allocator::{vec::Vec, Allocator};
|
||||
use swc_common::FileName;
|
||||
use swc_ecma_codegen::Emitter;
|
||||
use swc_ecma_parser::{Parser, StringInput, Syntax};
|
||||
@ -84,7 +85,6 @@ fn bench_emitter(b: &mut Bencher, s: &str) {
|
||||
let fm = cm.new_source_file(FileName::Anon.into(), s.into());
|
||||
let mut parser = Parser::new(Syntax::default(), StringInput::from(&*fm), None);
|
||||
|
||||
let mut src_map_buf = vec![];
|
||||
let module = parser
|
||||
.parse_module()
|
||||
.map_err(|e| e.into_diagnostic(handler).emit())
|
||||
@ -95,7 +95,11 @@ fn bench_emitter(b: &mut Bencher, s: &str) {
|
||||
}
|
||||
|
||||
b.iter(|| {
|
||||
let mut buf = vec![];
|
||||
let alloc = Allocator::default();
|
||||
let _guard = unsafe { alloc.guard() };
|
||||
let mut src_map_buf = Vec::new();
|
||||
|
||||
let mut buf = Vec::new();
|
||||
{
|
||||
let mut emitter = Emitter {
|
||||
cfg: Default::default(),
|
||||
|
@ -1,6 +1,7 @@
|
||||
extern crate swc_malloc;
|
||||
|
||||
use codspeed_criterion_compat::{black_box, criterion_group, criterion_main, Bencher, Criterion};
|
||||
use swc_allocator::vec::Vec;
|
||||
use swc_common::FileName;
|
||||
use swc_ecma_codegen::Emitter;
|
||||
use swc_ecma_parser::{Parser, StringInput, Syntax};
|
||||
@ -84,7 +85,7 @@ fn bench_emitter(b: &mut Bencher, s: &str) {
|
||||
b.iter(|| {
|
||||
let fm = cm.new_source_file(FileName::Anon.into(), s.into());
|
||||
let mut parser = Parser::new(Syntax::default(), StringInput::from(&*fm), None);
|
||||
let mut src_map_buf = vec![];
|
||||
let mut src_map_buf = Vec::new();
|
||||
let module = parser
|
||||
.parse_module()
|
||||
.map_err(|e| e.into_diagnostic(handler).emit())
|
||||
|
@ -9,6 +9,7 @@ use std::{
|
||||
time::Instant,
|
||||
};
|
||||
|
||||
use swc_allocator::vec::Vec;
|
||||
use swc_common::input::SourceFileInput;
|
||||
use swc_ecma_ast::*;
|
||||
use swc_ecma_codegen::{text_writer::JsWriter, Emitter};
|
||||
@ -30,7 +31,7 @@ fn parse_and_gen(entry: &Path) {
|
||||
.expect("failed to parse input as a module");
|
||||
|
||||
let mut code = vec![];
|
||||
let mut srcmap = vec![];
|
||||
let mut srcmap = Vec::new();
|
||||
|
||||
{
|
||||
let mut emitter = Emitter {
|
||||
@ -56,7 +57,7 @@ fn parse_and_gen(entry: &Path) {
|
||||
.expect("failed to process a module");
|
||||
}
|
||||
|
||||
/// Usage: ./scripts/instruements path/to/input/file
|
||||
/// Usage: ./scripts/instruments path/to/input/file
|
||||
fn main() {
|
||||
let main_file = env::args().nth(1).unwrap();
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
use std::path::PathBuf;
|
||||
|
||||
use swc_allocator::vec::Vec;
|
||||
use swc_common::{comments::SingleThreadedComments, FileName, SourceMap};
|
||||
use swc_ecma_parser;
|
||||
use swc_ecma_testing::{exec_node_js, JsExecOptions};
|
||||
@ -44,11 +45,11 @@ impl Builder {
|
||||
where
|
||||
F: for<'aa> FnOnce(&mut Emitter<'aa, Box<(dyn WriteJs + 'aa)>, SourceMap>),
|
||||
{
|
||||
let mut buf = vec![];
|
||||
let mut buf = Vec::new();
|
||||
|
||||
self.with(src, &mut buf, op);
|
||||
|
||||
String::from_utf8(buf).unwrap()
|
||||
String::from_utf8_lossy(&buf).into_owned()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,7 @@
|
||||
use std::io::Write;
|
||||
|
||||
use rustc_hash::FxHashSet;
|
||||
use swc_allocator::vec::Vec;
|
||||
use swc_common::{sync::Lrc, BytePos, LineCol, SourceMap, Span};
|
||||
|
||||
use super::{Result, WriteJs};
|
||||
|
@ -3,6 +3,7 @@ use std::{fs::read_to_string, path::PathBuf};
|
||||
use base64::prelude::{Engine, BASE64_STANDARD};
|
||||
use rustc_hash::FxHashSet;
|
||||
use sourcemap::SourceMap;
|
||||
use swc_allocator::vec::Vec;
|
||||
use swc_common::{comments::SingleThreadedComments, source_map::SourceMapGenConfig};
|
||||
use swc_ecma_ast::EsVersion;
|
||||
use swc_ecma_codegen::{text_writer::WriteJs, Emitter};
|
||||
@ -315,7 +316,7 @@ fn identity(entry: PathBuf) {
|
||||
Some(&comments),
|
||||
);
|
||||
let mut parser: Parser<Lexer> = Parser::new_from(lexer);
|
||||
let mut src_map = vec![];
|
||||
let mut src_map = Vec::new();
|
||||
|
||||
{
|
||||
let mut wr = Box::new(swc_ecma_codegen::text_writer::JsWriter::new(
|
||||
|
@ -34,6 +34,7 @@ swc_ecma_ast = { version = "0.116.0", path = "../swc_ecma_ast" }
|
||||
swc_ecma_parser = { version = "0.147.0", path = "../swc_ecma_parser" }
|
||||
swc_ecma_utils = { version = "0.131.0", path = "../swc_ecma_utils" }
|
||||
swc_ecma_visit = { version = "0.102.0", path = "../swc_ecma_visit" }
|
||||
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
|
||||
|
||||
[dev-dependencies]
|
||||
codspeed-criterion-compat = { workspace = true }
|
||||
|
@ -27,6 +27,7 @@ serde = { workspace = true, features = ["derive"], optional = true }
|
||||
sha1 = { workspace = true }
|
||||
|
||||
string_enum = { version = "0.4.4", path = "../string_enum" }
|
||||
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
|
||||
swc_atoms = { version = "0.6.5", path = "../swc_atoms" }
|
||||
swc_common = { version = "0.35.0", path = "../swc_common" }
|
||||
swc_config = { version = "0.1.13", path = "../swc_config" }
|
||||
|
@ -1,3 +1,4 @@
|
||||
use swc_allocator::vec::Vec;
|
||||
use swc_common::{comments::SingleThreadedComments, sync::Lrc, FileName, Mark, SourceMap};
|
||||
use swc_ecma_codegen::{text_writer::JsWriter, Emitter};
|
||||
use swc_ecma_parser::{Parser, StringInput};
|
||||
@ -40,8 +41,8 @@ fn emit(
|
||||
comments: Lrc<SingleThreadedComments>,
|
||||
program: &Module,
|
||||
) -> String {
|
||||
let mut src_map_buf = vec![];
|
||||
let mut buf = vec![];
|
||||
let mut src_map_buf = Vec::new();
|
||||
let mut buf = std::vec::Vec::new();
|
||||
{
|
||||
let writer = Box::new(JsWriter::new(
|
||||
source_map.clone(),
|
||||
|
@ -13,6 +13,7 @@ version = "0.2.2"
|
||||
[dependencies]
|
||||
anyhow = { workspace = true }
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
|
||||
|
||||
swc_common = { version = "0.35.0", path = "../swc_common", features = [
|
||||
"sourcemap",
|
||||
|
@ -241,7 +241,7 @@ pub fn operate(
|
||||
|
||||
let mut src = vec![];
|
||||
let mut src_map_buf = if options.source_map {
|
||||
Some(vec![])
|
||||
Some(swc_allocator::vec::Vec::new())
|
||||
} else {
|
||||
None
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user