Emit getDefaultTransactionName for GenTraces()

getDefaultTransactionName converts a binder txn id to a string
This was previously only enabled with the GenTransactionNames
which was primarily used for logging binder stats.

Now, we emit the method for GenTraces as well so that we can
cheaply trace binder transaction names across Java aidl backends.

We don't actually emit the traceBegin/End code in the aidl itself
to keep code size increase minimal, especially for frameworks.jar.
The actual traceBegin/End code will happen in Binder.java

Additionally, we removed the traceBegin/End for 'client' aidl tracing
as well. The 'server' side should be sufficient and if we do need
client side tracing, we can add the traceBegin/End in a central location
like we do for 'server'.

Test: Manual
Bug: 161393989
Change-Id: I090678b4a85b4b57a91cf984d124b0147edfd72f
diff --git a/generate_java_binder.cpp b/generate_java_binder.cpp
index b5b00b4..0905ad6 100644
--- a/generate_java_binder.cpp
+++ b/generate_java_binder.cpp
@@ -153,7 +153,7 @@
   asBinder->statements->Add(std::make_shared<ReturnStatement>(THIS_VALUE));
   this->elements.push_back(asBinder);
 
-  if (options_.GenTransactionNames()) {
+  if (options_.GenTransactionNames() || options_.GenTraces()) {
     // getDefaultTransactionName
     auto getDefaultTransactionName = std::make_shared<Method>();
     getDefaultTransactionName->comment = "/** @hide */";
@@ -233,7 +233,7 @@
   transact_statements->Add(this->transact_switch_user);
 
   // getTransactionName
-  if (options_.GenTransactionNames()) {
+  if (options_.GenTransactionNames() || options_.GenTraces()) {
     // Some transaction codes are common, e.g. INTERFACE_TRANSACTION or DUMP_TRANSACTION.
     // Common transaction codes will not be resolved to a string by getTransactionName. The method
     // will return NULL in this case.
@@ -539,26 +539,8 @@
                              std::shared_ptr<StatementBlock> statement_block,
                              const Options& options) {
   // try and finally
-  auto tryStatement = std::make_shared<TryStatement>();
-  auto finallyStatement = std::make_shared<FinallyStatement>();
   auto& statements = statement_block;
 
-  if (options.GenTraces()) {
-    statements->Add(tryStatement);
-    statements->Add(finallyStatement);
-    statements = tryStatement->statements;
-    tryStatement->statements->Add(std::make_shared<MethodCall>(
-        std::make_shared<LiteralExpression>("android.os.Trace"), "traceBegin",
-        std::vector<std::shared_ptr<Expression>>{
-            std::make_shared<LiteralExpression>("android.os.Trace.TRACE_TAG_AIDL"),
-            std::make_shared<StringLiteralExpression>("AIDL::java::" + iface.GetName() +
-                                                      "::" + method.GetName() + "::server")}));
-    finallyStatement->statements->Add(std::make_shared<MethodCall>(
-        std::make_shared<LiteralExpression>("android.os.Trace"), "traceEnd",
-        std::vector<std::shared_ptr<Expression>>{
-            std::make_shared<LiteralExpression>("android.os.Trace.TRACE_TAG_AIDL")}));
-  }
-
   auto realCall = std::make_shared<MethodCall>(THIS_VALUE, method.GetName());
 
   // args
@@ -756,11 +738,6 @@
   out << "try {\n";
   out.Indent();
 
-  if (options.GenTraces()) {
-    auto tag = "AIDL::java::" + iface.GetName() + "::" + method.GetName() + "::client";
-    out << "android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, \"" << tag << "\");\n";
-  }
-
   // the interface identifier token: the DESCRIPTOR constant, marshalled as a
   // string
   out << "_data.writeInterfaceToken(DESCRIPTOR);\n";
@@ -871,10 +848,6 @@
   }
   out << "_data.recycle();\n";
 
-  if (options.GenTraces()) {
-    out << "android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);\n";
-  }
-
   out.Dedent();
   out << "}\n";  // finally
 
@@ -903,7 +876,7 @@
   stubClass->elements.push_back(transactCode);
 
   // getTransactionName
-  if (options.GenTransactionNames()) {
+  if (options.GenTransactionNames() || options.GenTraces()) {
     auto c = std::make_shared<Case>(transactCodeName);
     c->statements->Add(std::make_shared<ReturnStatement>(
         std::make_shared<StringLiteralExpression>(method.GetName())));
@@ -1352,7 +1325,7 @@
   }
 
   // getMaxTransactionId
-  if (options.GenTransactionNames()) {
+  if (options.GenTransactionNames() || options.GenTraces()) {
     stub->elements.push_back(GenerateMaxTransactionId(max_transaction_id));
   }
 
diff --git a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
index ee02a61..b020fcd 100644
--- a/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
+++ b/tests/golden_output/aidl_test_loggable_interface-java-source/gen/android/aidl/loggable/ILoggableInterface.java
@@ -43,6 +43,26 @@
     {
       return this;
     }
+    /** @hide */
+    public static java.lang.String getDefaultTransactionName(int transactionCode)
+    {
+      switch (transactionCode)
+      {
+        case TRANSACTION_LogThis:
+        {
+          return "LogThis";
+        }
+        default:
+        {
+          return null;
+        }
+      }
+    }
+    /** @hide */
+    public java.lang.String getTransactionName(int transactionCode)
+    {
+      return this.getDefaultTransactionName(transactionCode);
+    }
     @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
     {
       java.lang.String descriptor = DESCRIPTOR;
@@ -61,69 +81,63 @@
       {
         case TRANSACTION_LogThis:
         {
-          try {
-            android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ILoggableInterface::LogThis::server");
-            boolean _arg0;
-            _arg0 = data.readBoolean();
-            boolean[] _arg1;
-            _arg1 = data.createBooleanArray();
-            byte _arg2;
-            _arg2 = data.readByte();
-            byte[] _arg3;
-            _arg3 = data.createByteArray();
-            char _arg4;
-            _arg4 = (char)data.readInt();
-            char[] _arg5;
-            _arg5 = data.createCharArray();
-            int _arg6;
-            _arg6 = data.readInt();
-            int[] _arg7;
-            _arg7 = data.createIntArray();
-            long _arg8;
-            _arg8 = data.readLong();
-            long[] _arg9;
-            _arg9 = data.createLongArray();
-            float _arg10;
-            _arg10 = data.readFloat();
-            float[] _arg11;
-            _arg11 = data.createFloatArray();
-            double _arg12;
-            _arg12 = data.readDouble();
-            double[] _arg13;
-            _arg13 = data.createDoubleArray();
-            java.lang.String _arg14;
-            _arg14 = data.readString();
-            java.lang.String[] _arg15;
-            _arg15 = data.createStringArray();
-            java.util.List<java.lang.String> _arg16;
-            _arg16 = data.createStringArrayList();
-            android.aidl.loggable.Data _arg17;
-            _arg17 = data.readTypedObject(android.aidl.loggable.Data.CREATOR);
-            android.os.IBinder _arg18;
-            _arg18 = data.readStrongBinder();
-            android.os.ParcelFileDescriptor _arg19;
-            _arg19 = data.readTypedObject(android.os.ParcelFileDescriptor.CREATOR);
-            android.os.ParcelFileDescriptor[] _arg20;
-            _arg20 = data.createTypedArray(android.os.ParcelFileDescriptor.CREATOR);
-            data.enforceNoDataAvail();
-            java.lang.String[] _result = this.LogThis(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15, _arg16, _arg17, _arg18, _arg19, _arg20);
-            reply.writeNoException();
-            reply.writeStringArray(_result);
-            reply.writeBooleanArray(_arg1);
-            reply.writeByteArray(_arg3);
-            reply.writeCharArray(_arg5);
-            reply.writeIntArray(_arg7);
-            reply.writeLongArray(_arg9);
-            reply.writeFloatArray(_arg11);
-            reply.writeDoubleArray(_arg13);
-            reply.writeStringArray(_arg15);
-            reply.writeStringList(_arg16);
-            reply.writeTypedObject(_arg19, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
-            reply.writeTypedArray(_arg20, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
-          }
-          finally {
-            android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
-          }
+          boolean _arg0;
+          _arg0 = data.readBoolean();
+          boolean[] _arg1;
+          _arg1 = data.createBooleanArray();
+          byte _arg2;
+          _arg2 = data.readByte();
+          byte[] _arg3;
+          _arg3 = data.createByteArray();
+          char _arg4;
+          _arg4 = (char)data.readInt();
+          char[] _arg5;
+          _arg5 = data.createCharArray();
+          int _arg6;
+          _arg6 = data.readInt();
+          int[] _arg7;
+          _arg7 = data.createIntArray();
+          long _arg8;
+          _arg8 = data.readLong();
+          long[] _arg9;
+          _arg9 = data.createLongArray();
+          float _arg10;
+          _arg10 = data.readFloat();
+          float[] _arg11;
+          _arg11 = data.createFloatArray();
+          double _arg12;
+          _arg12 = data.readDouble();
+          double[] _arg13;
+          _arg13 = data.createDoubleArray();
+          java.lang.String _arg14;
+          _arg14 = data.readString();
+          java.lang.String[] _arg15;
+          _arg15 = data.createStringArray();
+          java.util.List<java.lang.String> _arg16;
+          _arg16 = data.createStringArrayList();
+          android.aidl.loggable.Data _arg17;
+          _arg17 = data.readTypedObject(android.aidl.loggable.Data.CREATOR);
+          android.os.IBinder _arg18;
+          _arg18 = data.readStrongBinder();
+          android.os.ParcelFileDescriptor _arg19;
+          _arg19 = data.readTypedObject(android.os.ParcelFileDescriptor.CREATOR);
+          android.os.ParcelFileDescriptor[] _arg20;
+          _arg20 = data.createTypedArray(android.os.ParcelFileDescriptor.CREATOR);
+          data.enforceNoDataAvail();
+          java.lang.String[] _result = this.LogThis(_arg0, _arg1, _arg2, _arg3, _arg4, _arg5, _arg6, _arg7, _arg8, _arg9, _arg10, _arg11, _arg12, _arg13, _arg14, _arg15, _arg16, _arg17, _arg18, _arg19, _arg20);
+          reply.writeNoException();
+          reply.writeStringArray(_result);
+          reply.writeBooleanArray(_arg1);
+          reply.writeByteArray(_arg3);
+          reply.writeCharArray(_arg5);
+          reply.writeIntArray(_arg7);
+          reply.writeLongArray(_arg9);
+          reply.writeFloatArray(_arg11);
+          reply.writeDoubleArray(_arg13);
+          reply.writeStringArray(_arg15);
+          reply.writeStringList(_arg16);
+          reply.writeTypedObject(_arg19, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+          reply.writeTypedArray(_arg20, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
           break;
         }
         default:
@@ -154,7 +168,6 @@
         android.os.Parcel _reply = android.os.Parcel.obtain();
         java.lang.String[] _result;
         try {
-          android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ILoggableInterface::LogThis::client");
           _data.writeInterfaceToken(DESCRIPTOR);
           _data.writeBoolean(boolValue);
           _data.writeBooleanArray(boolArray);
@@ -197,12 +210,16 @@
         finally {
           _reply.recycle();
           _data.recycle();
-          android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
         }
         return _result;
       }
     }
     static final int TRANSACTION_LogThis = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+    /** @hide */
+    public int getMaxTransactionId()
+    {
+      return 0;
+    }
   }
   public static final java.lang.String DESCRIPTOR = "android$aidl$loggable$ILoggableInterface".replace('$', '.');
   public java.lang.String[] LogThis(boolean boolValue, boolean[] boolArray, byte byteValue, byte[] byteArray, char charValue, char[] charArray, int intValue, int[] intArray, long longValue, long[] longArray, float floatValue, float[] floatArray, double doubleValue, double[] doubleArray, java.lang.String stringValue, java.lang.String[] stringArray, java.util.List<java.lang.String> listValue, android.aidl.loggable.Data dataValue, android.os.IBinder binderValue, android.os.ParcelFileDescriptor pfdValue, android.os.ParcelFileDescriptor[] pfdArray) throws android.os.RemoteException;
@@ -246,6 +263,26 @@
       {
         return this;
       }
+      /** @hide */
+      public static java.lang.String getDefaultTransactionName(int transactionCode)
+      {
+        switch (transactionCode)
+        {
+          case TRANSACTION_Log:
+          {
+            return "Log";
+          }
+          default:
+          {
+            return null;
+          }
+        }
+      }
+      /** @hide */
+      public java.lang.String getTransactionName(int transactionCode)
+      {
+        return this.getDefaultTransactionName(transactionCode);
+      }
       @Override public boolean onTransact(int code, android.os.Parcel data, android.os.Parcel reply, int flags) throws android.os.RemoteException
       {
         java.lang.String descriptor = DESCRIPTOR;
@@ -264,17 +301,11 @@
         {
           case TRANSACTION_Log:
           {
-            try {
-              android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ISub::Log::server");
-              int _arg0;
-              _arg0 = data.readInt();
-              data.enforceNoDataAvail();
-              this.Log(_arg0);
-              reply.writeNoException();
-            }
-            finally {
-              android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
-            }
+            int _arg0;
+            _arg0 = data.readInt();
+            data.enforceNoDataAvail();
+            this.Log(_arg0);
+            reply.writeNoException();
             break;
           }
           default:
@@ -304,7 +335,6 @@
           android.os.Parcel _data = android.os.Parcel.obtain();
           android.os.Parcel _reply = android.os.Parcel.obtain();
           try {
-            android.os.Trace.traceBegin(android.os.Trace.TRACE_TAG_AIDL, "AIDL::java::ISub::Log::client");
             _data.writeInterfaceToken(DESCRIPTOR);
             _data.writeInt(value);
             boolean _status = mRemote.transact(Stub.TRANSACTION_Log, _data, _reply, 0);
@@ -313,11 +343,15 @@
           finally {
             _reply.recycle();
             _data.recycle();
-            android.os.Trace.traceEnd(android.os.Trace.TRACE_TAG_AIDL);
           }
         }
       }
       static final int TRANSACTION_Log = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
+      /** @hide */
+      public int getMaxTransactionId()
+      {
+        return 0;
+      }
     }
     public static final java.lang.String DESCRIPTOR = "android$aidl$loggable$ILoggableInterface$ISub".replace('$', '.');
     public void Log(int value) throws android.os.RemoteException;