mirror of
https://github.com/esphome/esphome.git
synced 2026-06-02 11:08:06 +08:00
[preferences] Replace per-element erase with clear() in sync() (#13934)
This commit is contained in:
@@ -124,14 +124,11 @@ class ESP32Preferences : public ESPPreferences {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
ESP_LOGV(TAG, "Saving %zu items...", s_pending_save.size());
|
ESP_LOGV(TAG, "Saving %zu items...", s_pending_save.size());
|
||||||
// goal try write all pending saves even if one fails
|
|
||||||
int cached = 0, written = 0, failed = 0;
|
int cached = 0, written = 0, failed = 0;
|
||||||
esp_err_t last_err = ESP_OK;
|
esp_err_t last_err = ESP_OK;
|
||||||
uint32_t last_key = 0;
|
uint32_t last_key = 0;
|
||||||
|
|
||||||
// go through vector from back to front (makes erase easier/more efficient)
|
for (const auto &save : s_pending_save) {
|
||||||
for (ssize_t i = s_pending_save.size() - 1; i >= 0; i--) {
|
|
||||||
const auto &save = s_pending_save[i];
|
|
||||||
char key_str[KEY_BUFFER_SIZE];
|
char key_str[KEY_BUFFER_SIZE];
|
||||||
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
||||||
ESP_LOGVV(TAG, "Checking if NVS data %s has changed", key_str);
|
ESP_LOGVV(TAG, "Checking if NVS data %s has changed", key_str);
|
||||||
@@ -150,8 +147,9 @@ class ESP32Preferences : public ESPPreferences {
|
|||||||
ESP_LOGV(TAG, "NVS data not changed skipping %" PRIu32 " len=%zu", save.key, save.len);
|
ESP_LOGV(TAG, "NVS data not changed skipping %" PRIu32 " len=%zu", save.key, save.len);
|
||||||
cached++;
|
cached++;
|
||||||
}
|
}
|
||||||
s_pending_save.erase(s_pending_save.begin() + i);
|
|
||||||
}
|
}
|
||||||
|
s_pending_save.clear();
|
||||||
|
|
||||||
ESP_LOGD(TAG, "Writing %d items: %d cached, %d written, %d failed", cached + written + failed, cached, written,
|
ESP_LOGD(TAG, "Writing %d items: %d cached, %d written, %d failed", cached + written + failed, cached, written,
|
||||||
failed);
|
failed);
|
||||||
if (failed > 0) {
|
if (failed > 0) {
|
||||||
|
|||||||
@@ -114,14 +114,11 @@ class LibreTinyPreferences : public ESPPreferences {
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
ESP_LOGV(TAG, "Saving %zu items...", s_pending_save.size());
|
ESP_LOGV(TAG, "Saving %zu items...", s_pending_save.size());
|
||||||
// goal try write all pending saves even if one fails
|
|
||||||
int cached = 0, written = 0, failed = 0;
|
int cached = 0, written = 0, failed = 0;
|
||||||
fdb_err_t last_err = FDB_NO_ERR;
|
fdb_err_t last_err = FDB_NO_ERR;
|
||||||
uint32_t last_key = 0;
|
uint32_t last_key = 0;
|
||||||
|
|
||||||
// go through vector from back to front (makes erase easier/more efficient)
|
for (const auto &save : s_pending_save) {
|
||||||
for (ssize_t i = s_pending_save.size() - 1; i >= 0; i--) {
|
|
||||||
const auto &save = s_pending_save[i];
|
|
||||||
char key_str[KEY_BUFFER_SIZE];
|
char key_str[KEY_BUFFER_SIZE];
|
||||||
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
snprintf(key_str, sizeof(key_str), "%" PRIu32, save.key);
|
||||||
ESP_LOGVV(TAG, "Checking if FDB data %s has changed", key_str);
|
ESP_LOGVV(TAG, "Checking if FDB data %s has changed", key_str);
|
||||||
@@ -141,8 +138,9 @@ class LibreTinyPreferences : public ESPPreferences {
|
|||||||
ESP_LOGD(TAG, "FDB data not changed; skipping %" PRIu32 " len=%zu", save.key, save.len);
|
ESP_LOGD(TAG, "FDB data not changed; skipping %" PRIu32 " len=%zu", save.key, save.len);
|
||||||
cached++;
|
cached++;
|
||||||
}
|
}
|
||||||
s_pending_save.erase(s_pending_save.begin() + i);
|
|
||||||
}
|
}
|
||||||
|
s_pending_save.clear();
|
||||||
|
|
||||||
ESP_LOGD(TAG, "Writing %d items: %d cached, %d written, %d failed", cached + written + failed, cached, written,
|
ESP_LOGD(TAG, "Writing %d items: %d cached, %d written, %d failed", cached + written + failed, cached, written,
|
||||||
failed);
|
failed);
|
||||||
if (failed > 0) {
|
if (failed > 0) {
|
||||||
|
|||||||
Reference in New Issue
Block a user