diff options
author | t895 <clombardo169@gmail.com> | 2024-02-05 12:07:29 +0100 |
---|---|---|
committer | t895 <clombardo169@gmail.com> | 2024-02-08 19:45:26 +0100 |
commit | e7c4c8b993ce27a50b7a56f90247056048d20f7d (patch) | |
tree | b87c275f4ea92092f7c8b6cdcb0f50d32819490f /src/android/app/src/main/jni/native.cpp | |
parent | Merge pull request #12892 from liamwhite/serialization-stuff (diff) | |
download | yuzu-e7c4c8b993ce27a50b7a56f90247056048d20f7d.tar yuzu-e7c4c8b993ce27a50b7a56f90247056048d20f7d.tar.gz yuzu-e7c4c8b993ce27a50b7a56f90247056048d20f7d.tar.bz2 yuzu-e7c4c8b993ce27a50b7a56f90247056048d20f7d.tar.lz yuzu-e7c4c8b993ce27a50b7a56f90247056048d20f7d.tar.xz yuzu-e7c4c8b993ce27a50b7a56f90247056048d20f7d.tar.zst yuzu-e7c4c8b993ce27a50b7a56f90247056048d20f7d.zip |
Diffstat (limited to 'src/android/app/src/main/jni/native.cpp')
-rw-r--r-- | src/android/app/src/main/jni/native.cpp | 125 |
1 files changed, 68 insertions, 57 deletions
diff --git a/src/android/app/src/main/jni/native.cpp b/src/android/app/src/main/jni/native.cpp index 654510129..4acc60956 100644 --- a/src/android/app/src/main/jni/native.cpp +++ b/src/android/app/src/main/jni/native.cpp @@ -20,6 +20,8 @@ #include <frontend_common/content_manager.h> #include <jni.h> +#include "common/android/android_common.h" +#include "common/android/id_cache.h" #include "common/detached_tasks.h" #include "common/dynamic_library.h" #include "common/fs/path_util.h" @@ -57,8 +59,6 @@ #include "hid_core/frontend/emulated_controller.h" #include "hid_core/hid_core.h" #include "hid_core/hid_types.h" -#include "jni/android_common/android_common.h" -#include "jni/id_cache.h" #include "jni/native.h" #include "video_core/renderer_base.h" #include "video_core/renderer_vulkan/renderer_vulkan.h" @@ -228,7 +228,7 @@ Core::SystemResultStatus EmulationSession::InitializeEmulation(const std::string std::make_unique<EmuWindow_Android>(&m_input_subsystem, m_native_window, m_vulkan_library); // Initialize system. - jauto android_keyboard = std::make_unique<SoftwareKeyboard::AndroidKeyboard>(); + jauto android_keyboard = std::make_unique<Common::Android::SoftwareKeyboard::AndroidKeyboard>(); m_software_keyboard = android_keyboard.get(); m_system.SetShuttingDown(false); m_system.ApplySettings(); @@ -411,37 +411,39 @@ void EmulationSession::OnGamepadDisconnectEvent([[maybe_unused]] int index) { controller->Disconnect(); } -SoftwareKeyboard::AndroidKeyboard* EmulationSession::SoftwareKeyboard() { +Common::Android::SoftwareKeyboard::AndroidKeyboard* EmulationSession::SoftwareKeyboard() { return m_software_keyboard; } void EmulationSession::LoadDiskCacheProgress(VideoCore::LoadCallbackStage stage, int progress, int max) { - JNIEnv* env = IDCache::GetEnvForThread(); - env->CallStaticVoidMethod(IDCache::GetDiskCacheProgressClass(), - IDCache::GetDiskCacheLoadProgress(), static_cast<jint>(stage), + JNIEnv* env = Common::Android::GetEnvForThread(); + env->CallStaticVoidMethod(Common::Android::GetDiskCacheProgressClass(), + Common::Android::GetDiskCacheLoadProgress(), static_cast<jint>(stage), static_cast<jint>(progress), static_cast<jint>(max)); } void EmulationSession::OnEmulationStarted() { - JNIEnv* env = IDCache::GetEnvForThread(); - env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), IDCache::GetOnEmulationStarted()); + JNIEnv* env = Common::Android::GetEnvForThread(); + env->CallStaticVoidMethod(Common::Android::GetNativeLibraryClass(), + Common::Android::GetOnEmulationStarted()); } void EmulationSession::OnEmulationStopped(Core::SystemResultStatus result) { - JNIEnv* env = IDCache::GetEnvForThread(); - env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), IDCache::GetOnEmulationStopped(), - static_cast<jint>(result)); + JNIEnv* env = Common::Android::GetEnvForThread(); + env->CallStaticVoidMethod(Common::Android::GetNativeLibraryClass(), + Common::Android::GetOnEmulationStopped(), static_cast<jint>(result)); } void EmulationSession::ChangeProgram(std::size_t program_index) { - JNIEnv* env = IDCache::GetEnvForThread(); - env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), IDCache::GetOnProgramChanged(), + JNIEnv* env = Common::Android::GetEnvForThread(); + env->CallStaticVoidMethod(Common::Android::GetNativeLibraryClass(), + Common::Android::GetOnProgramChanged(), static_cast<jint>(program_index)); } u64 EmulationSession::GetProgramId(JNIEnv* env, jstring jprogramId) { - auto program_id_string = GetJString(env, jprogramId); + auto program_id_string = Common::Android::GetJString(env, jprogramId); try { return std::stoull(program_id_string); } catch (...) { @@ -491,7 +493,7 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_surfaceDestroyed(JNIEnv* env, jobject void Java_org_yuzu_yuzu_1emu_NativeLibrary_setAppDirectory(JNIEnv* env, jobject instance, [[maybe_unused]] jstring j_directory) { - Common::FS::SetAppDirectory(GetJString(env, j_directory)); + Common::FS::SetAppDirectory(Common::Android::GetJString(env, j_directory)); } int Java_org_yuzu_yuzu_1emu_NativeLibrary_installFileToNand(JNIEnv* env, jobject instance, @@ -501,21 +503,22 @@ int Java_org_yuzu_yuzu_1emu_NativeLibrary_installFileToNand(JNIEnv* env, jobject jlambdaClass, "invoke", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); const auto callback = [env, jcallback, jlambdaInvokeMethod](size_t max, size_t progress) { auto jwasCancelled = env->CallObjectMethod(jcallback, jlambdaInvokeMethod, - ToJDouble(env, max), ToJDouble(env, progress)); - return GetJBoolean(env, jwasCancelled); + Common::Android::ToJDouble(env, max), + Common::Android::ToJDouble(env, progress)); + return Common::Android::GetJBoolean(env, jwasCancelled); }; return static_cast<int>( ContentManager::InstallNSP(EmulationSession::GetInstance().System(), *EmulationSession::GetInstance().System().GetFilesystem(), - GetJString(env, j_file), callback)); + Common::Android::GetJString(env, j_file), callback)); } jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_doesUpdateMatchProgram(JNIEnv* env, jobject jobj, jstring jprogramId, jstring jupdatePath) { u64 program_id = EmulationSession::GetProgramId(env, jprogramId); - std::string updatePath = GetJString(env, jupdatePath); + std::string updatePath = Common::Android::GetJString(env, jupdatePath); std::shared_ptr<FileSys::NSP> nsp = std::make_shared<FileSys::NSP>( EmulationSession::GetInstance().System().GetFilesystem()->OpenFile( updatePath, FileSys::OpenMode::Read)); @@ -538,8 +541,10 @@ void JNICALL Java_org_yuzu_yuzu_1emu_NativeLibrary_initializeGpuDriver(JNIEnv* e jstring custom_driver_name, jstring file_redirect_dir) { EmulationSession::GetInstance().InitializeGpuDriver( - GetJString(env, hook_lib_dir), GetJString(env, custom_driver_dir), - GetJString(env, custom_driver_name), GetJString(env, file_redirect_dir)); + Common::Android::GetJString(env, hook_lib_dir), + Common::Android::GetJString(env, custom_driver_dir), + Common::Android::GetJString(env, custom_driver_name), + Common::Android::GetJString(env, file_redirect_dir)); } [[maybe_unused]] static bool CheckKgslPresent() { @@ -566,7 +571,7 @@ jobjectArray Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_getSystemDriverInfo( JNIEnv* env, jobject j_obj, jobject j_surf, jstring j_hook_lib_dir) { const char* file_redirect_dir_{}; int featureFlags{}; - std::string hook_lib_dir = GetJString(env, j_hook_lib_dir); + std::string hook_lib_dir = Common::Android::GetJString(env, j_hook_lib_dir); auto handle = adrenotools_open_libvulkan(RTLD_NOW, featureFlags, nullptr, hook_lib_dir.c_str(), nullptr, nullptr, file_redirect_dir_, nullptr); auto driver_library = std::make_shared<Common::DynamicLibrary>(handle); @@ -587,9 +592,10 @@ jobjectArray Java_org_yuzu_yuzu_1emu_utils_GpuDriverHelper_getSystemDriverInfo( fmt::format("{}.{}.{}", VK_API_VERSION_MAJOR(driver_version), VK_API_VERSION_MINOR(driver_version), VK_API_VERSION_PATCH(driver_version)); - jobjectArray j_driver_info = - env->NewObjectArray(2, IDCache::GetStringClass(), ToJString(env, version_string)); - env->SetObjectArrayElement(j_driver_info, 1, ToJString(env, device.GetDriverName())); + jobjectArray j_driver_info = env->NewObjectArray( + 2, Common::Android::GetStringClass(), Common::Android::ToJString(env, version_string)); + env->SetObjectArrayElement(j_driver_info, 1, + Common::Android::ToJString(env, device.GetDriverName())); return j_driver_info; } @@ -742,15 +748,15 @@ jdoubleArray Java_org_yuzu_yuzu_1emu_NativeLibrary_getPerfStats(JNIEnv* env, jcl jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getCpuBackend(JNIEnv* env, jclass clazz) { if (Settings::IsNceEnabled()) { - return ToJString(env, "NCE"); + return Common::Android::ToJString(env, "NCE"); } - return ToJString(env, "JIT"); + return Common::Android::ToJString(env, "JIT"); } jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getGpuDriver(JNIEnv* env, jobject jobj) { - return ToJString(env, - EmulationSession::GetInstance().System().GPU().Renderer().GetDeviceVendor()); + return Common::Android::ToJString( + env, EmulationSession::GetInstance().System().GPU().Renderer().GetDeviceVendor()); } void Java_org_yuzu_yuzu_1emu_NativeLibrary_applySettings(JNIEnv* env, jobject jobj) { @@ -764,13 +770,14 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_logSettings(JNIEnv* env, jobject jobj void Java_org_yuzu_yuzu_1emu_NativeLibrary_run(JNIEnv* env, jobject jobj, jstring j_path, jint j_program_index, jboolean j_frontend_initiated) { - const std::string path = GetJString(env, j_path); + const std::string path = Common::Android::GetJString(env, j_path); const Core::SystemResultStatus result{ RunEmulation(path, j_program_index, j_frontend_initiated)}; if (result != Core::SystemResultStatus::Success) { - env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(), - IDCache::GetExitEmulationActivity(), static_cast<int>(result)); + env->CallStaticVoidMethod(Common::Android::GetNativeLibraryClass(), + Common::Android::GetExitEmulationActivity(), + static_cast<int>(result)); } } @@ -781,7 +788,7 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_logDeviceInfo(JNIEnv* env, jclass cla void Java_org_yuzu_yuzu_1emu_NativeLibrary_submitInlineKeyboardText(JNIEnv* env, jclass clazz, jstring j_text) { - const std::u16string input = Common::UTF8ToUTF16(GetJString(env, j_text)); + const std::u16string input = Common::UTF8ToUTF16(Common::Android::GetJString(env, j_text)); EmulationSession::GetInstance().SoftwareKeyboard()->SubmitInlineKeyboardText(input); } @@ -815,16 +822,16 @@ jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getAppletLaunchPath(JNIEnv* env, j auto bis_system = EmulationSession::GetInstance().System().GetFileSystemController().GetSystemNANDContents(); if (!bis_system) { - return ToJString(env, ""); + return Common::Android::ToJString(env, ""); } auto applet_nca = bis_system->GetEntry(static_cast<u64>(jid), FileSys::ContentRecordType::Program); if (!applet_nca) { - return ToJString(env, ""); + return Common::Android::ToJString(env, ""); } - return ToJString(env, applet_nca->GetFullPath()); + return Common::Android::ToJString(env, applet_nca->GetFullPath()); } void Java_org_yuzu_yuzu_1emu_NativeLibrary_setCurrentAppletId(JNIEnv* env, jclass clazz, @@ -857,7 +864,7 @@ jboolean Java_org_yuzu_yuzu_1emu_NativeLibrary_isFirmwareAvailable(JNIEnv* env, jobjectArray Java_org_yuzu_yuzu_1emu_NativeLibrary_getPatchesForFile(JNIEnv* env, jobject jobj, jstring jpath, jstring jprogramId) { - const auto path = GetJString(env, jpath); + const auto path = Common::Android::GetJString(env, jpath); const auto vFile = Core::GetGameFileFromPath(EmulationSession::GetInstance().System().GetFilesystem(), path); if (vFile == nullptr) { @@ -875,14 +882,15 @@ jobjectArray Java_org_yuzu_yuzu_1emu_NativeLibrary_getPatchesForFile(JNIEnv* env auto patches = pm.GetPatches(update_raw); jobjectArray jpatchArray = - env->NewObjectArray(patches.size(), IDCache::GetPatchClass(), nullptr); + env->NewObjectArray(patches.size(), Common::Android::GetPatchClass(), nullptr); int i = 0; for (const auto& patch : patches) { jobject jpatch = env->NewObject( - IDCache::GetPatchClass(), IDCache::GetPatchConstructor(), patch.enabled, - ToJString(env, patch.name), ToJString(env, patch.version), - static_cast<jint>(patch.type), ToJString(env, std::to_string(patch.program_id)), - ToJString(env, std::to_string(patch.title_id))); + Common::Android::GetPatchClass(), Common::Android::GetPatchConstructor(), patch.enabled, + Common::Android::ToJString(env, patch.name), + Common::Android::ToJString(env, patch.version), static_cast<jint>(patch.type), + Common::Android::ToJString(env, std::to_string(patch.program_id)), + Common::Android::ToJString(env, std::to_string(patch.title_id))); env->SetObjectArrayElement(jpatchArray, i, jpatch); ++i; } @@ -906,7 +914,7 @@ void Java_org_yuzu_yuzu_1emu_NativeLibrary_removeMod(JNIEnv* env, jobject jobj, jstring jname) { auto program_id = EmulationSession::GetProgramId(env, jprogramId); ContentManager::RemoveMod(EmulationSession::GetInstance().System().GetFileSystemController(), - program_id, GetJString(env, jname)); + program_id, Common::Android::GetJString(env, jname)); } jobjectArray Java_org_yuzu_yuzu_1emu_NativeLibrary_verifyInstalledContents(JNIEnv* env, @@ -917,17 +925,18 @@ jobjectArray Java_org_yuzu_yuzu_1emu_NativeLibrary_verifyInstalledContents(JNIEn jlambdaClass, "invoke", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); const auto callback = [env, jcallback, jlambdaInvokeMethod](size_t max, size_t progress) { auto jwasCancelled = env->CallObjectMethod(jcallback, jlambdaInvokeMethod, - ToJDouble(env, max), ToJDouble(env, progress)); - return GetJBoolean(env, jwasCancelled); + Common::Android::ToJDouble(env, max), + Common::Android::ToJDouble(env, progress)); + return Common::Android::GetJBoolean(env, jwasCancelled); }; auto& session = EmulationSession::GetInstance(); std::vector<std::string> result = ContentManager::VerifyInstalledContents( session.System(), *session.GetContentProvider(), callback); - jobjectArray jresult = - env->NewObjectArray(result.size(), IDCache::GetStringClass(), ToJString(env, "")); + jobjectArray jresult = env->NewObjectArray(result.size(), Common::Android::GetStringClass(), + Common::Android::ToJString(env, "")); for (size_t i = 0; i < result.size(); ++i) { - env->SetObjectArrayElement(jresult, i, ToJString(env, result[i])); + env->SetObjectArrayElement(jresult, i, Common::Android::ToJString(env, result[i])); } return jresult; } @@ -939,19 +948,20 @@ jint Java_org_yuzu_yuzu_1emu_NativeLibrary_verifyGameContents(JNIEnv* env, jobje jlambdaClass, "invoke", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); const auto callback = [env, jcallback, jlambdaInvokeMethod](size_t max, size_t progress) { auto jwasCancelled = env->CallObjectMethod(jcallback, jlambdaInvokeMethod, - ToJDouble(env, max), ToJDouble(env, progress)); - return GetJBoolean(env, jwasCancelled); + Common::Android::ToJDouble(env, max), + Common::Android::ToJDouble(env, progress)); + return Common::Android::GetJBoolean(env, jwasCancelled); }; auto& session = EmulationSession::GetInstance(); - return static_cast<jint>( - ContentManager::VerifyGameContents(session.System(), GetJString(env, jpath), callback)); + return static_cast<jint>(ContentManager::VerifyGameContents( + session.System(), Common::Android::GetJString(env, jpath), callback)); } jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getSavePath(JNIEnv* env, jobject jobj, jstring jprogramId) { auto program_id = EmulationSession::GetProgramId(env, jprogramId); if (program_id == 0) { - return ToJString(env, ""); + return Common::Android::ToJString(env, ""); } auto& system = EmulationSession::GetInstance().System(); @@ -968,7 +978,7 @@ jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getSavePath(JNIEnv* env, jobject j const auto user_save_data_path = FileSys::SaveDataFactory::GetFullPath( {}, vfsNandDir, FileSys::SaveDataSpaceId::NandUser, FileSys::SaveDataType::SaveData, program_id, user_id->AsU128(), 0); - return ToJString(env, user_save_data_path); + return Common::Android::ToJString(env, user_save_data_path); } jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getDefaultProfileSaveDataRoot(JNIEnv* env, @@ -981,12 +991,13 @@ jstring Java_org_yuzu_yuzu_1emu_NativeLibrary_getDefaultProfileSaveDataRoot(JNIE const auto user_save_data_root = FileSys::SaveDataFactory::GetUserGameSaveDataRoot(user_id->AsU128(), jfuture); - return ToJString(env, user_save_data_root); + return Common::Android::ToJString(env, user_save_data_root); } void Java_org_yuzu_yuzu_1emu_NativeLibrary_addFileToFilesystemProvider(JNIEnv* env, jobject jobj, jstring jpath) { - EmulationSession::GetInstance().ConfigureFilesystemProvider(GetJString(env, jpath)); + EmulationSession::GetInstance().ConfigureFilesystemProvider( + Common::Android::GetJString(env, jpath)); } void Java_org_yuzu_yuzu_1emu_NativeLibrary_clearFilesystemProvider(JNIEnv* env, jobject jobj) { |