Skip to content

Commit

Permalink
job processing refactored
Browse files Browse the repository at this point in the history
  • Loading branch information
chrxh committed Sep 30, 2024
1 parent 6be3b53 commit 69107a8
Show file tree
Hide file tree
Showing 19 changed files with 149 additions and 61 deletions.
7 changes: 5 additions & 2 deletions source/Gui/AutosaveWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include "Base/GlobalSettings.h"

#include "AlienImGui.h"
#include "OverlayMessageController.h"
#include "StyleRepository.h"
#include "Viewport.h"

Expand All @@ -13,9 +14,9 @@ namespace
auto constexpr RightColumnWidth = 200.0f;
}

_AutosaveWindow::_AutosaveWindow(SimulationController const& simController)
_AutosaveWindow::_AutosaveWindow(PersisterController const& persisterController)
: _AlienWindow("Autosave", "windows.autosave", false)
, _simController(simController)
, _persisterController(persisterController)
{
_settingsOpen = GlobalSettings::getInstance().getBool("windows.autosave.settings.open", _settingsOpen);
_settingsHeight = GlobalSettings::getInstance().getFloat("windows.autosave.settings.height", _settingsHeight);
Expand Down Expand Up @@ -161,6 +162,8 @@ void _AutosaveWindow::processSettings()

void _AutosaveWindow::onCreateSave()
{
printOverlayMessage("Saving ...");
_persisterController->saveSimulationToDisc("d:\\test2.sim", Viewport::getZoomFactor(), Viewport::getCenterInWorldPos());
}

void _AutosaveWindow::validationAndCorrection()
Expand Down
5 changes: 3 additions & 2 deletions source/Gui/AutosaveWindow.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,12 @@

#include "Definitions.h"
#include "AlienWindow.h"
#include "PersisterInterface/PersisterController.h"

class _AutosaveWindow : public _AlienWindow
{
public:
_AutosaveWindow(SimulationController const& simController);
_AutosaveWindow(PersisterController const& persisterController);
~_AutosaveWindow();

private:
Expand All @@ -21,7 +22,7 @@ class _AutosaveWindow : public _AlienWindow

void validationAndCorrection();

SimulationController _simController;
PersisterController _persisterController;

bool _settingsOpen = false;
float _settingsHeight = 100.0f;
Expand Down
2 changes: 1 addition & 1 deletion source/Gui/Main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ int main(int argc, char** argv)
try {
simController = std::make_shared<_SimulationControllerImpl>();
persisterController = std::make_shared<_PersisterControllerImpl>();
mainWindow = std::make_shared<_MainWindow>(simController, logger);
mainWindow = std::make_shared<_MainWindow>(simController, persisterController, logger);
mainWindow->mainLoop();
mainWindow->shutdown();

Expand Down
12 changes: 8 additions & 4 deletions source/Gui/MainWindow.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include "implot.h"
#include "Fonts/IconsFontAwesome5.h"

#include "PersisterInterface/PersisterController.h"
#include "EngineInterface/SerializerService.h"
#include "EngineInterface/SimulationController.h"
#include "Network/NetworkService.h"
Expand Down Expand Up @@ -91,12 +92,13 @@ namespace
}
}

_MainWindow::_MainWindow(SimulationController const& simController, GuiLogger const& logger)
_MainWindow::_MainWindow(SimulationController const& simController, PersisterController const& persisterController, GuiLogger const& logger)
: _logger(logger)
, _simController(simController)
, _persisterController(persisterController)
{
IMGUI_CHECKVERSION();

_logger = logger;
_simController = simController;

log(Priority::Important, "initialize GLFW and OpenGL");
auto glfwVersion = initGlfw();
Expand Down Expand Up @@ -157,7 +159,8 @@ _MainWindow::_MainWindow(SimulationController const& simController, GuiLogger co
_networkSettingsDialog = std::make_shared<_NetworkSettingsDialog>(_browserWindow);
_imageToPatternDialog = std::make_shared<_ImageToPatternDialog>(_simController);
_shaderWindow = std::make_shared<_ShaderWindow>(_simulationView);
_autosaveWindow = std::make_shared<_AutosaveWindow>(_simController);
_autosaveWindow = std::make_shared<_AutosaveWindow>(_persisterController);
_persisterController->init(_simController);

//cyclic references
_browserWindow->registerCyclicReferences(_loginDialog, _uploadSimulationDialog, _editSimulationDialog, _editorController->getGenomeEditorWindow());
Expand Down Expand Up @@ -239,6 +242,7 @@ void _MainWindow::shutdown()

_simulationView.reset();

_persisterController->shutdown();
_simController->closeSimulation();
NetworkService::shutdown();
}
Expand Down
6 changes: 4 additions & 2 deletions source/Gui/MainWindow.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
#pragma once

#include "EngineInterface/Definitions.h"
#include "PersisterInterface/Definitions.h"
#include "Network/Definitions.h"

#include "Definitions.h"

class _MainWindow
{
public:
_MainWindow(SimulationController const& simController, GuiLogger const& logger);
_MainWindow(SimulationController const& simController, PersisterController const& persisterController, GuiLogger const& logger);
void mainLoop();
void shutdown();

Expand Down Expand Up @@ -70,8 +71,9 @@ class _MainWindow
NewPasswordDialog _newPasswordDialog;
ImageToPatternDialog _imageToPatternDialog;

SimulationInteractionController _simInteractionController;
PersisterController _persisterController;
SimulationController _simController;
SimulationInteractionController _simInteractionController;
StartupController _startupController;
AutosaveController _autosaveController;
UiController _uiController;
Expand Down
2 changes: 2 additions & 0 deletions source/PersisterImpl/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ add_library(PersisterImpl
PersisterControllerImpl.h
PersisterJob.cpp
PersisterJob.h
PersisterJobResult.cpp
PersisterJobResult.h
PersisterWorker.cpp
PersisterWorker.h)

Expand Down
21 changes: 18 additions & 3 deletions source/PersisterImpl/PersisterControllerImpl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,23 @@ void _PersisterControllerImpl::shutdown()
_thread = nullptr;
}

void _PersisterControllerImpl::saveSimulationToDisc(std::string const& filename, float const& zoom, RealVector2D const& center)
PersisterJobState _PersisterControllerImpl::getJobState(PersisterJobId const& id) const
{
DeserializedSimulation dummy;
_worker->saveSimulationToDisc("d:\\test.sim", zoom, center);
return _worker->getJobState(id);
}

PersisterJobId _PersisterControllerImpl::saveSimulationToDisc(std::string const& filename, float const& zoom, RealVector2D const& center)
{
auto jobId = generateNewJobId();
auto saveToDiscJob = std::make_shared<_SaveToDiscJob>(jobId, filename, zoom, center);

_worker->addJob(saveToDiscJob);

return jobId;
}

PersisterJobId _PersisterControllerImpl::generateNewJobId()
{
++_latestJobId;
return _latestJobId;
}
11 changes: 8 additions & 3 deletions source/PersisterImpl/PersisterControllerImpl.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,17 @@ class _PersisterControllerImpl : public _PersisterController
public:
~_PersisterControllerImpl();

void init(SimulationController const& simController);
void shutdown();
void init(SimulationController const& simController) override;
void shutdown() override;

void saveSimulationToDisc(std::string const& filename, float const& zoom, RealVector2D const& center) override;
PersisterJobState getJobState(PersisterJobId const& id) const override;

PersisterJobId saveSimulationToDisc(std::string const& filename, float const& zoom, RealVector2D const& center) override;

private:
PersisterJobId generateNewJobId();

std::shared_ptr<_PersisterWorker> _worker;
std::thread* _thread = nullptr;
PersisterJobId _latestJobId = PersisterJobId(0);
};
14 changes: 3 additions & 11 deletions source/PersisterImpl/PersisterJob.cpp
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
#include "PersisterJob.h"

int _PersisterJob::getId()
int _PersisterJob::getId() const
{
return _id;
}

_PersisterJob::_PersisterJob(int id)
_PersisterJob::_PersisterJob(PersisterJobId const& id)
: _id(id)
{}

_SaveToDiscJob::_SaveToDiscJob(int id, std::string const& filename, float const& zoom, RealVector2D const& center)
_SaveToDiscJob::_SaveToDiscJob(PersisterJobId const& id, std::string const& filename, float const& zoom, RealVector2D const& center)
: _PersisterJob(id)
, _filename(filename)
, _zoom(zoom)
Expand All @@ -30,11 +30,3 @@ RealVector2D const& _SaveToDiscJob::getCenter() const
{
return _center;
}

_PersisterJobResult::_PersisterJobResult(int id)
: _id(id)
{}

_SaveToDiscJobResult::_SaveToDiscJobResult(int id)
: _PersisterJobResult(id)
{}
29 changes: 5 additions & 24 deletions source/PersisterImpl/PersisterJob.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,26 @@

#include "EngineInterface/DeserializedSimulation.h"

#include "PersisterInterface/Definitions.h"
#include "Definitions.h"

class _PersisterJob
{
public:
int getId();
PersisterJobId getId() const;

protected:
_PersisterJob(int id);
_PersisterJob(PersisterJobId const& id);
virtual ~_PersisterJob() = default;

int _id = 0;
PersisterJobId _id = 0;
};
using PersisterJob = std::shared_ptr<_PersisterJob>;

class _SaveToDiscJob : public _PersisterJob
{
public:
_SaveToDiscJob(int id, std::string const& filename, float const& zoom, RealVector2D const& center);
_SaveToDiscJob(PersisterJobId const& id, std::string const& filename, float const& zoom, RealVector2D const& center);

std::string const& getFilename() const;
float const& getZoom() const;
Expand All @@ -32,23 +33,3 @@ class _SaveToDiscJob : public _PersisterJob
RealVector2D _center;
};
using SaveToDiscJob = std::shared_ptr<_SaveToDiscJob>;


class _PersisterJobResult
{
protected:
_PersisterJobResult(int id);
virtual ~_PersisterJobResult() = default;

int _id = 0;
};
using PersisterJobResult = std::shared_ptr<_PersisterJobResult>;

class _SaveToDiscJobResult : public _PersisterJobResult
{
public:
_SaveToDiscJobResult(int id);

private:
};
using SaveToDiscJobResult = std::shared_ptr<_SaveToDiscJobResult>;
15 changes: 15 additions & 0 deletions source/PersisterImpl/PersisterJobResult.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#include "PersisterJobResult.h"


PersisterJobId _PersisterJobResult::getId() const
{
return _id;
}

_PersisterJobResult::_PersisterJobResult(PersisterJobId const& id)
: _id(id)
{}

_SaveToDiscJobResult::_SaveToDiscJobResult(PersisterJobId const& id)
: _PersisterJobResult(id)
{}
27 changes: 27 additions & 0 deletions source/PersisterImpl/PersisterJobResult.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#pragma once

#include "Definitions.h"
#include "EngineInterface/DeserializedSimulation.h"
#include "PersisterInterface/Definitions.h"

class _PersisterJobResult
{
public:
PersisterJobId getId() const;

protected:
_PersisterJobResult(PersisterJobId const& id);
virtual ~_PersisterJobResult() = default;

PersisterJobId _id = 0;
};
using PersisterJobResult = std::shared_ptr<_PersisterJobResult>;

class _SaveToDiscJobResult : public _PersisterJobResult
{
public:
_SaveToDiscJobResult(PersisterJobId const& id);

private:
};
using SaveToDiscJobResult = std::shared_ptr<_SaveToDiscJobResult>;
20 changes: 17 additions & 3 deletions source/PersisterImpl/PersisterWorker.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,26 @@ void _PersisterWorker::shutdown()
_conditionVariable.notify_all();
}

void _PersisterWorker::saveSimulationToDisc(std::string const& filename, float const& zoom, RealVector2D const& center)
PersisterJobState _PersisterWorker::getJobState(PersisterJobId const& id) const
{
std::unique_lock uniqueLock(_jobMutex);
if (std::ranges::find_if(_openJobs, [&](PersisterJob const& job) { return job->getId() == id; }) != _openJobs.end()) {

Check failure on line 33 in source/PersisterImpl/PersisterWorker.cpp

View workflow job for this annotation

GitHub Actions / build

‘find_if’ is not a member of ‘std::ranges’; did you mean ‘std::find_if’?
return PersisterJobState::InQueue;
}
if (std::ranges::find_if(_inProgressJobs, [&](PersisterJob const& job) { return job->getId() == id; }) != _inProgressJobs.end()) {

Check failure on line 36 in source/PersisterImpl/PersisterWorker.cpp

View workflow job for this annotation

GitHub Actions / build

‘find_if’ is not a member of ‘std::ranges’; did you mean ‘std::find_if’?
return PersisterJobState::InProgress;
}
if (std::ranges::find_if(_finishedJobs, [&](PersisterJobResult const& job) { return job->getId() == id; }) != _finishedJobs.end()) {

Check failure on line 39 in source/PersisterImpl/PersisterWorker.cpp

View workflow job for this annotation

GitHub Actions / build

‘find_if’ is not a member of ‘std::ranges’; did you mean ‘std::find_if’?
return PersisterJobState::InProgress;
}
THROW_NOT_IMPLEMENTED();
}

void _PersisterWorker::addJob(PersisterJob const& job)
{
{
std::unique_lock uniqueLock(_jobMutex);
auto saveToDiscJob = std::make_shared<_SaveToDiscJob>(_idCount++, filename, zoom, center);
_openJobs.emplace_back(saveToDiscJob);
_openJobs.emplace_back(job);
}
_conditionVariable.notify_all();
}
Expand Down
11 changes: 8 additions & 3 deletions source/PersisterImpl/PersisterWorker.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,18 +5,23 @@
#include <mutex>
#include <condition_variable>

#include "PersisterInterface/PersisterJobState.h"

#include "Definitions.h"
#include "PersisterJob.h"
#include "PersisterJobResult.h"

class _PersisterWorker
class _PersisterWorker
{
public:
_PersisterWorker(SimulationController const& simController);

void runThreadLoop();
void shutdown();

void saveSimulationToDisc(std::string const& filename, float const& zoom, RealVector2D const& center);
PersisterJobState getJobState(PersisterJobId const& id) const;

void addJob(PersisterJob const& job);

private:
void processJobs(std::unique_lock<std::mutex>& lock);
Expand All @@ -27,7 +32,7 @@ class _PersisterWorker

std::atomic<bool> _isShutdown{false};

std::mutex _jobMutex;
mutable std::mutex _jobMutex;
std::deque<PersisterJob> _openJobs;
std::vector<PersisterJob> _inProgressJobs;
std::vector<PersisterJobResult> _finishedJobs;
Expand Down
4 changes: 3 additions & 1 deletion source/PersisterInterface/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
add_library(PersisterInterface
Definitions.h
PersisterController.cpp
PersisterController.h)
PersisterController.h
PersisterJobId.h
PersisterJobState.h)

target_link_libraries(PersisterInterface Base)

Expand Down
Loading

0 comments on commit 69107a8

Please sign in to comment.