Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f45215f authored by Jeff Sharkey's avatar Jeff Sharkey Committed by Android (Google) Code Review
Browse files

Merge "hoststubgen: Slightly refined stats." into main

parents 7f0da437 fae66ea5
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -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()
                }
                }
            }
            }
@@ -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)


+16 −1
Original line number Original line Diff line number Diff line
@@ -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 {
@@ -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() }


+1 −1
Original line number Original line Diff line number Diff line
@@ -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")
        }
        }
}
}
+2 −1
Original line number Original line Diff line number Diff line
@@ -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,
@@ -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).
+0 −5
Original line number Original line Diff line number Diff line
@@ -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