From 2d760a7bff71c46c5aeba37c40d236ea16eefea2 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 3 Apr 2016 17:31:59 -0500 Subject: Don't write back dive data that hasn't changed in git This caches the git ID for the dive on load, and avoids building the dive directory and hashing it on save as long as nothing has invalidated the git ID cache. That should make it much faster to write back data to the git repository, since the dive tree structure and the divecomputer blobs in particular are the bulk of it (due to all the sample data). It's not actually the git operations that are all that expensive, it's literally generating the big blob with all the snprintf() calls for the data. The git save used to be a fairly expensive with large data sets, especially noticeable on mobile with much weaker CPU's. This should speed things up by at least a factor of two. Signed-off-by: Linus Torvalds Signed-off-by: Dirk Hohndel --- desktop-widgets/maintab.cpp | 4 +++- desktop-widgets/simplewidgets.cpp | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'desktop-widgets') diff --git a/desktop-widgets/maintab.cpp b/desktop-widgets/maintab.cpp index 3c9518247..eddf90b98 100644 --- a/desktop-widgets/maintab.cpp +++ b/desktop-widgets/maintab.cpp @@ -1049,8 +1049,10 @@ void MainTab::acceptChanges() // each dive that was selected might have had the temperatures in its active divecomputer changed // so re-populate the temperatures - easiest way to do this is by calling fixup_dive for_each_dive (i, d) { - if (d->selected) + if (d->selected) { fixup_dive(d); + invalidate_dive_cache(d); + } } } if (editMode != TRIP && current_dive->divetrip) { diff --git a/desktop-widgets/simplewidgets.cpp b/desktop-widgets/simplewidgets.cpp index 6d46a49c7..6c9ec3f96 100644 --- a/desktop-widgets/simplewidgets.cpp +++ b/desktop-widgets/simplewidgets.cpp @@ -153,8 +153,10 @@ void RenumberDialog::buttonClicked(QAbstractButton *button) int newNr = ui.spinBox->value(); struct dive *dive = NULL; for_each_dive (i, dive) { - if (!selectedOnly || dive->selected) + if (!selectedOnly || dive->selected) { + invalidate_dive_cache(dive); renumberedDives.insert(dive->id, QPair(dive->number, newNr++)); + } } UndoRenumberDives *undoCommand = new UndoRenumberDives(renumberedDives); MainWindow::instance()->undoStack->push(undoCommand); @@ -189,8 +191,10 @@ void SetpointDialog::setpointData(struct divecomputer *divecomputer, int second) void SetpointDialog::buttonClicked(QAbstractButton *button) { - if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole && dc) + if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole && dc) { add_event(dc, time, SAMPLE_EVENT_PO2, 0, (int)(1000.0 * ui.spinbox->value()), "SP change"); + invalidate_dive_cache(current_dive); + } mark_divelist_changed(true); MainWindow::instance()->graphics()->replot(); } -- cgit v1.2.3-70-g09d2