refs #784 Extend JSON performance sample to test memoization of CAircraftModelList.

This commit is contained in:
Mathew Sutcliffe
2016-10-18 23:43:14 +01:00
committed by Klaus Basan
parent 45bb9a2737
commit f4982ffbc4
2 changed files with 52 additions and 4 deletions

View File

@@ -14,14 +14,17 @@
#include "blackcore/db/databasereader.h" #include "blackcore/db/databasereader.h"
#include "blackconfig/buildconfig.h" #include "blackconfig/buildconfig.h"
#include "blackmisc/simulation/aircraftmodellist.h" #include "blackmisc/simulation/aircraftmodellist.h"
#include "blackmisc/aviation/aircrafticaocodelist.h"
#include "blackmisc/aviation/aircraftsituation.h" #include "blackmisc/aviation/aircraftsituation.h"
#include "blackmisc/aviation/aircraftsituationlist.h" #include "blackmisc/aviation/aircraftsituationlist.h"
#include "blackmisc/aviation/altitude.h" #include "blackmisc/aviation/altitude.h"
#include "blackmisc/aviation/atcstation.h" #include "blackmisc/aviation/atcstation.h"
#include "blackmisc/aviation/atcstationlist.h" #include "blackmisc/aviation/atcstationlist.h"
#include "blackmisc/aviation/callsign.h" #include "blackmisc/aviation/callsign.h"
#include "blackmisc/aviation/liverylist.h"
#include "blackmisc/geo/coordinategeodetic.h" #include "blackmisc/geo/coordinategeodetic.h"
#include "blackmisc/pq/units.h" #include "blackmisc/pq/units.h"
#include "blackmisc/simulation/distributorlist.h"
#include "blackmisc/stringutils.h" #include "blackmisc/stringutils.h"
#include "blackmisc/testing.h" #include "blackmisc/testing.h"
@@ -336,14 +339,31 @@ namespace BlackSample
{ {
QTime timer; QTime timer;
auto situations = createSituations(0, 10000, 10); auto situations = createSituations(0, 10000, 10);
auto models = createModels(10000, 100);
timer.start(); timer.start();
QString s = situations.toJsonString(); QJsonObject json = situations.toJson();
out << "Convert 100,000 aircraft situations to JSON: " << timer.elapsed() << "ms" << endl; out << "Convert 100,000 aircraft situations to JSON: " << timer.elapsed() << "ms" << endl;
timer.start(); timer.start();
situations.convertFromJson(s); situations.convertFromJson(json);
out << "Convert 100,000 aircraft situations from JSON: " << timer.elapsed() << "ms" << endl << endl; out << "Convert 100,000 aircraft situations from JSON: " << timer.elapsed() << "ms" << endl << endl;
timer.start();
json = models.toJson();
out << "Convert 10,000 aircraft models to JSON (naive): " << timer.elapsed() << "ms" << endl;
timer.start();
models.convertFromJson(json);
out << "Convert 10,000 aircraft models from JSON (naive): " << timer.elapsed() << "ms" << endl << endl;
timer.start();
json = models.toMemoizedJson();
out << "Convert 10,000 aircraft models to JSON (memoize): " << timer.elapsed() << "ms" << endl;
timer.start();
models.convertFromMemoizedJson(json);
out << "Convert 10,000 aircraft models from JSON (memoize): " << timer.elapsed() << "ms" << endl << endl;
return 0; return 0;
} }
@@ -481,4 +501,28 @@ namespace BlackSample
return situations; return situations;
} }
CAircraftModelList CSamplesPerformance::createModels(int numberOfModels, int numberOfMemoParts)
{
CAircraftIcaoCodeList aircraftIcaos;
CLiveryList liveries;
CDistributorList distributors;
for (int i = 0; i < numberOfMemoParts; ++i)
{
aircraftIcaos.push_back(CAircraftIcaoCode("A" + QString::number(i), "A" + QString::number(i), "L1P", "Lego", "Foo", "M", false, false, false));
liveries.push_back(CLivery("A" + QString::number(i), CAirlineIcaoCode("A" + QString::number(i), "Foo", CCountry("DE", "Germany"), "Foo", false, false), "Foo", "red", "blue", false));
distributors.push_back(CDistributor(QString::number(i), "Foo", {}, {}, CSimulatorInfo::FSX));
}
CAircraftModelList models;
for (int i = 0; i < numberOfModels; ++i)
{
const auto &aircraftIcao = aircraftIcaos[qrand() % numberOfMemoParts];
const auto &livery = liveries[qrand() % numberOfMemoParts];
const auto &distributor = distributors[qrand() % numberOfMemoParts];
models.push_back(CAircraftModel(QString::number(i), CAircraftModel::TypeUnknown, CSimulatorInfo::FSX, QString::number(i), QString::number(i), aircraftIcao, livery));
models.back().setDistributor(distributor);
}
return models;
}
} // namespace } // namespace

View File

@@ -14,6 +14,7 @@
#define BLACKSAMPLE_SAMPLESPERFORMANCE_H #define BLACKSAMPLE_SAMPLESPERFORMANCE_H
#include "blackmisc/aviation/aircraftsituationlist.h" #include "blackmisc/aviation/aircraftsituationlist.h"
#include "blackmisc/simulation/aircraftmodellist.h"
#include <QTextStream> #include <QTextStream>
#include <QtGlobal> #include <QtGlobal>
@@ -47,6 +48,9 @@ namespace BlackSample
//! Situation values for testing //! Situation values for testing
static BlackMisc::Aviation::CAircraftSituationList createSituations(qint64 baseTimeEpoch, int numberOfCallsigns, int numberOfTimes); static BlackMisc::Aviation::CAircraftSituationList createSituations(qint64 baseTimeEpoch, int numberOfCallsigns, int numberOfTimes);
//! Model values for testing
static BlackMisc::Simulation::CAircraftModelList createModels(int numberOfModels, int numberOfMemoParts);
private: private:
static const qint64 DeltaTime = 10; static const qint64 DeltaTime = 10;