android: disable openmp affinity on some devices

Disable omp affinity on POCO F5, Redmi Note 12 Turbo, Redmi Note 13 Pro
5G and POCO X6 5G to avoid crashes.
This commit is contained in:
Flyinghead 2024-11-06 16:40:11 +01:00
parent da3cfd9d58
commit d8a3ee9c3a
3 changed files with 16 additions and 0 deletions

View File

@ -120,6 +120,16 @@ public abstract class BaseGLActivity extends Activity implements ActivityCompat.
return;
}
Log.i("flycast", "Environment initialized");
if ("marble".equals(Build.DEVICE) || "marblein".equals(Build.DEVICE)
|| "garnet".equals(Build.DEVICE) || "XIG05".equals(Build.DEVICE))
{
// Disable omp affinity for POCO F5 and Redmi Note 12 Turbo (marble, marblein)
// and Redmi Note 13 Pro 5G and POCO X6 5G (garnet, XIG05)
// because it crashes with ndk 27.1 / clang 18.x
// See https://github.com/android/ndk/issues/1180
Log.i("flycast", "Disabling OpenMP thread affinity for device " + Build.DEVICE);
JNIdc.disableOmpAffinity();
}
Emulator app = (Emulator)getApplicationContext();
app.getConfigurationPrefs();
storage = new AndroidStorage(this);

View File

@ -15,6 +15,7 @@ public final class JNIdc
public static native void pause();
public static native void resume();
public static native void stop();
public static native void disableOmpAffinity();
public static native void rendinitNative(Surface surface, int w, int h);

View File

@ -202,6 +202,11 @@ extern "C" JNIEXPORT jstring JNICALL Java_com_flycast_emulator_emu_JNIdc_initEnv
return NULL;
}
extern "C" JNIEXPORT void JNICALL Java_com_flycast_emulator_emu_JNIdc_disableOmpAffinity(JNIEnv *env, jobject obj)
{
setenv("KMP_AFFINITY", "disabled", 1);
}
extern "C" JNIEXPORT void JNICALL Java_com_flycast_emulator_emu_JNIdc_setExternalStorageDirectories(JNIEnv *env, jobject obj, jobjectArray jpathList)
{
jni::ObjectArray<jni::String> pathList(jpathList, false);