Skip to content

Commit 970f323

Browse files
committedJul 16, 2024·
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">
1 parent 5cc6449 commit 970f323

File tree

16 files changed

+34
-14
lines changed

16 files changed

+34
-14
lines changed
 

‎Cargo.lock

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎crates/swc_compiler_base/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ rustc-hash = { workspace = true }
2121
serde = { workspace = true, features = ["derive"] }
2222
serde_json = { workspace = true }
2323
sourcemap = { workspace = true }
24+
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
2425

2526
swc_atoms = { version = "0.6.5", path = "../swc_atoms" }
2627
swc_common = { version = "0.35.0", path = "../swc_common", features = [

‎crates/swc_compiler_base/src/lib.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -171,10 +171,10 @@ where
171171
{
172172
let _timer = timer!("Compiler::print");
173173

174-
let mut src_map_buf = vec![];
174+
let mut src_map_buf = swc_allocator::vec::Vec::new();
175175

176176
let src = {
177-
let mut buf = vec![];
177+
let mut buf = Vec::new();
178178
{
179179
let mut w = swc_ecma_codegen::text_writer::JsWriter::new(
180180
cm.clone(),

‎crates/swc_ecma_ast/src/stmt.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ impl Stmt {
164164
}
165165
}
166166

167-
// Memory layout depedns on the version of rustc.
167+
// Memory layout depends on the version of rustc.
168168
// #[cfg(target_pointer_width = "64")]
169169
// assert_eq_size!(Stmt, [u8; 56]);
170170

‎crates/swc_ecma_codegen/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ serde = { workspace = true }
2525
sourcemap = { workspace = true }
2626
tracing = { workspace = true }
2727

28+
swc_allocator = { version = "0.1.5", path = "../swc_allocator" }
2829
swc_atoms = { version = "0.6.5", path = "../swc_atoms" }
2930
swc_common = { version = "0.35.0", path = "../swc_common" }
3031
swc_ecma_ast = { version = "0.116.0", path = "../swc_ecma_ast" }

‎crates/swc_ecma_codegen/benches/bench.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
extern crate swc_malloc;
22

33
use codspeed_criterion_compat::{black_box, criterion_group, criterion_main, Bencher, Criterion};
4+
use swc_allocator::{vec::Vec, Allocator};
45
use swc_common::FileName;
56
use swc_ecma_codegen::Emitter;
67
use swc_ecma_parser::{Parser, StringInput, Syntax};
@@ -84,7 +85,6 @@ fn bench_emitter(b: &mut Bencher, s: &str) {
8485
let fm = cm.new_source_file(FileName::Anon.into(), s.into());
8586
let mut parser = Parser::new(Syntax::default(), StringInput::from(&*fm), None);
8687

87-
let mut src_map_buf = vec![];
8888
let module = parser
8989
.parse_module()
9090
.map_err(|e| e.into_diagnostic(handler).emit())
@@ -95,7 +95,11 @@ fn bench_emitter(b: &mut Bencher, s: &str) {
9595
}
9696

9797
b.iter(|| {
98-
let mut buf = vec![];
98+
let alloc = Allocator::default();
99+
let _guard = unsafe { alloc.guard() };
100+
let mut src_map_buf = Vec::new();
101+
102+
let mut buf = Vec::new();
99103
{
100104
let mut emitter = Emitter {
101105
cfg: Default::default(),

‎crates/swc_ecma_codegen/benches/with_parse.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
extern crate swc_malloc;
22

33
use codspeed_criterion_compat::{black_box, criterion_group, criterion_main, Bencher, Criterion};
4+
use swc_allocator::vec::Vec;
45
use swc_common::FileName;
56
use swc_ecma_codegen::Emitter;
67
use swc_ecma_parser::{Parser, StringInput, Syntax};
@@ -84,7 +85,7 @@ fn bench_emitter(b: &mut Bencher, s: &str) {
8485
b.iter(|| {
8586
let fm = cm.new_source_file(FileName::Anon.into(), s.into());
8687
let mut parser = Parser::new(Syntax::default(), StringInput::from(&*fm), None);
87-
let mut src_map_buf = vec![];
88+
let mut src_map_buf = Vec::new();
8889
let module = parser
8990
.parse_module()
9091
.map_err(|e| e.into_diagnostic(handler).emit())

‎crates/swc_ecma_codegen/examples/sourcemap.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ use std::{
99
time::Instant,
1010
};
1111

12+
use swc_allocator::vec::Vec;
1213
use swc_common::input::SourceFileInput;
1314
use swc_ecma_ast::*;
1415
use swc_ecma_codegen::{text_writer::JsWriter, Emitter};
@@ -30,7 +31,7 @@ fn parse_and_gen(entry: &Path) {
3031
.expect("failed to parse input as a module");
3132

3233
let mut code = vec![];
33-
let mut srcmap = vec![];
34+
let mut srcmap = Vec::new();
3435

3536
{
3637
let mut emitter = Emitter {
@@ -56,7 +57,7 @@ fn parse_and_gen(entry: &Path) {
5657
.expect("failed to process a module");
5758
}
5859

59-
/// Usage: ./scripts/instruements path/to/input/file
60+
/// Usage: ./scripts/instruments path/to/input/file
6061
fn main() {
6162
let main_file = env::args().nth(1).unwrap();
6263

‎crates/swc_ecma_codegen/src/tests.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::path::PathBuf;
22

3+
use swc_allocator::vec::Vec;
34
use swc_common::{comments::SingleThreadedComments, FileName, SourceMap};
45
use swc_ecma_parser;
56
use swc_ecma_testing::{exec_node_js, JsExecOptions};
@@ -44,11 +45,11 @@ impl Builder {
4445
where
4546
F: for<'aa> FnOnce(&mut Emitter<'aa, Box<(dyn WriteJs + 'aa)>, SourceMap>),
4647
{
47-
let mut buf = vec![];
48+
let mut buf = Vec::new();
4849

4950
self.with(src, &mut buf, op);
5051

51-
String::from_utf8(buf).unwrap()
52+
String::from_utf8_lossy(&buf).into_owned()
5253
}
5354
}
5455

‎crates/swc_ecma_codegen/src/text_writer/basic_impl.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::io::Write;
22

33
use rustc_hash::FxHashSet;
4+
use swc_allocator::vec::Vec;
45
use swc_common::{sync::Lrc, BytePos, LineCol, SourceMap, Span};
56

67
use super::{Result, WriteJs};

‎crates/swc_ecma_codegen/tests/sourcemap.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use std::{fs::read_to_string, path::PathBuf};
33
use base64::prelude::{Engine, BASE64_STANDARD};
44
use rustc_hash::FxHashSet;
55
use sourcemap::SourceMap;
6+
use swc_allocator::vec::Vec;
67
use swc_common::{comments::SingleThreadedComments, source_map::SourceMapGenConfig};
78
use swc_ecma_ast::EsVersion;
89
use swc_ecma_codegen::{text_writer::WriteJs, Emitter};
@@ -315,7 +316,7 @@ fn identity(entry: PathBuf) {
315316
Some(&comments),
316317
);
317318
let mut parser: Parser<Lexer> = Parser::new_from(lexer);
318-
let mut src_map = vec![];
319+
let mut src_map = Vec::new();
319320

320321
{
321322
let mut wr = Box::new(swc_ecma_codegen::text_writer::JsWriter::new(

‎crates/swc_ecma_transforms_base/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ swc_ecma_ast = { version = "0.116.0", path = "../swc_ecma_ast" }
3434
swc_ecma_parser = { version = "0.147.0", path = "../swc_ecma_parser" }
3535
swc_ecma_utils = { version = "0.131.0", path = "../swc_ecma_utils" }
3636
swc_ecma_visit = { version = "0.102.0", path = "../swc_ecma_visit" }
37+
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
3738

3839
[dev-dependencies]
3940
codspeed-criterion-compat = { workspace = true }

‎crates/swc_ecma_transforms_react/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ serde = { workspace = true, features = ["derive"], optional = true }
2727
sha1 = { workspace = true }
2828

2929
string_enum = { version = "0.4.4", path = "../string_enum" }
30+
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
3031
swc_atoms = { version = "0.6.5", path = "../swc_atoms" }
3132
swc_common = { version = "0.35.0", path = "../swc_common" }
3233
swc_config = { version = "0.1.13", path = "../swc_config" }

‎crates/swc_ecma_transforms_react/src/pure_annotations/tests.rs

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use swc_allocator::vec::Vec;
12
use swc_common::{comments::SingleThreadedComments, sync::Lrc, FileName, Mark, SourceMap};
23
use swc_ecma_codegen::{text_writer::JsWriter, Emitter};
34
use swc_ecma_parser::{Parser, StringInput};
@@ -40,8 +41,8 @@ fn emit(
4041
comments: Lrc<SingleThreadedComments>,
4142
program: &Module,
4243
) -> String {
43-
let mut src_map_buf = vec![];
44-
let mut buf = vec![];
44+
let mut src_map_buf = Vec::new();
45+
let mut buf = std::vec::Vec::new();
4546
{
4647
let writer = Box::new(JsWriter::new(
4748
source_map.clone(),

‎crates/swc_fast_ts_strip/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ version = "0.2.2"
1313
[dependencies]
1414
anyhow = { workspace = true }
1515
serde = { workspace = true, features = ["derive"] }
16+
swc_allocator = { version = "0.1.5", path = "../swc_allocator", default-features = false }
1617

1718
swc_common = { version = "0.35.0", path = "../swc_common", features = [
1819
"sourcemap",

‎crates/swc_fast_ts_strip/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ pub fn operate(
241241

242242
let mut src = vec![];
243243
let mut src_map_buf = if options.source_map {
244-
Some(vec![])
244+
Some(swc_allocator::vec::Vec::new())
245245
} else {
246246
None
247247
};

0 commit comments

Comments
 (0)
Please sign in to comment.