@@ -214,10 +214,18 @@ bool OpenStreetMap::resizeTilesCache(uint16_t numberOfTiles)
214
214
215
215
void OpenStreetMap::updateCache (const tileList &requiredTiles, uint8_t zoom)
216
216
{
217
- std::vector<TileJob> jobs;
218
-
219
217
const unsigned long startMS = millis ();
218
+ std::vector<TileJob> jobs;
219
+ makeJobList (requiredTiles, jobs, zoom);
220
+ if (!jobs.empty ())
221
+ {
222
+ runJobs (jobs);
223
+ log_i (" Cache updated in %lu ms" , millis () - startMS);
224
+ }
225
+ }
220
226
227
+ void OpenStreetMap::makeJobList (const tileList &requiredTiles, std::vector<TileJob> &jobs, uint8_t zoom)
228
+ {
221
229
for (const auto &[x, y] : requiredTiles)
222
230
{
223
231
if (isTileCached (x, y, zoom) || y < 0 || y >= (1 << zoom))
@@ -229,27 +237,25 @@ void OpenStreetMap::updateCache(const tileList &requiredTiles, uint8_t zoom)
229
237
230
238
jobs.push_back ({x, static_cast <uint32_t >(y), zoom, tileToReplace});
231
239
}
240
+ }
232
241
233
- if (!jobs.empty ())
234
- {
235
- pendingJobs.store (jobs.size ());
236
-
237
- log_i (" submitting %i jobs" , (int )jobs.size ());
242
+ void OpenStreetMap::runJobs (const std::vector<TileJob> &jobs)
243
+ {
244
+ log_i (" submitting %i jobs" , (int )jobs.size ());
238
245
239
- for (const TileJob &job : jobs)
246
+ pendingJobs.store (jobs.size ());
247
+ for (const TileJob &job : jobs)
248
+ if (xQueueSend (jobQueue, &job, portMAX_DELAY) != pdPASS)
240
249
{
241
- if ( xQueueSend (jobQueue, &job, portMAX_DELAY) != pdPASS)
242
- log_e ( " Failed to enqueue TileJob " ) ;
250
+ log_e ( " Failed to enqueue TileJob " );
251
+ --pendingJobs ;
243
252
}
244
253
245
- while (pendingJobs.load () > 0 )
246
- delay (1 );
254
+ while (pendingJobs.load () > 0 )
255
+ delay (1 );
247
256
248
- for (const TileJob &job : jobs)
249
- job.tile ->busy = false ;
250
-
251
- log_i (" Cache updated in %lu ms" , millis () - startMS);
252
- }
257
+ for (const TileJob &job : jobs)
258
+ job.tile ->busy = false ;
253
259
}
254
260
255
261
bool OpenStreetMap::composeMap (LGFX_Sprite &mapSprite, const tileList &requiredTiles, uint8_t zoom)
@@ -483,7 +489,7 @@ bool OpenStreetMap::fetchTile(CachedTile &tile, uint32_t x, uint32_t y, uint8_t
483
489
484
490
currentInstance = this ;
485
491
currentTileBuffer = tile.buffer ;
486
-
492
+
487
493
const int decodeResult = png->decode (0 , PNG_FAST_PALETTE);
488
494
if (decodeResult != PNG_SUCCESS)
489
495
{
0 commit comments