Skip to content

Commit 3ca4a82

Browse files
Refactor updateCache (#78)
* Refactor `updateCache` * Decrease `pendingJobs` when adding a job to the queue fails
1 parent 25146f9 commit 3ca4a82

File tree

2 files changed

+26
-18
lines changed

2 files changed

+26
-18
lines changed

src/OpenStreetMap-esp32.cpp

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -214,10 +214,18 @@ bool OpenStreetMap::resizeTilesCache(uint16_t numberOfTiles)
214214

215215
void 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

255261
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
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
{

src/OpenStreetMap-esp32.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ class OpenStreetMap
9292
double lat2tile(double lat, uint8_t zoom);
9393
void computeRequiredTiles(double longitude, double latitude, uint8_t zoom, tileList &requiredTiles);
9494
void updateCache(const tileList &requiredTiles, uint8_t zoom);
95+
void makeJobList(const tileList &requiredTiles, std::vector<TileJob> &jobs, uint8_t zoom);
96+
void runJobs(const std::vector<TileJob> &jobs);
9597
CachedTile *findUnusedTile(const tileList &requiredTiles, uint8_t zoom);
9698
bool isTileCached(uint32_t x, uint32_t y, uint8_t z);
9799
bool fetchTile(CachedTile &tile, uint32_t x, uint32_t y, uint8_t zoom, String &result);

0 commit comments

Comments
 (0)