feat(core/scripting): disable script optimization

Signed-off-by: rhunk <101876869+rhunk@users.noreply.github.com>
This commit is contained in:
rhunk
2025-08-02 13:44:22 +02:00
parent 93358d97f4
commit 621c16d7f4
7 changed files with 23 additions and 13 deletions

View File

@@ -29,7 +29,11 @@ import kotlin.system.exitProcess
class RemoteScriptManager(
val context: RemoteSideContext,
) : IScripting.Stub() {
val runtime = ScriptRuntime(context.androidContext, context.log).apply {
val runtime = ScriptRuntime(
config = { context.config.root },
androidContext = context.androidContext,
logger = context.log
).apply {
scripting = this@RemoteScriptManager
}

View File

@@ -1156,6 +1156,10 @@
"disable_log_anonymization": {
"name": "Disable Log Anonymization",
"description": "Disables the anonymization of logs"
},
"disable_optimization": {
"name": "Disable Optimization",
"description": "Disables the optimization of scripts. This may cause performance issues."
}
}
},

View File

@@ -9,4 +9,5 @@ class Scripting : ConfigContainer() {
val autoReload = unique("auto_reload", "snapchat_only", "all")
val integratedUI = boolean("integrated_ui", false) { requireRestart() }
val disableLogAnonymization = boolean("disable_log_anonymization", false) { requireRestart() }
val disableOptimization = boolean("disable_optimization", false) { requireRestart() }
}

View File

@@ -15,8 +15,10 @@ import me.rhunk.snapenhance.common.scripting.ktx.scriptableObject
import me.rhunk.snapenhance.common.scripting.type.ModuleInfo
import me.rhunk.snapenhance.common.scripting.type.Permissions
import me.rhunk.snapenhance.common.scripting.ui.InterfaceManager
import org.mozilla.javascript.*
import org.mozilla.javascript.Function
import org.mozilla.javascript.ScriptableObject
import org.mozilla.javascript.Undefined
import org.mozilla.javascript.Wrapper
import java.io.Reader
import java.lang.reflect.Modifier
import kotlin.reflect.KClass
@@ -235,7 +237,7 @@ class JSModule(
}
}
contextScope(shouldOptimize = true) {
contextScope(shouldOptimize = scriptRuntime.config().scripting.disableOptimization.getNullable() != true) {
evaluateReader(moduleObject, reader, moduleInfo.name, 1, null)
}
}

View File

@@ -4,12 +4,14 @@ import android.content.Context
import android.os.ParcelFileDescriptor
import me.rhunk.snapenhance.bridge.scripting.IScripting
import me.rhunk.snapenhance.common.BuildConfig
import me.rhunk.snapenhance.common.config.impl.RootConfig
import me.rhunk.snapenhance.common.logger.AbstractLogger
import me.rhunk.snapenhance.common.scripting.type.readModuleInfo
import org.mozilla.javascript.ScriptableObject
import java.io.InputStream
open class ScriptRuntime(
val config: () -> RootConfig,
val androidContext: Context,
logger: AbstractLogger,
) {

View File

@@ -1,11 +1,8 @@
package me.rhunk.snapenhance.common.scripting.ktx
import com.faendir.rhino_android.RhinoAndroidHelper
import org.mozilla.javascript.Context
import org.mozilla.javascript.*
import org.mozilla.javascript.Function
import org.mozilla.javascript.Scriptable
import org.mozilla.javascript.ScriptableObject
import org.mozilla.javascript.Wrapper
import java.io.File
private val rhinoAndroidHelper = RhinoAndroidHelper(null as File?)

View File

@@ -5,16 +5,16 @@ import me.rhunk.snapenhance.common.logger.AbstractLogger
import me.rhunk.snapenhance.common.scripting.ScriptRuntime
import me.rhunk.snapenhance.common.scripting.bindings.BindingSide
import me.rhunk.snapenhance.core.ModContext
import me.rhunk.snapenhance.core.scripting.impl.CoreEvents
import me.rhunk.snapenhance.core.scripting.impl.CoreIPC
import me.rhunk.snapenhance.core.scripting.impl.CoreMessaging
import me.rhunk.snapenhance.core.scripting.impl.CoreScriptConfig
import me.rhunk.snapenhance.core.scripting.impl.CoreScriptHooker
import me.rhunk.snapenhance.core.scripting.impl.*
class CoreScriptRuntime(
private val modContext: ModContext,
logger: AbstractLogger,
): ScriptRuntime(modContext.androidContext, logger) {
): ScriptRuntime(
config = { modContext.config },
androidContext = modContext.androidContext,
logger = logger
) {
// we assume that the bridge is reloaded the next time we connect to it
private var isBridgeReloaded = false