diff --git a/src/editing/basepreview.cpp b/src/editing/basepreview.cpp index b5a8c3b..dc4fb00 100644 --- a/src/editing/basepreview.cpp +++ b/src/editing/basepreview.cpp @@ -9,7 +9,7 @@ #include #include #include "tools.h" -#include "rendering/system.h" +#include "System.h" /*************** PreviewChunk ***************/ class PreviewChunk @@ -168,7 +168,7 @@ void PreviewDrawingThread::run() /*************** PreviewDrawingManager ***************/ PreviewDrawingManager::PreviewDrawingManager() { - _thread_count = systemGetCoreCount(); + _thread_count = System::getCoreCount(); } void PreviewDrawingManager::startThreads() diff --git a/src/rendering/atmosphere/atm_bruneton.c b/src/rendering/atmosphere/atm_bruneton.c index c3e4c11..ba8e859 100644 --- a/src/rendering/atmosphere/atm_bruneton.c +++ b/src/rendering/atmosphere/atm_bruneton.c @@ -9,7 +9,7 @@ #include #include #include -#include "rendering/system.h" +#include "System.h" #include "rendering/tools.h" #include "rendering/tools/cache.h" #include "rendering/tools/texture.h" diff --git a/src/rendering/atmosphere/atm_definition.c b/src/rendering/atmosphere/atm_definition.c index fcc4b96..de8b633 100644 --- a/src/rendering/atmosphere/atm_definition.c +++ b/src/rendering/atmosphere/atm_definition.c @@ -5,7 +5,6 @@ #include #include "../tools.h" #include "../renderer.h" -#include "../system.h" static int _inited = 0; diff --git a/src/rendering/atmosphere/atm_render.c b/src/rendering/atmosphere/atm_render.c index 4c1414e..1616c10 100644 --- a/src/rendering/atmosphere/atm_render.c +++ b/src/rendering/atmosphere/atm_render.c @@ -5,7 +5,6 @@ #include #include "../tools.h" #include "../renderer.h" -#include "../system.h" /******************** Fake ********************/ static AtmosphereResult _fakeApplyAerialPerspective(Renderer* renderer, Vector3 location, Color base) diff --git a/src/rendering/main.c b/src/rendering/main.c index 2aaaa45..9a84d1a 100644 --- a/src/rendering/main.c +++ b/src/rendering/main.c @@ -2,7 +2,6 @@ #include #include "tools/data.h" -#include "system.h" #include "scenery.h" #include "render.h" #include "main.h" @@ -12,7 +11,6 @@ void paysagesInit() { - systemInit(); if (!dataInit()) { /* TODO Add error callback (for interface) */ diff --git a/src/rendering/render.c b/src/rendering/render.c index 6dc3039..c5649e4 100644 --- a/src/rendering/render.c +++ b/src/rendering/render.c @@ -6,10 +6,10 @@ #include "renderer.h" #include "camera.h" -#include "system.h" #include "PictureFile.h" #include "Thread.h" #include "Mutex.h" +#include "System.h" typedef struct { diff --git a/src/rendering/renderer.c b/src/rendering/renderer.c index 704e195..56ff890 100644 --- a/src/rendering/renderer.c +++ b/src/rendering/renderer.c @@ -1,11 +1,11 @@ #include "renderer.h" #include "tools/lighting.h" -#include "system.h" +#include "System.h" +#include "Thread.h" #include "render.h" #include "scenery.h" #include "tools.h" -#include "Thread.h" static RayCastingResult _RAYCASTING_NULL = {0}; diff --git a/src/rendering/rendering.pro b/src/rendering/rendering.pro index 1215b9b..e347660 100644 --- a/src/rendering/rendering.pro +++ b/src/rendering/rendering.pro @@ -12,7 +12,6 @@ INCLUDEPATH += $$PWD/.. SOURCES += main.c \ tools.c \ - system.c \ scenery.c \ renderer.c \ render.c \ @@ -69,7 +68,6 @@ SOURCES += main.c \ HEADERS += \ tools.h \ - system.h \ scenery.h \ renderer.h \ render.h \ diff --git a/src/rendering/scenery.c b/src/rendering/scenery.c index 002d674..507a769 100644 --- a/src/rendering/scenery.c +++ b/src/rendering/scenery.c @@ -6,7 +6,6 @@ #include "rendering/tools/color.h" #include "rendering/tools/euclid.h" #include "rendering/render.h" -#include "rendering/system.h" static AtmosphereDefinition* _atmosphere; static CameraDefinition* _camera; diff --git a/src/rendering/system.c b/src/rendering/system.c deleted file mode 100644 index 81ed59c..0000000 --- a/src/rendering/system.c +++ /dev/null @@ -1,63 +0,0 @@ -#include "system.h" - -#include -#include -#include - -#ifndef NDEBUG -#define DEBUG_ONETHREAD 1 -#endif - -#ifdef WIN32 -#include -#endif - -static int _core_count = 1; - -static int _getCoreCount() -{ - int core_count = 1; -#ifdef WIN32 - DWORD processAffinityMask; - DWORD systemAffinityMask; - - if (GetProcessAffinityMask( GetCurrentProcess(), - &processAffinityMask, - &systemAffinityMask)){ - processAffinityMask = (processAffinityMask & 0x55555555) - + (processAffinityMask >> 1 & 0x55555555); - processAffinityMask = (processAffinityMask & 0x33333333) - + (processAffinityMask >> 2 & 0x33333333); - processAffinityMask = (processAffinityMask & 0x0f0f0f0f) - + (processAffinityMask >> 4 & 0x0f0f0f0f); - processAffinityMask = (processAffinityMask & 0x00ff00ff) - + (processAffinityMask >> 8 & 0x00ff00ff); - core_count = (processAffinityMask & 0x0000ffff) - + (processAffinityMask >>16 & 0x0000ffff); - } -#endif -#ifdef _SC_NPROCESSORS_ONLN - core_count = (int)sysconf(_SC_NPROCESSORS_ONLN); -#endif -#ifdef DEBUG_ONETHREAD - core_count = 1; -#endif - return core_count; -} - -void systemInit() -{ - _core_count = _getCoreCount(); -} - -int systemGetCoreCount() -{ - return _core_count; -} - -int systemGetFileSize(const char* path) -{ - struct stat st; - stat(path, &st); - return st.st_size; -} diff --git a/src/rendering/system.h b/src/rendering/system.h deleted file mode 100644 index 9d1dc31..0000000 --- a/src/rendering/system.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef _PAYSAGES_SYSTEM_H_ -#define _PAYSAGES_SYSTEM_H_ - -/* Library dependent features */ - -#include "rendering_global.h" -#include - -#ifdef __cplusplus -extern "C" { -#endif - -RENDERINGSHARED_EXPORT void systemInit(); -RENDERINGSHARED_EXPORT int systemGetCoreCount(); - -RENDERINGSHARED_EXPORT int systemGetFileSize(const char* path); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/src/rendering/tools/parallel.c b/src/rendering/tools/parallel.c index 7edd103..3769762 100644 --- a/src/rendering/tools/parallel.c +++ b/src/rendering/tools/parallel.c @@ -1,7 +1,8 @@ #include "parallel.h" #include -#include "../system.h" +#include +#include "System.h" #include "Thread.h" #include "Mutex.h" diff --git a/src/rendering/tools/texture.c b/src/rendering/tools/texture.c index d6dee11..3294a36 100644 --- a/src/rendering/tools/texture.c +++ b/src/rendering/tools/texture.c @@ -2,7 +2,7 @@ #include #include -#include "../system.h" +#include "System.h" #include "PictureFile.h" struct Texture2D diff --git a/src/system/System.cpp b/src/system/System.cpp new file mode 100644 index 0000000..680ad97 --- /dev/null +++ b/src/system/System.cpp @@ -0,0 +1,27 @@ +#include "System.h" + +#include +#include + +static int core_count = -1; + +int System::getCoreCount() +{ + if (core_count < 0) + { + core_count = QThread::idealThreadCount(); + if (core_count <= 0) + { + qWarning() << "Can't find number of CPU cores, using only 1"; + core_count = 1; + } + } + return core_count; +} + +// Transitional C-API + +int systemGetCoreCount() +{ + return System::getCoreCount(); +} diff --git a/src/system/System.h b/src/system/System.h new file mode 100644 index 0000000..93fbd9f --- /dev/null +++ b/src/system/System.h @@ -0,0 +1,35 @@ +#ifndef SYSTEM_H +#define SYSTEM_H + +#include "system_global.h" + +#ifdef __cplusplus + +namespace paysages +{ +namespace system +{ + +/*! + * \brief Access to system info + */ +class SYSTEMSHARED_EXPORT System +{ +public: + static int getCoreCount(); +}; + +} +} + +extern "C" { +#endif + +// Transitional C-API +int systemGetCoreCount(); + +#ifdef __cplusplus +} +#endif + +#endif // SYSTEM_H diff --git a/src/system/system.pro b/src/system/system.pro index 53c6a6e..46bea97 100644 --- a/src/system/system.pro +++ b/src/system/system.pro @@ -15,13 +15,15 @@ CONFIG(release, debug|release): DEFINES += NDEBUG SOURCES += \ PictureFile.cpp \ Thread.cpp \ - Mutex.cpp + Mutex.cpp \ + System.cpp HEADERS += \ system_global.h \ PictureFile.h \ Thread.h \ - Mutex.h + Mutex.h \ + System.h unix:!symbian { maemo5 { diff --git a/src/testing/main.c b/src/testing/main.c index 5c064de..8ff131a 100644 --- a/src/testing/main.c +++ b/src/testing/main.c @@ -2,7 +2,7 @@ #include #include "rendering/main.h" -#include "rendering/system.h" +#include "System.h" int tests_cpu_count; extern void test_euclid_case(Suite* s); diff --git a/src/testing/test_bruneton.c b/src/testing/test_bruneton.c index f4d98cf..804153d 100644 --- a/src/testing/test_bruneton.c +++ b/src/testing/test_bruneton.c @@ -1,5 +1,5 @@ #include "testing/common.h" -#include "rendering/system.h" +#include "System.h" #include "rendering/scenery.h" #define OUTPUT_WIDTH 400