Move transaction creation to runtime

Move the transaction creation to runtime instead of passing a pointer to
runtime when EnterTransactionMode. Because later there will be more
places to create transaction so this makes the code cleaner and more
compact.

Test: make test-art-host -j64
Change-Id: I971edf3110eb6634b6e0f7f56256be04517a5281
diff --git a/runtime/interpreter/unstarted_runtime_test.cc b/runtime/interpreter/unstarted_runtime_test.cc
index 3461a65..87fa8be 100644
--- a/runtime/interpreter/unstarted_runtime_test.cc
+++ b/runtime/interpreter/unstarted_runtime_test.cc
@@ -780,44 +780,40 @@
     {
       JValue result;
       tmp->SetVReg(0, static_cast<int32_t>(i));
-      Transaction transaction;
-      Runtime::Current()->EnterTransactionMode(&transaction);
+      Runtime::Current()->EnterTransactionMode();
       UnstartedCharacterToLowerCase(self, tmp, &result, 0);
+      ASSERT_TRUE(Runtime::Current()->IsTransactionAborted());
       Runtime::Current()->ExitTransactionMode();
       ASSERT_TRUE(self->IsExceptionPending());
-      ASSERT_TRUE(transaction.IsAborted());
     }
     {
       JValue result;
       tmp->SetVReg(0, static_cast<int32_t>(i));
-      Transaction transaction;
-      Runtime::Current()->EnterTransactionMode(&transaction);
+      Runtime::Current()->EnterTransactionMode();
       UnstartedCharacterToUpperCase(self, tmp, &result, 0);
+      ASSERT_TRUE(Runtime::Current()->IsTransactionAborted());
       Runtime::Current()->ExitTransactionMode();
       ASSERT_TRUE(self->IsExceptionPending());
-      ASSERT_TRUE(transaction.IsAborted());
     }
   }
   for (uint64_t i = 256; i <= std::numeric_limits<uint32_t>::max(); i <<= 1) {
     {
       JValue result;
       tmp->SetVReg(0, static_cast<int32_t>(i));
-      Transaction transaction;
-      Runtime::Current()->EnterTransactionMode(&transaction);
+      Runtime::Current()->EnterTransactionMode();
       UnstartedCharacterToLowerCase(self, tmp, &result, 0);
+      ASSERT_TRUE(Runtime::Current()->IsTransactionAborted());
       Runtime::Current()->ExitTransactionMode();
       ASSERT_TRUE(self->IsExceptionPending());
-      ASSERT_TRUE(transaction.IsAborted());
     }
     {
       JValue result;
       tmp->SetVReg(0, static_cast<int32_t>(i));
-      Transaction transaction;
-      Runtime::Current()->EnterTransactionMode(&transaction);
+      Runtime::Current()->EnterTransactionMode();
       UnstartedCharacterToUpperCase(self, tmp, &result, 0);
+      ASSERT_TRUE(Runtime::Current()->IsTransactionAborted());
       Runtime::Current()->ExitTransactionMode();
       ASSERT_TRUE(self->IsExceptionPending());
-      ASSERT_TRUE(transaction.IsAborted());
     }
   }
 
@@ -996,12 +992,11 @@
     ShadowFrame* caller_frame = ShadowFrame::CreateDeoptimizedFrame(10, nullptr, caller_method, 0);
     shadow_frame->SetLink(caller_frame);
 
-    Transaction transaction;
-    Runtime::Current()->EnterTransactionMode(&transaction);
+    Runtime::Current()->EnterTransactionMode();
     UnstartedThreadLocalGet(self, shadow_frame, &result, 0);
+    ASSERT_TRUE(Runtime::Current()->IsTransactionAborted());
     Runtime::Current()->ExitTransactionMode();
     ASSERT_TRUE(self->IsExceptionPending());
-    ASSERT_TRUE(transaction.IsAborted());
     self->ClearException();
 
     ShadowFrame::DeleteDeoptimizedFrame(caller_frame);
@@ -1066,12 +1061,11 @@
   PrepareForAborts();
 
   {
-    Transaction transaction;
-    Runtime::Current()->EnterTransactionMode(&transaction);
+    Runtime::Current()->EnterTransactionMode();
     UnstartedThreadCurrentThread(self, shadow_frame, &result, 0);
+    ASSERT_TRUE(Runtime::Current()->IsTransactionAborted());
     Runtime::Current()->ExitTransactionMode();
     ASSERT_TRUE(self->IsExceptionPending());
-    ASSERT_TRUE(transaction.IsAborted());
     self->ClearException();
   }
 
@@ -1138,28 +1132,27 @@
       mirror::String* name_string = mirror::String::AllocFromModifiedUtf8(self, name);
       CHECK(name_string != nullptr);
 
-      Transaction transaction;
       if (in_transaction) {
-        Runtime::Current()->EnterTransactionMode(&transaction);
+        Runtime::Current()->EnterTransactionMode();
       }
       CHECK(!self->IsExceptionPending());
 
       runner(self, shadow_frame, name_string, &result);
 
-      if (in_transaction) {
-        Runtime::Current()->ExitTransactionMode();
-      }
-
       if (should_succeed) {
         CHECK(!self->IsExceptionPending()) << name << " " << self->GetException()->Dump();
         CHECK(result.GetL() != nullptr) << name;
       } else {
         CHECK(self->IsExceptionPending()) << name;
         if (in_transaction) {
-          ASSERT_TRUE(transaction.IsAborted());
+          ASSERT_TRUE(Runtime::Current()->IsTransactionAborted());
         }
         self->ClearException();
       }
+
+      if (in_transaction) {
+        Runtime::Current()->ExitTransactionMode();
+      }
     }
 
     ShadowFrame::DeleteDeoptimizedFrame(shadow_frame);