mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-28 20:00:24 -07:00
[Card Database] Improve loading times through binary cache (#7051)
* [Card Database] Improve loading times through binary cache Took 10 minutes Took 9 minutes Took 16 seconds * [Card Database] Remove lib qt include Took 18 minutes Took 14 seconds * Downgrade to 6.3 datastream Took 5 minutes * go up to 6.4 datastream Took 1 minute * Address comments * Small bug fixes Took 20 minutes Took 10 seconds * More fixes. Took 4 minutes Took 4 seconds * Even more fixes. Took 11 minutes Took 4 seconds * More fixes. Took 6 minutes Took 26 seconds Took 8 minutes * Namespace instead of class Took 6 minutes --------- Co-authored-by: Lukas Brübach <Bruebach.Lukas@bdosecurity.de>
This commit is contained in:
parent
4bb8831531
commit
749223c2dc
31 changed files with 1604 additions and 106 deletions
|
|
@ -2,6 +2,7 @@
|
|||
#define CARDDATABASE_PARSER_H
|
||||
|
||||
#include "../../card_info.h"
|
||||
#include "../card_database_data.h"
|
||||
|
||||
#include <QIODevice>
|
||||
#include <QString>
|
||||
|
|
@ -37,6 +38,15 @@ public:
|
|||
*/
|
||||
virtual void parseFile(QIODevice &device) = 0;
|
||||
|
||||
/**
|
||||
* @brief Parses a database file into the given snapshot, without emitting
|
||||
* any signals. Used for background loads that swap the snapshot into
|
||||
* the live database once complete.
|
||||
* @param device QIODevice representing the file content.
|
||||
* @param data Target snapshot to populate.
|
||||
*/
|
||||
virtual void parseFileInto(QIODevice &device, CardDatabaseData &data) = 0;
|
||||
|
||||
/**
|
||||
* @brief Saves card and set data to a file.
|
||||
* @param _formats
|
||||
|
|
@ -62,6 +72,21 @@ protected:
|
|||
static SetNameMap sets;
|
||||
ICardSetPriorityController *cardSetPriorityController;
|
||||
|
||||
/**
|
||||
* @brief Snapshot the current parse is filling, or nullptr when emitting signals.
|
||||
*
|
||||
* This is an implicit-inheritance-via-member-variable pattern: parseFileInto()
|
||||
* sets this before delegating to parseFile(), and loadCardsFromXml() /
|
||||
* loadFormats() check it to decide between direct insertion and signal
|
||||
* emission. Safe under the current model because loadFromFileMutex serialises
|
||||
* all parser access and parseFile() is never re-entered. If a future change
|
||||
* adds parallel parsing or a second parseFileInto() call within parseFile(),
|
||||
* this pointer would race -- at that point refactor to pass CardDatabaseData*
|
||||
* through the call chain instead. However, we are mostly RAM, not CPU bound on
|
||||
* DB startup at this point so there's not much point to parallel parsing.
|
||||
*/
|
||||
CardDatabaseData *targetData = nullptr;
|
||||
|
||||
/**
|
||||
* @brief Internal helper to add a set to the global set cache.
|
||||
* @param setName Short set name.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue