Faster boot speed by skipping code in asm analysis.

This commit is contained in:
IzzelAliz 2020-05-21 12:56:41 +08:00
parent a99bc30cea
commit ad0ff92408
2 changed files with 15 additions and 13 deletions

View File

@ -22,6 +22,7 @@ import org.objectweb.asm.commons.ClassRemapper;
import org.objectweb.asm.commons.Remapper;
import org.objectweb.asm.tree.ClassNode;
import org.objectweb.asm.tree.MethodInsnNode;
import org.spongepowered.asm.service.MixinService;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
@ -259,7 +260,7 @@ public class PluginRemapper extends JarRemapper {
private byte[] remapClassFile(ClassReader reader, final ClassRepo repo) {
ClassNode node = new ClassNode();
RemappingClassAdapter mapper = new RemappingClassAdapter(node, this, repo);
reader.accept(mapper, 0);
reader.accept(mapper, ClassReader.SKIP_FRAMES);
ArclightRedirectAdapter.redirect(node, generatedHandler);
ArclightInterfaceInvokerGen.generate(node, this.classRepo, this, this.inheritanceProvider);
@ -274,7 +275,8 @@ public class PluginRemapper extends JarRemapper {
private static AtomicInteger atomicInteger = new AtomicInteger();
private String generateReflectionHandler() {
ClassNode node = classRepo.findClass(Type.getInternalName(ArclightReflectionHandler.class));
try {
ClassNode node = MixinService.getService().getBytecodeProvider().getClassNode(Type.getInternalName(ArclightReflectionHandler.class));
Preconditions.checkNotNull(node, "node");
ClassWriter writer = new ClassWriter(0);
String name = Type.getInternalName(ArclightReflectionHandler.class) + "_" + atomicInteger.getAndIncrement();
@ -283,13 +285,13 @@ public class PluginRemapper extends JarRemapper {
byte[] bytes = writer.toByteArray();
Class<?> cl = Unsafe.defineClass(name.replace('/', '.'), bytes, 0, bytes.length, getClass().getClassLoader(), getClass().getProtectionDomain());
Unsafe.ensureClassInitialized(cl);
try {
Field remapper = cl.getField("remapper");
remapper.set(null, this);
} catch (Exception e) {
e.printStackTrace();
}
return name;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private static class NameRemapper extends Remapper {

View File

@ -61,7 +61,7 @@ public class SharedClassRepo implements ClassRepo {
try (InputStream inputStream = connection.getInputStream()) {
ClassReader reader = new ClassReader(inputStream);
ClassNode classNode = new ClassNode();
reader.accept(classNode, 0);
reader.accept(classNode, ClassReader.SKIP_CODE);
return classNode;
}
} catch (IOException ignored) {