Loading Ravenwood.bp +24 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,18 @@ genrule { ], } genrule { name: "framework-minus-apex.ravenwood.keep_all", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":framework-minus-apex.ravenwood-base{hoststubgen_keep_all.txt}", ], out: [ "hoststubgen_framework-minus-apex_keep_all.txt", ], } java_library { name: "services.core-for-hoststubgen", installable: false, // host only jar. Loading Loading @@ -189,6 +201,18 @@ genrule { ], } genrule { name: "services.core.ravenwood.keep_all", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":services.core.ravenwood-base{hoststubgen_keep_all.txt}", ], out: [ "hoststubgen_services.core_keep_all.txt", ], } java_library { name: "services.core.ravenwood-jarjar", installable: false, Loading ravenwood/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -221,7 +221,9 @@ sh_test_host { data: [ ":framework-minus-apex.ravenwood.stats", ":framework-minus-apex.ravenwood.apis", ":framework-minus-apex.ravenwood.keep_all", ":services.core.ravenwood.stats", ":services.core.ravenwood.apis", ":services.core.ravenwood.keep_all", ], } ravenwood/scripts/ravenwood-stats-collector.sh +12 −2 Original line number Diff line number Diff line Loading @@ -18,8 +18,14 @@ set -e # Output files stats=/tmp/ravenwood-stats-all.csv apis=/tmp/ravenwood-apis-all.csv out_dir=/tmp/ravenwood stats=$out_dir/ravenwood-stats-all.csv apis=$out_dir/ravenwood-apis-all.csv keep_all_dir=$out_dir/ravenwood-keep-all/ rm -fr $out_dir mkdir -p $out_dir mkdir -p $keep_all_dir # Where the input files are. path=$ANDROID_BUILD_TOP/out/host/linux-x86/testcases/ravenwood-stats-checker/x86_64/ Loading Loading @@ -76,3 +82,7 @@ collect_apis() { collect_stats $stats collect_apis $apis cp *keep_all.txt $keep_all_dir echo "Keep all files created at:" find $keep_all_dir -type f No newline at end of file tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/filters/AndroidHeuristicsFilter.kt +11 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ class AndroidHeuristicsFilter( val aidlPolicy: FilterPolicyWithReason?, val featureFlagsPolicy: FilterPolicyWithReason?, val syspropsPolicy: FilterPolicyWithReason?, val rFilePolicy: FilterPolicyWithReason?, fallback: OutputFilter ) : DelegatingFilter(fallback) { override fun getPolicyForClass(className: String): FilterPolicyWithReason { Loading @@ -37,6 +38,9 @@ class AndroidHeuristicsFilter( if (syspropsPolicy != null && classes.isSyspropsClass(className)) { return syspropsPolicy } if (rFilePolicy != null && classes.isRClass(className)) { return rFilePolicy } return super.getPolicyForClass(className) } } Loading Loading @@ -74,3 +78,10 @@ private fun ClassNodes.isSyspropsClass(className: String): Boolean { return className.startsWith("android/sysprop/") && className.endsWith("Properties") } /** * @return if a given class "seems like" an R class or its nested classes. */ private fun ClassNodes.isRClass(className: String): Boolean { return className.endsWith("/R") || className.contains("/R$") } tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt +24 −12 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.hoststubgen.filters import com.android.hoststubgen.ParseException import com.android.hoststubgen.asm.ClassNodes import com.android.hoststubgen.asm.toHumanReadableClassName import com.android.hoststubgen.log import com.android.hoststubgen.normalizeTextLine import com.android.hoststubgen.whitespaceRegex Loading @@ -31,13 +32,17 @@ import java.util.Objects * Print a class node as a "keep" policy. */ fun printAsTextPolicy(pw: PrintWriter, cn: ClassNode) { pw.printf("class %s\t%s\n", cn.name, "keep") pw.printf("class %s %s\n", cn.name.toHumanReadableClassName(), "keep") for (f in cn.fields ?: emptyList()) { pw.printf(" field %s\t%s\n", f.name, "keep") cn.fields?.let { for (f in it.sortedWith(compareBy({ it.name }))) { pw.printf(" field %s %s\n", f.name, "keep") } } cn.methods?.let { for (m in it.sortedWith(compareBy({ it.name }, { it.desc }))) { pw.printf(" method %s %s %s\n", m.name, m.desc, "keep") } for (m in cn.methods ?: emptyList()) { pw.printf(" method %s\t%s\t%s\n", m.name, m.desc, "keep") } } Loading Loading @@ -66,6 +71,7 @@ fun createFilterFromTextPolicyFile( var aidlPolicy: FilterPolicyWithReason? = null var featureFlagsPolicy: FilterPolicyWithReason? = null var syspropsPolicy: FilterPolicyWithReason? = null var rFilePolicy: FilterPolicyWithReason? = null try { BufferedReader(FileReader(filename)).use { reader -> Loading Loading @@ -162,6 +168,14 @@ fun createFilterFromTextPolicyFile( syspropsPolicy = policy.withReason( "$FILTER_REASON (special-class sysprops)") } SpecialClass.RFile -> { if (rFilePolicy != null) { throw ParseException( "Policy for R file already defined") } rFilePolicy = policy.withReason( "$FILTER_REASON (special-class R file)") } } } } Loading Loading @@ -225,13 +239,9 @@ fun createFilterFromTextPolicyFile( throw e.withSourceInfo(filename, lineNo) } var ret: OutputFilter = imf if (aidlPolicy != null || featureFlagsPolicy != null || syspropsPolicy != null) { log.d("AndroidHeuristicsFilter enabled") ret = AndroidHeuristicsFilter( classes, aidlPolicy, featureFlagsPolicy, syspropsPolicy, imf) } return ret // Wrap the in-memory-filter with AHF. return AndroidHeuristicsFilter( classes, aidlPolicy, featureFlagsPolicy, syspropsPolicy, rFilePolicy, imf) } } Loading @@ -240,6 +250,7 @@ private enum class SpecialClass { Aidl, FeatureFlags, Sysprops, RFile, } private fun resolveSpecialClass(className: String): SpecialClass { Loading @@ -250,6 +261,7 @@ private fun resolveSpecialClass(className: String): SpecialClass { ":aidl" -> return SpecialClass.Aidl ":feature_flags" -> return SpecialClass.FeatureFlags ":sysprops" -> return SpecialClass.Sysprops ":r" -> return SpecialClass.RFile } throw ParseException("Invalid special class name \"$className\"") } Loading Loading
Ravenwood.bp +24 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,18 @@ genrule { ], } genrule { name: "framework-minus-apex.ravenwood.keep_all", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":framework-minus-apex.ravenwood-base{hoststubgen_keep_all.txt}", ], out: [ "hoststubgen_framework-minus-apex_keep_all.txt", ], } java_library { name: "services.core-for-hoststubgen", installable: false, // host only jar. Loading Loading @@ -189,6 +201,18 @@ genrule { ], } genrule { name: "services.core.ravenwood.keep_all", defaults: ["ravenwood-internal-only-visibility-genrule"], cmd: "cp $(in) $(out)", srcs: [ ":services.core.ravenwood-base{hoststubgen_keep_all.txt}", ], out: [ "hoststubgen_services.core_keep_all.txt", ], } java_library { name: "services.core.ravenwood-jarjar", installable: false, Loading
ravenwood/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -221,7 +221,9 @@ sh_test_host { data: [ ":framework-minus-apex.ravenwood.stats", ":framework-minus-apex.ravenwood.apis", ":framework-minus-apex.ravenwood.keep_all", ":services.core.ravenwood.stats", ":services.core.ravenwood.apis", ":services.core.ravenwood.keep_all", ], }
ravenwood/scripts/ravenwood-stats-collector.sh +12 −2 Original line number Diff line number Diff line Loading @@ -18,8 +18,14 @@ set -e # Output files stats=/tmp/ravenwood-stats-all.csv apis=/tmp/ravenwood-apis-all.csv out_dir=/tmp/ravenwood stats=$out_dir/ravenwood-stats-all.csv apis=$out_dir/ravenwood-apis-all.csv keep_all_dir=$out_dir/ravenwood-keep-all/ rm -fr $out_dir mkdir -p $out_dir mkdir -p $keep_all_dir # Where the input files are. path=$ANDROID_BUILD_TOP/out/host/linux-x86/testcases/ravenwood-stats-checker/x86_64/ Loading Loading @@ -76,3 +82,7 @@ collect_apis() { collect_stats $stats collect_apis $apis cp *keep_all.txt $keep_all_dir echo "Keep all files created at:" find $keep_all_dir -type f No newline at end of file
tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/filters/AndroidHeuristicsFilter.kt +11 −0 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ class AndroidHeuristicsFilter( val aidlPolicy: FilterPolicyWithReason?, val featureFlagsPolicy: FilterPolicyWithReason?, val syspropsPolicy: FilterPolicyWithReason?, val rFilePolicy: FilterPolicyWithReason?, fallback: OutputFilter ) : DelegatingFilter(fallback) { override fun getPolicyForClass(className: String): FilterPolicyWithReason { Loading @@ -37,6 +38,9 @@ class AndroidHeuristicsFilter( if (syspropsPolicy != null && classes.isSyspropsClass(className)) { return syspropsPolicy } if (rFilePolicy != null && classes.isRClass(className)) { return rFilePolicy } return super.getPolicyForClass(className) } } Loading Loading @@ -74,3 +78,10 @@ private fun ClassNodes.isSyspropsClass(className: String): Boolean { return className.startsWith("android/sysprop/") && className.endsWith("Properties") } /** * @return if a given class "seems like" an R class or its nested classes. */ private fun ClassNodes.isRClass(className: String): Boolean { return className.endsWith("/R") || className.contains("/R$") }
tools/hoststubgen/hoststubgen/src/com/android/hoststubgen/filters/TextFileFilterPolicyParser.kt +24 −12 Original line number Diff line number Diff line Loading @@ -17,6 +17,7 @@ package com.android.hoststubgen.filters import com.android.hoststubgen.ParseException import com.android.hoststubgen.asm.ClassNodes import com.android.hoststubgen.asm.toHumanReadableClassName import com.android.hoststubgen.log import com.android.hoststubgen.normalizeTextLine import com.android.hoststubgen.whitespaceRegex Loading @@ -31,13 +32,17 @@ import java.util.Objects * Print a class node as a "keep" policy. */ fun printAsTextPolicy(pw: PrintWriter, cn: ClassNode) { pw.printf("class %s\t%s\n", cn.name, "keep") pw.printf("class %s %s\n", cn.name.toHumanReadableClassName(), "keep") for (f in cn.fields ?: emptyList()) { pw.printf(" field %s\t%s\n", f.name, "keep") cn.fields?.let { for (f in it.sortedWith(compareBy({ it.name }))) { pw.printf(" field %s %s\n", f.name, "keep") } } cn.methods?.let { for (m in it.sortedWith(compareBy({ it.name }, { it.desc }))) { pw.printf(" method %s %s %s\n", m.name, m.desc, "keep") } for (m in cn.methods ?: emptyList()) { pw.printf(" method %s\t%s\t%s\n", m.name, m.desc, "keep") } } Loading Loading @@ -66,6 +71,7 @@ fun createFilterFromTextPolicyFile( var aidlPolicy: FilterPolicyWithReason? = null var featureFlagsPolicy: FilterPolicyWithReason? = null var syspropsPolicy: FilterPolicyWithReason? = null var rFilePolicy: FilterPolicyWithReason? = null try { BufferedReader(FileReader(filename)).use { reader -> Loading Loading @@ -162,6 +168,14 @@ fun createFilterFromTextPolicyFile( syspropsPolicy = policy.withReason( "$FILTER_REASON (special-class sysprops)") } SpecialClass.RFile -> { if (rFilePolicy != null) { throw ParseException( "Policy for R file already defined") } rFilePolicy = policy.withReason( "$FILTER_REASON (special-class R file)") } } } } Loading Loading @@ -225,13 +239,9 @@ fun createFilterFromTextPolicyFile( throw e.withSourceInfo(filename, lineNo) } var ret: OutputFilter = imf if (aidlPolicy != null || featureFlagsPolicy != null || syspropsPolicy != null) { log.d("AndroidHeuristicsFilter enabled") ret = AndroidHeuristicsFilter( classes, aidlPolicy, featureFlagsPolicy, syspropsPolicy, imf) } return ret // Wrap the in-memory-filter with AHF. return AndroidHeuristicsFilter( classes, aidlPolicy, featureFlagsPolicy, syspropsPolicy, rFilePolicy, imf) } } Loading @@ -240,6 +250,7 @@ private enum class SpecialClass { Aidl, FeatureFlags, Sysprops, RFile, } private fun resolveSpecialClass(className: String): SpecialClass { Loading @@ -250,6 +261,7 @@ private fun resolveSpecialClass(className: String): SpecialClass { ":aidl" -> return SpecialClass.Aidl ":feature_flags" -> return SpecialClass.FeatureFlags ":sysprops" -> return SpecialClass.Sysprops ":r" -> return SpecialClass.RFile } throw ParseException("Invalid special class name \"$className\"") } Loading