Improve fast AES heuristic for Linux ARM and unknown platforms

This commit is contained in:
Cameron Gutman 2024-01-15 14:16:56 -06:00
parent ce8b24dfa7
commit be7694dd8b
2 changed files with 14 additions and 3 deletions

View file

@ -605,8 +605,8 @@ bool Session::initialize()
#ifndef STEAM_LINK
// Opt-in to all encryption features if we detect that the platform
// has AES cryptography acceleration instructions.
if (StreamUtils::hasFastAes()) {
// has AES cryptography acceleration instructions and more than 2 cores.
if (StreamUtils::hasFastAes() && SDL_GetCPUCount() > 2) {
m_StreamConfig.encryptionFlags = ENCFLG_ALL;
}
else {

View file

@ -10,6 +10,10 @@
#include <Windows.h>
#endif
#ifdef Q_OS_LINUX
#include <sys/auxv.h>
#endif
Uint32 StreamUtils::getPlatformWindowFlags()
{
#if defined(Q_OS_DARWIN)
@ -118,8 +122,15 @@ bool StreamUtils::hasFastAes()
#elif defined(Q_OS_DARWIN)
// Everything that runs Catalina and later has AES-NI or ARMv8 crypto instructions
return true;
#elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_ARM) && QT_POINTER_SIZE == 4
return getauxval(AT_HWCAP2) & HWCAP2_AES;
#elif defined(Q_OS_LINUX) && defined(Q_PROCESSOR_ARM) && QT_POINTER_SIZE == 8
return getauxval(AT_HWCAP) & HWCAP_AES;
#elif QT_POINTER_SIZE == 4
#warning Unknown 32-bit platform. Assuming AES is slow on this CPU.
return false;
#else
// Assume AES is fast if we don't recognize the OS or processor
#warning Unknown 64-bit platform. Assuming AES is fast on this CPU.
return true;
#endif
}