@@ -214,10 +214,18 @@ bool OpenStreetMap::resizeTilesCache(uint16_t numberOfTiles)
214214
215215void  OpenStreetMap::updateCache (const  tileList &requiredTiles, uint8_t  zoom)
216216{
217-     std::vector<TileJob> jobs;
218- 
219217    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+ }
220226
227+ void  OpenStreetMap::makeJobList (const  tileList &requiredTiles, std::vector<TileJob> &jobs, uint8_t  zoom)
228+ {
221229    for  (const  auto  &[x, y] : requiredTiles)
222230    {
223231        if  (isTileCached (x, y, zoom) || y < 0  || y >= (1  << zoom))
@@ -229,27 +237,25 @@ void OpenStreetMap::updateCache(const tileList &requiredTiles, uint8_t zoom)
229237
230238        jobs.push_back ({x, static_cast <uint32_t >(y), zoom, tileToReplace});
231239    }
240+ }
232241
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 ());
238245
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)
240249        {
241-             if  ( xQueueSend (jobQueue, &job, portMAX_DELAY) != pdPASS) 
242-                  log_e ( " Failed to enqueue TileJob " ) ;
250+             log_e ( " Failed to enqueue TileJob " ); 
251+             --pendingJobs ;
243252        }
244253
245-          while  (pendingJobs.load () > 0 )
246-              delay (1 );
254+     while  (pendingJobs.load () > 0 )
255+         delay (1 );
247256
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 ;
253259}
254260
255261bool  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
483489
484490    currentInstance = this ;
485491    currentTileBuffer = tile.buffer ;
486-      
492+ 
487493    const  int  decodeResult = png->decode (0 , PNG_FAST_PALETTE);
488494    if  (decodeResult != PNG_SUCCESS)
489495    {
0 commit comments