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

Commit f186125c authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Update Ravenhelper PTA

- Fix method lookup bug when a method has multiple non-primitive arguments.

- Support converting <cinit> to @KeepStaticInitializer

- When <init> isn't found in the source file, assume it's the implicit ctor,
  and add a comment about it on the class.
  (we might want to add "@RavenwoodKeepDefaultConstructor"??)

- Ignore more classes

- Fix format in RavenwoodMethodCallLogger output

Bug: 292141694
Flag: TEST_ONLY
Test: $ANDROID_BUILD_TOP/frameworks/base/ravenwood/scripts/run-ravenwood-tests.sh -r
Change-Id: Ia7abdef06538ab0c7d932934b7d81fa6057408be
parent 59e2c8d7
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -146,7 +146,7 @@ public class RavenwoodMethodCallLogger {
    private final Map<Class<?>, Set<MethodDesc>> mAllMethods = new HashMap<>();

    /** Information about the current thread. */
    private class ThreadInfo {
    private static class ThreadInfo {
        /**
         * We save the current thread's nest call level here and use that as the initial level.
         * We do it because otherwise the nest level would be too deep by the time test
@@ -168,6 +168,9 @@ public class RavenwoodMethodCallLogger {

        sIgnoreClasses.add(android.text.FontConfig.class);

        sIgnoreClasses.add(android.app.PropertyInvalidatedCache.class);
        sIgnoreClasses.add(android.os.IpcDataCache.class);

        sIgnoreClasses.add(android.os.SystemClock.class);
        sIgnoreClasses.add(android.os.Trace.class);
        sIgnoreClasses.add(android.os.LocaleList.class);
@@ -192,6 +195,8 @@ public class RavenwoodMethodCallLogger {
        // Following classes *may* be interesting for some purposes, but the initialization is
        // too noisy...
        sIgnoreClasses.add(android.graphics.fonts.SystemFonts.class);
        sIgnoreClasses.add(android.content.res.FontScaleConverterFactory.class);
        sIgnoreClasses.add(android.content.res.FontScaleConverterImpl.class);
    }

    /**
@@ -222,7 +227,9 @@ public class RavenwoodMethodCallLogger {
                return true;
            }
        }

        if ("android.util.proto".equals(clazz.getPackageName())) {
            return true;
        }
        switch (clazz.getSimpleName()) {
            case "EventLogTags":
                return true;
@@ -455,6 +462,7 @@ public class RavenwoodMethodCallLogger {

                        wr.print("    method ");
                        wr.print(method.name);
                        wr.print(" ");
                        wr.print(method.desc);
                        wr.print("\tkeep");

+7 −7
Original line number Diff line number Diff line
@@ -115,8 +115,8 @@ public class RavenwoodMethodCallLoggerTest {
        // Note, for implementation detail reasons, the nest levels show up as negative,
        // because of how we initialize the initial nest level.
        String expected = """
# [123: Ravenwood:Test]: [@-5] android.content.Context.getPackageName()Ljava/lang/String;
# [123: Ravenwood:Test]: [@-5] android.content.Context.getOpPackgeName()Ljava/lang/String;
# [123: Ravenwood:Test]: [@-4] android.content.Context.getPackageName()Ljava/lang/String;
# [123: Ravenwood:Test]: [@-4] android.content.Context.getOpPackgeName()Ljava/lang/String;
                """;
        assertThat(bos.toString().trim()).isEqualTo(expected.trim());

+46 −0
Original line number Diff line number Diff line
@@ -1353,6 +1353,52 @@ SourceFile: "TinyFrameworkExceptionTester.java"
RuntimeInvisibleAnnotations:
  x: #x()
    android.hosttest.annotation.HostSideTestWholeClassKeep
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta.class
  Compiled from "TinyFrameworkForPta.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkForPta
  minor version: 0
  major version: 65
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #x                          // com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta
  super_class: #x                         // java/lang/Object
  interfaces: 0, fields: 0, methods: 3, attributes: 1
Constant pool:
{
  public com.android.hoststubgen.test.tinyframework.TinyFrameworkForPta();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         x: aload_0
         x: invokespecial #x                  // Method java/lang/Object."<init>":()V
         x: return
      LineNumberTable:
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkForPta;

  public void foo(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=3, args_size=3
         x: return
      LineNumberTable:
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       1     0  this   Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkForPta;
            0       1     1  arg1   Ljava/lang/String;
            0       1     2  arg2   Ljava/lang/Object;

  static {};
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=0, locals=0, args_size=0
         x: return
      LineNumberTable:
}
SourceFile: "TinyFrameworkForPta.java"
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkForTextPolicy.class
  Compiled from "TinyFrameworkForTextPolicy.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkForTextPolicy
+66 −0
Original line number Diff line number Diff line
@@ -1565,6 +1565,72 @@ RuntimeVisibleAnnotations:
    )
  x: #x()
    android.hosttest.annotation.HostSideTestWholeClassKeep
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta.class
  Compiled from "TinyFrameworkForPta.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkForPta
  minor version: 0
  major version: 65
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #x                          // com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta
  super_class: #x                         // java/lang/Object
  interfaces: 0, fields: 0, methods: 3, attributes: 2
Constant pool:
{
  public com.android.hoststubgen.test.tinyframework.TinyFrameworkForPta();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
         x: aload_0
         x: invokespecial #x                 // Method java/lang/Object."<init>":()V
         x: return
      LineNumberTable:
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       5     0  this   Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkForPta;
    RuntimeVisibleAnnotations:
      x: #x(#x=s#x)
        com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
          reason="file-override (Keep implicit ctor)"
        )

  public void foo(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=0, locals=3, args_size=3
         x: return
      LineNumberTable:
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       1     0  this   Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkForPta;
            0       1     1  arg1   Ljava/lang/String;
            0       1     2  arg2   Ljava/lang/Object;
    RuntimeVisibleAnnotations:
      x: #x(#x=s#x)
        com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
          reason="file-override (keep multi-arg method)"
        )

  static {};
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=0, locals=0, args_size=0
         x: return
      LineNumberTable:
    RuntimeVisibleAnnotations:
      x: #x(#x=s#x)
        com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
          reason="file-override (Keep static initializer)"
        )
}
SourceFile: "TinyFrameworkForPta.java"
RuntimeVisibleAnnotations:
  x: #x(#x=s#x)
    com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
      reason="file-override"
    )
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkForTextPolicy.class
  Compiled from "TinyFrameworkForTextPolicy.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkForTextPolicy
+84 −0
Original line number Diff line number Diff line
@@ -1822,6 +1822,90 @@ RuntimeVisibleAnnotations:
    )
  x: #x()
    android.hosttest.annotation.HostSideTestWholeClassKeep
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta.class
  Compiled from "TinyFrameworkForPta.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkForPta
  minor version: 0
  major version: 65
  flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: #x                          // com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta
  super_class: #x                         // java/lang/Object
  interfaces: 0, fields: 0, methods: 3, attributes: 2
Constant pool:
{
  public com.android.hoststubgen.test.tinyframework.TinyFrameworkForPta();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=1, args_size=1
         x: ldc           #x                  // class com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta
         x: ldc           #x                 // String <init>
         x: ldc           #x                 // String ()V
         x: ldc           #x                 // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
         x: invokestatic  #x                 // Method com/android/hoststubgen/hosthelper/HostTestUtils.callMethodCallHook:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        x: aload_0
        x: invokespecial #x                 // Method java/lang/Object."<init>":()V
        x: return
      LineNumberTable:
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           11       5     0  this   Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkForPta;
    RuntimeVisibleAnnotations:
      x: #x(#x=s#x)
        com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
          reason="file-override (Keep implicit ctor)"
        )

  public void foo(java.lang.String, java.lang.Object);
    descriptor: (Ljava/lang/String;Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=3, args_size=3
         x: ldc           #x                  // class com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta
         x: ldc           #x                 // String foo
         x: ldc           #x                 // String (Ljava/lang/String;Ljava/lang/Object;)V
         x: ldc           #x                 // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
         x: invokestatic  #x                 // Method com/android/hoststubgen/hosthelper/HostTestUtils.callMethodCallHook:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        x: return
      LineNumberTable:
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
           11       1     0  this   Lcom/android/hoststubgen/test/tinyframework/TinyFrameworkForPta;
           11       1     1  arg1   Ljava/lang/String;
           11       1     2  arg2   Ljava/lang/Object;
    RuntimeVisibleAnnotations:
      x: #x(#x=s#x)
        com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
          reason="file-override (keep multi-arg method)"
        )

  static {};
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=4, locals=0, args_size=0
         x: ldc           #x                  // class com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta
         x: ldc           #x                 // String <clinit>
         x: ldc           #x                 // String ()V
         x: ldc           #x                 // String com.android.hoststubgen.hosthelper.HostTestUtils.logMethodCall
         x: invokestatic  #x                 // Method com/android/hoststubgen/hosthelper/HostTestUtils.callMethodCallHook:(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V
        x: ldc           #x                  // class com/android/hoststubgen/test/tinyframework/TinyFrameworkForPta
        x: ldc           #x                 // String com.android.hoststubgen.hosthelper.HostTestUtils.logClassLoaded
        x: invokestatic  #x                 // Method com/android/hoststubgen/hosthelper/HostTestUtils.onClassLoaded:(Ljava/lang/Class;Ljava/lang/String;)V
        x: return
      LineNumberTable:
    RuntimeVisibleAnnotations:
      x: #x(#x=s#x)
        com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
          reason="file-override (Keep static initializer)"
        )
}
SourceFile: "TinyFrameworkForPta.java"
RuntimeVisibleAnnotations:
  x: #x(#x=s#x)
    com.android.hoststubgen.hosthelper.HostStubGenProcessedAsKeep(
      reason="file-override"
    )
## Class: com/android/hoststubgen/test/tinyframework/TinyFrameworkForTextPolicy.class
  Compiled from "TinyFrameworkForTextPolicy.java"
public class com.android.hoststubgen.test.tinyframework.TinyFrameworkForTextPolicy
Loading