Index: ps/trunk/source/ps/GameSetup/HWDetect.cpp =================================================================== --- ps/trunk/source/ps/GameSetup/HWDetect.cpp +++ ps/trunk/source/ps/GameSetup/HWDetect.cpp @@ -53,6 +53,7 @@ #include #include +#include static void ReportSDL(const ScriptRequest& rq, JS::HandleValue settings); static void ReportFreeType(const ScriptRequest& rq, JS::HandleValue settings); @@ -194,8 +195,10 @@ Script::SetProperty(rq, settings, "timer_resolution", timer_Resolution()); + Script::SetProperty(rq, settings, "hardware_concurrency", std::thread::hardware_concurrency()); + // The version should be increased for every meaningful change. - const int reportVersion = 19; + const int reportVersion = 20; // Send the same data to the reporting system g_UserReporter.SubmitReport( @@ -225,6 +228,11 @@ // This is null in atlas (and further the call triggers an assertion). const char* backend = g_VideoMode.GetWindow() ? GetSDLSubsystem(g_VideoMode.GetWindow()) : "none"; Script::SetProperty(rq, settings, "sdl_video_backend", backend ? backend : "unknown"); + + Script::SetProperty(rq, settings, "sdl_display_count", SDL_GetNumVideoDisplays()); + + Script::SetProperty(rq, settings, "sdl_cpu_count", SDL_GetCPUCount()); + Script::SetProperty(rq, settings, "sdl_system_ram", SDL_GetSystemRAM()); } static void ReportFreeType(const ScriptRequest& rq, JS::HandleValue settings) Index: ps/trunk/source/ps/TaskManager.cpp =================================================================== --- ps/trunk/source/ps/TaskManager.cpp +++ ps/trunk/source/ps/TaskManager.cpp @@ -36,15 +36,26 @@ namespace Threading { + +namespace +{ /** * Minimum number of TaskManager workers. */ -static constexpr size_t MIN_THREADS = 3; +constexpr size_t MIN_WORKERS = 3; /** * Maximum number of TaskManager workers. */ -static constexpr size_t MAX_THREADS = 32; +constexpr size_t MAX_WORKERS = 32; + +size_t GetDefaultNumberOfWorkers() +{ + const size_t hardware_concurrency = std::thread::hardware_concurrency(); + return hardware_concurrency ? Clamp(hardware_concurrency - 1, MIN_WORKERS, MAX_WORKERS) : MIN_WORKERS; +} + +} // anonymous namespace std::unique_ptr g_TaskManager; @@ -155,14 +166,14 @@ mutable size_t m_RoundRobinIdx = 0; }; -TaskManager::TaskManager() : TaskManager(std::thread::hardware_concurrency() - 1) +TaskManager::TaskManager() : TaskManager(GetDefaultNumberOfWorkers()) { } TaskManager::TaskManager(size_t numberOfWorkers) { m = std::make_unique(*this); - numberOfWorkers = Clamp(numberOfWorkers, MIN_THREADS, MAX_THREADS); + numberOfWorkers = Clamp(numberOfWorkers, MIN_WORKERS, MAX_WORKERS); m->SetupWorkers(numberOfWorkers); }