Skip to content

Commit c9d8bc9

Browse files
authored
add garbage collection (vercel#3094)
fixes WEB-265 fixes WEB-268 fixes WEB-4 fixes WEB-359
1 parent f912781 commit c9d8bc9

File tree

35 files changed

+1747
-272
lines changed

35 files changed

+1747
-272
lines changed

Cargo.lock

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

crates/auto-hash-map/src/map.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ impl<K: Debug, V: Debug, H> Debug for AutoMap<K, V, H> {
3434

3535
impl<K, V> AutoMap<K, V, RandomState> {
3636
/// see [HashMap::new](https://doc.rust-lang.org/std/collections/struct.HashMap.html#method.new)
37-
pub fn new() -> Self {
37+
pub const fn new() -> Self {
3838
AutoMap::List(Vec::new())
3939
}
4040

crates/auto-hash-map/src/set.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ impl<K: Debug, H> Debug for AutoSet<K, H> {
3030

3131
impl<K> AutoSet<K, RandomState> {
3232
/// see [HashSet::new](https://doc.rust-lang.org/std/collections/hash_set/struct.HashSet.html#method.new)
33-
pub fn new() -> Self {
33+
pub const fn new() -> Self {
3434
Self {
3535
map: AutoMap::new(),
3636
}

crates/next-dev/src/devserver_options.rs

+6
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@ pub struct DevServerOptions {
7878
#[cfg_attr(feature = "serializable", serde(default))]
7979
pub full_stats: bool,
8080

81+
/// Enable experimental garbage collection with the provided memory limit in
82+
/// MB.
83+
#[cfg_attr(feature = "cli", clap(long))]
84+
#[cfg_attr(feature = "serializable", serde(default))]
85+
pub memory_limit: Option<usize>,
86+
8187
// ==
8288
// = Inherited options from next-dev, need revisit later.
8389
// ==

crates/next-dev/src/lib.rs

+3-1
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,9 @@ pub async fn start_server(options: &DevServerOptions) -> Result<()> {
409409
dir.clone()
410410
};
411411

412-
let tt = TurboTasks::new(MemoryBackend::new());
412+
let tt = TurboTasks::new(MemoryBackend::new(
413+
options.memory_limit.map_or(usize::MAX, |l| l * 1024 * 1024),
414+
));
413415

414416
let stats_type = match options.full_stats {
415417
true => StatsType::Full,

crates/next-dev/tests/integration.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ async fn run_test(resource: &str) -> JestRunResult {
135135
let mock_server_future = get_mock_server_future(&mock_dir);
136136

137137
let server = NextDevServerBuilder::new(
138-
TurboTasks::new(MemoryBackend::new()),
138+
TurboTasks::new(MemoryBackend::default()),
139139
sys_to_unix(&project_dir.to_string_lossy()).to_string(),
140140
sys_to_unix(&workspace_root.to_string_lossy()).to_string(),
141141
)

crates/node-file-trace/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -399,7 +399,7 @@ pub async fn start(args: Arc<Args>) -> Result<Vec<String>> {
399399

400400
run(
401401
args.clone(),
402-
|| TurboTasks::new(MemoryBackend::new()),
402+
|| TurboTasks::new(MemoryBackend::default()),
403403
|tt, root_task, _| async move {
404404
if visualize_graph {
405405
let mut stats = Stats::new();

crates/turbo-tasks-fetch/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ serde = "1.0.136"
2323
tokio = "1.11.0"
2424
turbo-tasks = { path = "../turbo-tasks" }
2525
turbo-tasks-fs = { path = "../turbo-tasks-fs" }
26-
turbo-tasks-memory = { path = "../turbo-tasks-memory" }
2726
turbopack-core = { path = "../turbopack-core" }
2827

2928
[dev-dependencies]
3029
httpmock = "0.6.6"
3130
tokio = { version = "1.11.0", features = ["full"] }
31+
turbo-tasks-memory = { path = "../turbo-tasks-memory" }
3232
turbo-tasks-testing = { path = "../turbo-tasks-testing" }
3333

3434
[build-dependencies]

crates/turbo-tasks-fs/examples/hash_directory.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ async fn main() -> Result<()> {
2626
"/register_example_hash_directory.rs"
2727
));
2828

29-
let tt = TurboTasks::new(MemoryBackend::new());
29+
let tt = TurboTasks::new(MemoryBackend::default());
3030
let start = Instant::now();
3131

3232
let task = tt.spawn_root_task(|| {

crates/turbo-tasks-fs/examples/hash_glob.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ async fn main() -> Result<()> {
2323
register();
2424
include!(concat!(env!("OUT_DIR"), "/register_example_hash_glob.rs"));
2525

26-
let tt = TurboTasks::new(MemoryBackend::new());
26+
let tt = TurboTasks::new(MemoryBackend::default());
2727
let start = Instant::now();
2828

2929
let task = tt.spawn_root_task(|| {

crates/turbo-tasks-memory/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ nohash-hasher = "0.2.0"
1818
num_cpus = "1.13.1"
1919
once_cell = "1.13.0"
2020
parking_lot = "0.12.1"
21+
priority-queue = "1.3.0"
2122
rustc-hash = "1.1.0"
2223
tokio = "1.21.2"
2324
turbo-malloc = { path = "../turbo-malloc", default-features = false }

crates/turbo-tasks-memory/benches/scope_stress.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ pub fn scope_stress(c: &mut Criterion) {
3737
let size = *size;
3838

3939
b.to_async(rt).iter_with_large_drop(move || {
40-
let tt = TurboTasks::new(MemoryBackend::new());
40+
let tt = TurboTasks::new(MemoryBackend::default());
4141
async move {
4242
(0..size)
4343
.map(|a| (a, size - 1))

crates/turbo-tasks-memory/benches/stress.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ pub fn fibonacci(c: &mut Criterion) {
3333
let size = *size;
3434

3535
b.to_async(rt).iter_with_large_drop(move || {
36-
let tt = TurboTasks::new(MemoryBackend::new());
36+
let tt = TurboTasks::new(MemoryBackend::default());
3737
async move {
3838
let task = tt.spawn_once_task(async move {
3939
// Number of tasks:

0 commit comments

Comments
 (0)