From 9613b43d50c32f16a41a8e819862d8b903fe1d45 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Thu, 15 Jun 2023 01:30:31 +1000 Subject: [PATCH] Common: Purge SingleCoreAffinity No longer used, never worked on Linux. --- common/CMakeLists.txt | 1 - common/common.vcxproj | 1 - common/common.vcxproj.filters | 3 -- common/emitter/LnxCpuDetect.cpp | 5 +-- common/emitter/WinCpuDetect.cpp | 49 ++--------------------------- common/emitter/cpudetect.cpp | 2 +- common/emitter/cpudetect_internal.h | 38 ---------------------- 7 files changed, 4 insertions(+), 95 deletions(-) delete mode 100644 common/emitter/cpudetect_internal.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index 9796cce14a..6866582d54 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -102,7 +102,6 @@ target_sources(common PRIVATE TraceLog.h WAVWriter.h WindowInfo.h - emitter/cpudetect_internal.h emitter/implement/dwshift.h emitter/implement/group1.h emitter/implement/group2.h diff --git a/common/common.vcxproj b/common/common.vcxproj index 291418bf61..bb54b2e1e5 100644 --- a/common/common.vcxproj +++ b/common/common.vcxproj @@ -147,7 +147,6 @@ - diff --git a/common/common.vcxproj.filters b/common/common.vcxproj.filters index ab75569ef9..50720e3f5f 100644 --- a/common/common.vcxproj.filters +++ b/common/common.vcxproj.filters @@ -156,9 +156,6 @@ Header Files - - Header Files - Header Files diff --git a/common/emitter/LnxCpuDetect.cpp b/common/emitter/LnxCpuDetect.cpp index 2b2393fd81..710c1f8808 100644 --- a/common/emitter/LnxCpuDetect.cpp +++ b/common/emitter/LnxCpuDetect.cpp @@ -14,7 +14,7 @@ */ #ifndef _WIN32 -#include "common/emitter/cpudetect_internal.h" +#include "common/emitter/tools.h" #include @@ -32,7 +32,4 @@ void x86capabilities::CountLogicalCores() #endif } -// Not implemented yet for linux (see cpudetect_internal.h for details) -SingleCoreAffinity::SingleCoreAffinity() = default; -SingleCoreAffinity::~SingleCoreAffinity() = default; #endif diff --git a/common/emitter/WinCpuDetect.cpp b/common/emitter/WinCpuDetect.cpp index e1f947cc2a..03c991afc6 100644 --- a/common/emitter/WinCpuDetect.cpp +++ b/common/emitter/WinCpuDetect.cpp @@ -16,7 +16,8 @@ #if defined(_WIN32) #include "common/Console.h" -#include "common/emitter/cpudetect_internal.h" +#include "common/emitter/tools.h" +#include "common/RedtapeWindows.h" void x86capabilities::CountLogicalCores() { @@ -36,50 +37,4 @@ void x86capabilities::CountLogicalCores() LogicalCores = CPUs; } -SingleCoreAffinity::SingleCoreAffinity() -{ - s_threadId = nullptr; - s_oldmask = ERROR_INVALID_PARAMETER; - - DWORD_PTR availProcCpus; - DWORD_PTR availSysCpus; - if (!GetProcessAffinityMask(GetCurrentProcess(), &availProcCpus, &availSysCpus)) - return; - - int cpu = 0; - DWORD_PTR affinityMask; - for (affinityMask = 1; affinityMask != 0; affinityMask <<= 1, ++cpu) - if (availProcCpus & affinityMask) - break; - - s_threadId = GetCurrentThread(); - s_oldmask = SetThreadAffinityMask(s_threadId, affinityMask); - - if (s_oldmask == ERROR_INVALID_PARAMETER) - { - const int hexWidth = 2 * sizeof(DWORD_PTR); - Console.Warning( - "CpuDetect: SetThreadAffinityMask failed...\n" - "\tSystem Affinity : 0x%0*x\n" - "\tProcess Affinity: 0x%0*x\n" - "\tAttempted Thread Affinity CPU: %i", - hexWidth, availProcCpus, hexWidth, availSysCpus, cpu); - } - - Sleep(2); - - // Sleep Explained: I arbitrarily pick Core 0 to lock to for running the CPU test. This - // means that the current thread will need to be switched to Core 0 if it's currently - // scheduled on a difference cpu/core. However, Windows does not necessarily perform - // that scheduling immediately upon the call to SetThreadAffinityMask (seems dependent - // on version: XP does, Win7 does not). So by issuing a Sleep here we give Win7 time - // to issue a timeslice and move our thread to Core 0. Without this, it tends to move - // the thread during the cpuSpeed test instead, causing totally wacky results. -}; - -SingleCoreAffinity::~SingleCoreAffinity() -{ - if (s_oldmask != ERROR_INVALID_PARAMETER) - SetThreadAffinityMask(s_threadId, s_oldmask); -} #endif diff --git a/common/emitter/cpudetect.cpp b/common/emitter/cpudetect.cpp index f7f9d69ff1..f4655064aa 100644 --- a/common/emitter/cpudetect.cpp +++ b/common/emitter/cpudetect.cpp @@ -15,7 +15,7 @@ #include "common/MemcpyFast.h" #include "common/General.h" -#include "common/emitter/cpudetect_internal.h" +#include "common/emitter/tools.h" #include "common/emitter/internal.h" #include "common/emitter/x86_intrin.h" #include diff --git a/common/emitter/cpudetect_internal.h b/common/emitter/cpudetect_internal.h deleted file mode 100644 index 7359e565bb..0000000000 --- a/common/emitter/cpudetect_internal.h +++ /dev/null @@ -1,38 +0,0 @@ -/* Cpudetection lib - * Copyright (C) 2002-2010 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#pragma once - -#include "common/RedtapeWindows.h" -#include "common/emitter/tools.h" - -// -------------------------------------------------------------------------------------- -// Thread Affinity Lock -// -------------------------------------------------------------------------------------- -// Assign a single CPU/core for this thread's affinity to ensure rdtsc() accuracy. -// (rdtsc for each CPU/core can differ, causing skewed results) - -class SingleCoreAffinity -{ -protected: -#ifdef _WIN32 - HANDLE s_threadId; - DWORD_PTR s_oldmask; -#endif - -public: - SingleCoreAffinity(); - virtual ~SingleCoreAffinity(); -};