Skip to content

Commit

Permalink
Merge pull request #1532 from Karry/qt-less-db-thread
Browse files Browse the repository at this point in the history
Qt less db thread
  • Loading branch information
Framstag committed Dec 3, 2023
2 parents 798512c + 86135f1 commit df98776
Show file tree
Hide file tree
Showing 64 changed files with 978 additions and 809 deletions.
10 changes: 1 addition & 9 deletions StyleEditor/src/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,13 +30,5 @@ MainWindow::MainWindow(const DBThreadRef& dbThread)
: QQmlApplicationEngine(QUrl("qrc:/qml/main.qml")),
dbThread(dbThread)
{
connect(dbThread.get(),
SIGNAL(initialisationFinished(const DatabaseLoadedResponse&)),
this,
SLOT(InitialisationFinished(const DatabaseLoadedResponse&)));
}

void MainWindow::InitialisationFinished(const DatabaseLoadedResponse& /*response*/) // NOLINT
{
osmscout::log.Info() << "InitialisationFinished()";
dbThread->databaseLoadFinished.Connect(dbLoadedSlot);
}
9 changes: 6 additions & 3 deletions StyleEditor/src/MainWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,12 +30,15 @@ class MainWindow : public QQmlApplicationEngine
{
Q_OBJECT

public slots:
void InitialisationFinished(const osmscout::DatabaseLoadedResponse& response);

private:
osmscout::DBThreadRef dbThread;

osmscout::Slot<osmscout::GeoBox> dbLoadedSlot{
[](const osmscout::GeoBox &) {
osmscout::log.Info() << "InitialisationFinished()";
}
};

public:
explicit MainWindow(const osmscout::DBThreadRef& dbThread);
};
Expand Down
3 changes: 2 additions & 1 deletion StyleEditor/src/StyleAnalyser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@

#include <StyleAnalyser.h>

#include <osmscoutclientqt/DBThread.h>
#include <osmscoutclient/DBThread.h>

#include <osmscoutclientqt/OSMScoutQt.h>

using namespace osmscout;
Expand Down
2 changes: 1 addition & 1 deletion StyleEditor/src/StyleEditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,7 +105,7 @@ int main(int argc, char* argv[])
MainWindow window(dbThread);
result = app.exec();

QString tmpStylesheet(dbThread->GetStylesheetFilename()+TMP_SUFFIX);
QString tmpStylesheet = QString::fromStdString(dbThread->GetStylesheetFilename()+TMP_SUFFIX);
if(QFile::exists(tmpStylesheet)){
QFile::remove(tmpStylesheet);
}
Expand Down
4 changes: 2 additions & 2 deletions Tests/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -601,7 +601,7 @@ if buildClientQt
threadingMocs,
include_directories: [testIncDir, osmscoutmapqtIncDir, osmscoutclientIncDir, osmscoutmapIncDir, osmscoutIncDir, osmscoutclientqtIncDir],
dependencies: [mathDep, threadDep, openmpDep, qtClientDep],
link_with: [osmscoutmapqt, osmscoutmap, osmscout, osmscoutclientqt],
link_with: [osmscoutmapqt, osmscoutmap, osmscout, osmscoutclient, osmscoutclientqt],
install: true,
install_dir: testInstallDir)
endif
Expand All @@ -614,7 +614,7 @@ if buildClientQt
testMocs,
include_directories: [testIncDir, osmscoutmapqtIncDir, osmscoutmapIncDir, osmscoutIncDir, osmscoutclientIncDir, osmscoutclientqtIncDir],
dependencies: [mathDep, threadDep, openmpDep, qtClientDep],
link_with: [osmscoutmapqt, osmscoutmap, osmscout, osmscoutclientqt],
link_with: [osmscoutmapqt, osmscoutmap, osmscout, osmscoutclient, osmscoutclientqt],
install: true,
install_dir: testInstallDir)
endif
Expand Down
12 changes: 6 additions & 6 deletions Tests/src/ClientQtThreading.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ void ThreadingTest::test()
connect(loadJob, &DBLoadJob::finished,
this, &ThreadingTest::onLoadJobFinished);

dbThread->RunJob(loadJob);
dbThread->RunJob(std::bind(&DBLoadJob::Run, loadJob, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3));
}

void ThreadingTest::onLoadJobFinished(QMap<QString,QMap<osmscout::TileKey,osmscout::TileRef>> tiles)
Expand All @@ -99,7 +99,7 @@ void ThreadingTest::onLoadJobFinished(QMap<QString,QMap<osmscout::TileKey,osmsco

for (const auto &tileKey:map.keys()){
const auto &tile=map[tileKey];
std::cout << "Stylesheet: " << dbThread->GetStylesheetFilename().toStdString()
std::cout << "Stylesheet: " << dbThread->GetStylesheetFilename()
<< ", " << dbPath.toStdString()
<< ", " << tileKey.GetDisplayText()
<< " object count: " << tile->GetAreaData().GetDataSize()
Expand All @@ -110,9 +110,9 @@ void ThreadingTest::onLoadJobFinished(QMap<QString,QMap<osmscout::TileKey,osmsco
objectCount += tile->GetAreaData().GetDataSize() + tile->GetWayData().GetDataSize() + tile->GetNodeData().GetDataSize();
}
}
std::cout << "Stylesheet: " << dbThread->GetStylesheetFilename().toStdString() << ", sum object count: " << objectCount << std::endl;
if (objectCountPerStylesheet.contains(dbThread->GetStylesheetFilename())){
size_t lastObjectCount = objectCountPerStylesheet[dbThread->GetStylesheetFilename()];
std::cout << "Stylesheet: " << dbThread->GetStylesheetFilename() << ", sum object count: " << objectCount << std::endl;
if (objectCountPerStylesheet.contains(QString::fromStdString(dbThread->GetStylesheetFilename()))){
size_t lastObjectCount = objectCountPerStylesheet[QString::fromStdString(dbThread->GetStylesheetFilename())];
if (objectCount < lastObjectCount){
std::cerr << "Less objects! " << lastObjectCount << " > " << objectCount << std::endl;
failure = true;
Expand All @@ -121,7 +121,7 @@ void ThreadingTest::onLoadJobFinished(QMap<QString,QMap<osmscout::TileKey,osmsco
}
}

objectCountPerStylesheet[dbThread->GetStylesheetFilename()] = objectCount;
objectCountPerStylesheet[QString::fromStdString(dbThread->GetStylesheetFilename())] = objectCount;

stylesheetCtn++;
emit loadStyleRequested(stylesheets.at(stylesheetCtn % stylesheets.size()).absoluteFilePath(),
Expand Down
3 changes: 2 additions & 1 deletion Tests/src/HeaderCheck.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ static const std::set<std::string> allowedDependencies{
"osmscout.ost => osmscout.io", // Fix this?
"osmscout.ost => osmscout.feature",
"osmscout.ost => osmscout", // Fix this
"osmscout.elevation => osmscout.async",
"osmscout.elevation => osmscout.lib",
"osmscout.elevation => osmscout.system",
"osmscout.elevation => osmscout.log",
Expand Down Expand Up @@ -136,6 +137,7 @@ static const std::set<std::string> allowedDependencies{
"osmscout.navigation => osmscout", // Fix this

"osmscoutclient => osmscoutclient.json",
"osmscoutclient => osmscoutclient.private",
"osmscoutclient => osmscout",
"osmscoutclient => osmscout.async",
"osmscoutclient => osmscout.db",
Expand Down Expand Up @@ -163,7 +165,6 @@ static const std::set<std::string> allowedDependencies{
"osmscoutclientqt => osmscoutmapqt",
"osmscoutclientqt => osmscoutclient",
"osmscoutclientqt => osmscoutclient.json",
"osmscoutclientqt => osmscoutclientqt.private",

"osmscoutgpx => osmscout.system",
"osmscoutgpx => osmscout.async",
Expand Down
6 changes: 2 additions & 4 deletions libosmscout-client-qt/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ set(CMAKE_AUTORCC ON)
set(HEADER_FILES
include/osmscoutclientqt/AdminRegionInfo.h
include/osmscoutclientqt/ClientQtImportExport.h
include/osmscoutclientqt/DBThread.h
include/osmscoutclientqt/ElevationChartWidget.h
include/osmscoutclientqt/ElevationModule.h
include/osmscoutclientqt/FileDownloader.h
Expand All @@ -30,7 +29,7 @@ set(HEADER_FILES
include/osmscoutclientqt/MapStyleModel.h
include/osmscoutclientqt/StyleFlagsModel.h
include/osmscoutclientqt/OSMScoutQt.h
include/osmscoutclientqt/DBJob.h
include/osmscoutclientqt/DBLoadJob.h
include/osmscoutclientqt/LookupModule.h
include/osmscoutclientqt/SearchModule.h
include/osmscoutclientqt/StyleModule.h
Expand Down Expand Up @@ -62,7 +61,6 @@ set(HEADER_FILES
)

set(SOURCE_FILES
src/osmscoutclientqt/DBThread.cpp
src/osmscoutclientqt/ElevationChartWidget.cpp
src/osmscoutclientqt/ElevationModule.cpp
src/osmscoutclientqt/FileDownloader.cpp
Expand All @@ -87,7 +85,7 @@ set(SOURCE_FILES
src/osmscoutclientqt/MapStyleModel.cpp
src/osmscoutclientqt/StyleFlagsModel.cpp
src/osmscoutclientqt/OSMScoutQt.cpp
src/osmscoutclientqt/DBJob.cpp
src/osmscoutclientqt/DBLoadJob.cpp
src/osmscoutclientqt/LookupModule.cpp
src/osmscoutclientqt/SearchModule.cpp
src/osmscoutclientqt/StyleModule.cpp
Expand Down
3 changes: 1 addition & 2 deletions libosmscout-client-qt/include/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ osmscoutclientqtIncDir = include_directories('.')
osmscoutclientqtHeader = [
'osmscoutclientqt/AdminRegionInfo.h',
'osmscoutclientqt/ClientQtImportExport.h',
'osmscoutclientqt/DBThread.h',
'osmscoutclientqt/ElevationChartWidget.h',
'osmscoutclientqt/ElevationModule.h',
'osmscoutclientqt/RoutingModel.h',
Expand Down Expand Up @@ -38,7 +37,7 @@ osmscoutclientqtHeader = [
'osmscoutclientqt/MapStyleModel.h',
'osmscoutclientqt/StyleFlagsModel.h',
'osmscoutclientqt/OSMScoutQt.h',
'osmscoutclientqt/DBJob.h',
'osmscoutclientqt/DBLoadJob.h',
'osmscoutclientqt/LookupModule.h',
'osmscoutclientqt/SearchModule.h',
'osmscoutclientqt/StyleModule.h',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#ifndef OSMSCOUT_CLIENT_QT_DBOPERATION_H
#define OSMSCOUT_CLIENT_QT_DBOPERATION_H
#ifndef OSMSCOUT_CLIENT_QT_DBLOADJOB_H
#define OSMSCOUT_CLIENT_QT_DBLOADJOB_H

/*
OSMScout - a Qt backend for libosmscout and libosmscout-map
Expand All @@ -25,7 +25,6 @@
#include <QList>
#include <QThread>
#include <QMap>
#include <shared_mutex>

#include <osmscout/projection/MercatorProjection.h>

Expand All @@ -34,36 +33,18 @@
#include <osmscoutmap/DataTileCache.h>

#include <osmscoutclient/DBInstance.h>
#include <osmscoutclient/DBJob.h>

#include <osmscoutclientqt/ClientQtImportExport.h>

#include <shared_mutex>

namespace osmscout {

/**
* \ingroup QtAPI
*/
class OSMSCOUT_CLIENT_QT_API DBJob : public QObject{
Q_OBJECT

protected:
osmscout::BasemapDatabaseRef basemapDatabase; //!< Optional reference to the basemap db
std::list<DBInstanceRef> databases; //!< borrowed databases
QThread *thread; //!< job thread

private:
std::shared_lock<std::shared_mutex> locker; //!< db locker

public:
DBJob();
~DBJob() override;

virtual void Run(const osmscout::BasemapDatabaseRef& basempaDatabase,
const std::list<DBInstanceRef> &databases,
std::shared_lock<std::shared_mutex> &&locker);
virtual void Close();
};

class OSMSCOUT_CLIENT_QT_API DBLoadJob : public DBJob{
class OSMSCOUT_CLIENT_QT_API DBLoadJob : public QObject, public DBJob {
Q_OBJECT

private:
Expand Down Expand Up @@ -98,7 +79,7 @@ protected slots:

~DBLoadJob() override;

void Run(const osmscout::BasemapDatabaseRef& basempaDatabase,
void Run(const osmscout::BasemapDatabaseRef& basemapDatabase,
const std::list<DBInstanceRef> &databases,
std::shared_lock<std::shared_mutex> &&locker) override;

Expand All @@ -123,4 +104,4 @@ protected slots:

}

#endif /* OSMSCOUT_CLIENT_QT_DBOPERATION_H */
#endif /* OSMSCOUT_CLIENT_QT_DBLOADJOB_H */
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,16 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/

#include <osmscoutclientqt/OverlayObject.h>
#include <osmscoutclientqt/DBThread.h>
#include <osmscoutclientqt/ClientQtImportExport.h>

#include <osmscout/elevation/ElevationService.h>

#include <osmscoutclientqt/ClientQtImportExport.h>
#include <osmscoutclient/DBThread.h>

#include <osmscoutclientqt/OverlayObject.h>

#include <QThread>

#include <memory>

namespace osmscout {
Expand Down
3 changes: 2 additions & 1 deletion libosmscout-client-qt/include/osmscoutclientqt/IconLookup.h
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,11 @@

#include <osmscoutmap/DataTileCache.h>

#include <osmscoutclientqt/DBThread.h>
#include <osmscoutclient/DBThread.h>

#include <osmscoutclientqt/ClientQtImportExport.h>
#include <osmscoutclientqt/OverlayObject.h>
#include <osmscoutclientqt/DBLoadJob.h>

#include <QObject>
#include <QSettings>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class OSMSCOUT_CLIENT_QT_API LocationInfoModel : public QAbstractListModel

public slots:
void setLocation(const double lat, const double lon);
void dbInitialized(const DatabaseLoadedResponse&);
void dbInitialized(const osmscout::GeoBox&);
void onLocationDescription(const osmscout::GeoCoord location,
const QString database,
const osmscout::LocationDescription description,
Expand Down
12 changes: 10 additions & 2 deletions libosmscout-client-qt/include/osmscoutclientqt/LookupModule.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,11 @@
#include <osmscout/feature/WebsiteFeature.h>
#include <osmscout/feature/OpeningHoursFeature.h>

#include <osmscoutclientqt/DBThread.h>
#include <osmscoutclient/DBThread.h>

#include <osmscoutclientqt/ClientQtImportExport.h>
#include <osmscoutclientqt/LocationEntry.h>
#include <osmscoutclientqt/DBLoadJob.h>

namespace osmscout {

Expand Down Expand Up @@ -94,8 +96,14 @@ class OSMSCOUT_CLIENT_QT_API LookupModule:public QObject{
QRectF filterRectangle;
std::map<QString,std::map<osmscout::FileOffset,AdminRegionInfoRef>> adminRegionCache;

Slot<osmscout::GeoBox> dbLoadedSlot{
[this](const osmscout::GeoBox &b) {
emit initialisationFinished(b);
}
};

signals:
void initialisationFinished(const DatabaseLoadedResponse& response);
void initialisationFinished(const osmscout::GeoBox& response);
void viewObjectsLoaded(const MapViewStruct&,
const QList<LookupModule::ObjectInfo> &objects);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,9 @@

#include <osmscoutclientqt/ClientQtImportExport.h>

#include <osmscoutclient/DBThread.h>

#include <osmscoutclientqt/MapDownloader.h>
#include <osmscoutclientqt/DBThread.h>

#include <QObject>
#include <QStringList>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@
#include <osmscout/GeoCoord.h>
#include <osmscout/util/GeoBox.h>

#include <osmscoutclientqt/DBThread.h>
#include <osmscoutclientqt/LookupModule.h>
#include <osmscoutclient/DBThread.h>

#include <osmscoutclientqt/LookupModule.h>
#include <osmscoutclientqt/LocationInfoModel.h>
#include <osmscoutclientqt/ClientQtImportExport.h>

Expand Down Expand Up @@ -72,7 +72,7 @@ class OSMSCOUT_CLIENT_QT_API MapObjectInfoModel: public QAbstractListModel
void objectsRequested(const LocationEntry &entry, bool reverseLookupAddresses);

public slots:
void dbInitialized(const DatabaseLoadedResponse&);
void dbInitialized(const osmscout::GeoBox&);
void setPosition(QObject *mapView,
const int width, const int height,
const int screenX, const int screenY);
Expand Down
8 changes: 6 additions & 2 deletions libosmscout-client-qt/include/osmscoutclientqt/MapRenderer.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,11 @@

#include <osmscoutmap/DataTileCache.h>

#include <osmscoutclientqt/DBThread.h>
#include <osmscoutclient/DBThread.h>

#include <osmscoutclientqt/ClientQtImportExport.h>
#include <osmscoutclientqt/OverlayObject.h>
#include <osmscoutclientqt/DBLoadJob.h>

#include <QObject>
#include <QSettings>
Expand All @@ -38,7 +39,7 @@ namespace osmscout {
/**
* \ingroup QtAPI
*/
class OSMSCOUT_CLIENT_QT_API DBRenderJob : public DBJob{
class OSMSCOUT_CLIENT_QT_API DBRenderJob : public QObject, public DBJob{
Q_OBJECT
private:
osmscout::MercatorProjection renderProjection;
Expand Down Expand Up @@ -117,6 +118,7 @@ class OSMSCOUT_CLIENT_QT_API MapRenderer : public QObject {
void fontSizeSignal(double);
void showAltLanguageSignal(bool);
void unitsSignal(QString);
void stylesheetFilenameChanged();

private:
// slots
Expand Down Expand Up @@ -156,6 +158,8 @@ class OSMSCOUT_CLIENT_QT_API MapRenderer : public QObject {
}
};

Slot<> stylesheetFilenameChangedSlot{ std::bind(&MapRenderer::stylesheetFilenameChanged, this) };

public slots:
virtual void Initialize() = 0;

Expand Down
Loading

0 comments on commit df98776

Please sign in to comment.