Loading tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/HostStubGen.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -382,7 +382,7 @@ class HostStubGen(val options: HostStubGenOptions) { stubOutStream.putNextEntry(newEntry) stubOutStream.putNextEntry(newEntry) convertClass(classInternalName, /*forImpl=*/false, bis, convertClass(classInternalName, /*forImpl=*/false, bis, stubOutStream, filter, packageRedirector, enableChecker, classes, stubOutStream, filter, packageRedirector, enableChecker, classes, errors, stats) errors, null) stubOutStream.closeEntry() stubOutStream.closeEntry() } } } } Loading Loading @@ -415,7 +415,7 @@ class HostStubGen(val options: HostStubGenOptions) { enableChecker: Boolean, enableChecker: Boolean, classes: ClassNodes, classes: ClassNodes, errors: HostStubGenErrors, errors: HostStubGenErrors, stats: HostStubGenStats, stats: HostStubGenStats?, ) { ) { val cr = ClassReader(input) val cr = ClassReader(input) Loading tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/HostStubGenStats.kt +16 −1 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.hoststubgen import com.android.hoststubgen.asm.toHumanReadableClassName import com.android.hoststubgen.asm.toHumanReadableClassName import com.android.hoststubgen.filters.FilterPolicyWithReason import com.android.hoststubgen.filters.FilterPolicyWithReason import org.objectweb.asm.Opcodes import java.io.PrintWriter import java.io.PrintWriter open class HostStubGenStats { open class HostStubGenStats { Loading @@ -28,12 +29,26 @@ open class HostStubGenStats { private val stats = mutableMapOf<String, Stats>() private val stats = mutableMapOf<String, Stats>() fun onVisitPolicyForMethod(fullClassName: String, policy: FilterPolicyWithReason) { fun onVisitPolicyForMethod(fullClassName: String, methodName: String, descriptor: String, policy: FilterPolicyWithReason, access: Int) { // Ignore methods that aren't public if ((access and Opcodes.ACC_PUBLIC) == 0) return // Ignore methods that are abstract if ((access and Opcodes.ACC_ABSTRACT) != 0) return // Ignore methods where policy isn't relevant if (policy.isIgnoredForStats) return if (policy.isIgnoredForStats) return val packageName = resolvePackageName(fullClassName) val packageName = resolvePackageName(fullClassName) val className = resolveClassName(fullClassName) val className = resolveClassName(fullClassName) // Ignore methods for certain generated code if (className.endsWith("Proto") or className.endsWith("ProtoEnums") or className.endsWith("LogTags") or className.endsWith("StatsLog")) { return } val packageStats = stats.getOrPut(packageName) { Stats() } val packageStats = stats.getOrPut(packageName) { Stats() } val classStats = packageStats.children.getOrPut(className) { Stats() } val classStats = packageStats.children.getOrPut(className) { Stats() } Loading tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/filters/FilterPolicyWithReason.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -72,6 +72,6 @@ data class FilterPolicyWithReason ( || reason.contains("is-enum") || reason.contains("is-enum") || reason.contains("is-synthetic-method") || reason.contains("is-synthetic-method") || reason.contains("special-class") || reason.contains("special-class") || reason.contains("substitute-from") || reason.contains("substitute-to") } } } } tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/visitors/BaseAdapter.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -51,7 +51,7 @@ abstract class BaseAdapter ( */ */ data class Options ( data class Options ( val errors: HostStubGenErrors, val errors: HostStubGenErrors, val stats: HostStubGenStats, val stats: HostStubGenStats?, val enablePreTrace: Boolean, val enablePreTrace: Boolean, val enablePostTrace: Boolean, val enablePostTrace: Boolean, val enableNonStubMethodCallDetection: Boolean, val enableNonStubMethodCallDetection: Boolean, Loading Loading @@ -178,6 +178,7 @@ abstract class BaseAdapter ( } } val p = filter.getPolicyForMethod(currentClassName, name, descriptor) val p = filter.getPolicyForMethod(currentClassName, name, descriptor) log.d("visitMethod: %s%s [%x] [%s] Policy: %s", name, descriptor, access, signature, p) log.d("visitMethod: %s%s [%x] [%s] Policy: %s", name, descriptor, access, signature, p) options.stats?.onVisitPolicyForMethod(currentClassName, name, descriptor, p, access) log.withIndent { log.withIndent { // If it's a substitute-from method, then skip (== remove). // If it's a substitute-from method, then skip (== remove). Loading tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/visitors/ImplGeneratingAdapter.kt +0 −5 Original line number Original line Diff line number Diff line Loading @@ -141,11 +141,6 @@ class ImplGeneratingAdapter( substituted: Boolean, substituted: Boolean, superVisitor: MethodVisitor?, superVisitor: MethodVisitor?, ): MethodVisitor? { ): MethodVisitor? { // Record statistics about visiting this method when visible. if ((access and Opcodes.ACC_PRIVATE) == 0) { options.stats.onVisitPolicyForMethod(currentClassName, policy) } // Inject method log, if needed. // Inject method log, if needed. var innerVisitor = superVisitor var innerVisitor = superVisitor Loading Loading
tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/HostStubGen.kt +2 −2 Original line number Original line Diff line number Diff line Loading @@ -382,7 +382,7 @@ class HostStubGen(val options: HostStubGenOptions) { stubOutStream.putNextEntry(newEntry) stubOutStream.putNextEntry(newEntry) convertClass(classInternalName, /*forImpl=*/false, bis, convertClass(classInternalName, /*forImpl=*/false, bis, stubOutStream, filter, packageRedirector, enableChecker, classes, stubOutStream, filter, packageRedirector, enableChecker, classes, errors, stats) errors, null) stubOutStream.closeEntry() stubOutStream.closeEntry() } } } } Loading Loading @@ -415,7 +415,7 @@ class HostStubGen(val options: HostStubGenOptions) { enableChecker: Boolean, enableChecker: Boolean, classes: ClassNodes, classes: ClassNodes, errors: HostStubGenErrors, errors: HostStubGenErrors, stats: HostStubGenStats, stats: HostStubGenStats?, ) { ) { val cr = ClassReader(input) val cr = ClassReader(input) Loading
tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/HostStubGenStats.kt +16 −1 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.hoststubgen import com.android.hoststubgen.asm.toHumanReadableClassName import com.android.hoststubgen.asm.toHumanReadableClassName import com.android.hoststubgen.filters.FilterPolicyWithReason import com.android.hoststubgen.filters.FilterPolicyWithReason import org.objectweb.asm.Opcodes import java.io.PrintWriter import java.io.PrintWriter open class HostStubGenStats { open class HostStubGenStats { Loading @@ -28,12 +29,26 @@ open class HostStubGenStats { private val stats = mutableMapOf<String, Stats>() private val stats = mutableMapOf<String, Stats>() fun onVisitPolicyForMethod(fullClassName: String, policy: FilterPolicyWithReason) { fun onVisitPolicyForMethod(fullClassName: String, methodName: String, descriptor: String, policy: FilterPolicyWithReason, access: Int) { // Ignore methods that aren't public if ((access and Opcodes.ACC_PUBLIC) == 0) return // Ignore methods that are abstract if ((access and Opcodes.ACC_ABSTRACT) != 0) return // Ignore methods where policy isn't relevant if (policy.isIgnoredForStats) return if (policy.isIgnoredForStats) return val packageName = resolvePackageName(fullClassName) val packageName = resolvePackageName(fullClassName) val className = resolveClassName(fullClassName) val className = resolveClassName(fullClassName) // Ignore methods for certain generated code if (className.endsWith("Proto") or className.endsWith("ProtoEnums") or className.endsWith("LogTags") or className.endsWith("StatsLog")) { return } val packageStats = stats.getOrPut(packageName) { Stats() } val packageStats = stats.getOrPut(packageName) { Stats() } val classStats = packageStats.children.getOrPut(className) { Stats() } val classStats = packageStats.children.getOrPut(className) { Stats() } Loading
tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/filters/FilterPolicyWithReason.kt +1 −1 Original line number Original line Diff line number Diff line Loading @@ -72,6 +72,6 @@ data class FilterPolicyWithReason ( || reason.contains("is-enum") || reason.contains("is-enum") || reason.contains("is-synthetic-method") || reason.contains("is-synthetic-method") || reason.contains("special-class") || reason.contains("special-class") || reason.contains("substitute-from") || reason.contains("substitute-to") } } } }
tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/visitors/BaseAdapter.kt +2 −1 Original line number Original line Diff line number Diff line Loading @@ -51,7 +51,7 @@ abstract class BaseAdapter ( */ */ data class Options ( data class Options ( val errors: HostStubGenErrors, val errors: HostStubGenErrors, val stats: HostStubGenStats, val stats: HostStubGenStats?, val enablePreTrace: Boolean, val enablePreTrace: Boolean, val enablePostTrace: Boolean, val enablePostTrace: Boolean, val enableNonStubMethodCallDetection: Boolean, val enableNonStubMethodCallDetection: Boolean, Loading Loading @@ -178,6 +178,7 @@ abstract class BaseAdapter ( } } val p = filter.getPolicyForMethod(currentClassName, name, descriptor) val p = filter.getPolicyForMethod(currentClassName, name, descriptor) log.d("visitMethod: %s%s [%x] [%s] Policy: %s", name, descriptor, access, signature, p) log.d("visitMethod: %s%s [%x] [%s] Policy: %s", name, descriptor, access, signature, p) options.stats?.onVisitPolicyForMethod(currentClassName, name, descriptor, p, access) log.withIndent { log.withIndent { // If it's a substitute-from method, then skip (== remove). // If it's a substitute-from method, then skip (== remove). Loading
tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/visitors/ImplGeneratingAdapter.kt +0 −5 Original line number Original line Diff line number Diff line Loading @@ -141,11 +141,6 @@ class ImplGeneratingAdapter( substituted: Boolean, substituted: Boolean, superVisitor: MethodVisitor?, superVisitor: MethodVisitor?, ): MethodVisitor? { ): MethodVisitor? { // Record statistics about visiting this method when visible. if ((access and Opcodes.ACC_PRIVATE) == 0) { options.stats.onVisitPolicyForMethod(currentClassName, policy) } // Inject method log, if needed. // Inject method log, if needed. var innerVisitor = superVisitor var innerVisitor = superVisitor Loading