mirror of
https://github.com/maplibre/maplibre-rs.git
synced 2025-12-08 19:05:57 +00:00
Optimize tessellate_layers
This commit is contained in:
parent
53021bdbb2
commit
491c7945d4
@ -82,22 +82,23 @@ impl ThreadLocalTessellatorState {
|
|||||||
request_id: TileRequestID,
|
request_id: TileRequestID,
|
||||||
data: Box<[u8]>,
|
data: Box<[u8]>,
|
||||||
) -> Result<(), SendError<TileTessellateResult>> {
|
) -> Result<(), SendError<TileTessellateResult>> {
|
||||||
if let Ok(tile_request_state) = self.tile_request_state.lock() {
|
if let Some(tile_request) = self
|
||||||
if let Some(tile_request) = tile_request_state.get_tile_request(request_id) {
|
.tile_request_state
|
||||||
self.tessellate_layers_with_request(
|
.lock()
|
||||||
TileFetchResult::Tile {
|
.ok()
|
||||||
coords: tile_request.coords,
|
.and_then(|tile_request_state| tile_request_state.get_tile_request(request_id))
|
||||||
data,
|
{
|
||||||
},
|
self.tessellate_layers_with_request(
|
||||||
&tile_request,
|
TileFetchResult::Tile {
|
||||||
request_id,
|
coords: tile_request.coords,
|
||||||
)
|
data,
|
||||||
} else {
|
},
|
||||||
Ok(())
|
&tile_request,
|
||||||
}
|
request_id,
|
||||||
} else {
|
)?;
|
||||||
Ok(())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
fn tessellate_layers_with_request(
|
fn tessellate_layers_with_request(
|
||||||
@ -191,16 +192,15 @@ impl IOScheduler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn try_populate_cache(&mut self) {
|
pub fn try_populate_cache(&mut self) {
|
||||||
if let Ok(result) = self.result_receiver.try_recv() {
|
if let Ok(mut tile_request_state) = self.tile_request_state.try_lock() {
|
||||||
match result {
|
if let Ok(result) = self.result_receiver.try_recv() {
|
||||||
TileTessellateResult::Tile { request_id } => loop {
|
match result {
|
||||||
if let Ok(mut tile_request_state) = self.tile_request_state.try_lock() {
|
TileTessellateResult::Tile { request_id } => {
|
||||||
tile_request_state.finish_tile_request(request_id);
|
tile_request_state.finish_tile_request(request_id);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
},
|
TileTessellateResult::Layer(layer_result) => {
|
||||||
TileTessellateResult::Layer(layer_result) => {
|
self.tile_cache.push(layer_result);
|
||||||
self.tile_cache.push(layer_result);
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -219,6 +219,8 @@ impl IOScheduler {
|
|||||||
) -> Result<(), SendError<TileRequest>> {
|
) -> Result<(), SendError<TileRequest>> {
|
||||||
let TileRequest { coords, layers } = &tile_request;
|
let TileRequest { coords, layers } = &tile_request;
|
||||||
|
|
||||||
|
// TODO: Optimize: Dropping TileRequest is expensive
|
||||||
|
|
||||||
if !self.tile_cache.is_layers_missing(coords, layers) {
|
if !self.tile_cache.is_layers_missing(coords, layers) {
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user