Do not block the main thread

This commit is contained in:
Maximilian Ammann 2022-01-21 16:06:09 +01:00
parent 8b1766c843
commit be9bb136eb
3 changed files with 8 additions and 7 deletions

View File

@ -8,7 +8,7 @@ pub fn fetch_munich_tiles(worker_loop: &mut WorkerLoop) {
// This size matches the amount of tiles which are loaded on zoom 15 on FHD // This size matches the amount of tiles which are loaded on zoom 15 on FHD
for x in 0..8 { for x in 0..8 {
for y in 0..5 { for y in 0..5 {
worker_loop.fetch((MUNICH_X + x, MUNICH_Y + y, MUNICH_Z).into()) worker_loop.try_fetch((MUNICH_X + x, MUNICH_Y + y, MUNICH_Z).into())
} }
} }
} }

View File

@ -42,15 +42,16 @@ impl WorkerLoop {
} }
} }
pub fn is_loaded(&self, coords: &TileCoords) -> bool { pub fn try_is_loaded(&self, coords: &TileCoords) -> bool {
if let Ok(loaded_coords) = self.loaded_coords.lock() { if let Ok(loaded_coords) = self.loaded_coords.try_lock() {
loaded_coords.contains(coords) loaded_coords.contains(coords)
} else { } else {
false false
} }
} }
pub fn fetch(&mut self, coords: TileCoords) {
if let Ok(mut loaded_coords) = self.loaded_coords.lock() { pub fn try_fetch(&mut self, coords: TileCoords) {
if let Ok(mut loaded_coords) = self.loaded_coords.try_lock() {
if loaded_coords.contains(&coords) { if loaded_coords.contains(&coords) {
return; return;
} }

View File

@ -363,9 +363,9 @@ impl RenderState {
for x in min_tile.x..max_tile.x + 1 { for x in min_tile.x..max_tile.x + 1 {
for y in min_tile.y..max_tile.y + 1 { for y in min_tile.y..max_tile.y + 1 {
let to_be_fetched = (x, y, 15).into(); let to_be_fetched = (x, y, 15).into();
if !worker_loop.is_loaded(&to_be_fetched) { if !worker_loop.try_is_loaded(&to_be_fetched) {
// FIXME: is_loaded is not correct right now // FIXME: is_loaded is not correct right now
worker_loop.fetch(to_be_fetched); worker_loop.try_fetch(to_be_fetched);
} }
} }
} }