ART: Refactor Agent into Agent and AgentSpec

Separate configuration/loading and runtime state.

Test: m test-art-host
Change-Id: I69bb91e13ef10b9e1ce313f45b0b809b913d8e10
diff --git a/runtime/java_vm_ext.cc b/runtime/java_vm_ext.cc
index 104fb66..e159436 100644
--- a/runtime/java_vm_ext.cc
+++ b/runtime/java_vm_ext.cc
@@ -1052,17 +1052,17 @@
 static void* FindCodeForNativeMethodInAgents(ArtMethod* m) REQUIRES_SHARED(Locks::mutator_lock_) {
   std::string jni_short_name(m->JniShortName());
   std::string jni_long_name(m->JniLongName());
-  for (const ti::Agent& agent : Runtime::Current()->GetAgents()) {
-    void* fn = agent.FindSymbol(jni_short_name);
+  for (const std::unique_ptr<ti::Agent>& agent : Runtime::Current()->GetAgents()) {
+    void* fn = agent->FindSymbol(jni_short_name);
     if (fn != nullptr) {
       VLOG(jni) << "Found implementation for " << m->PrettyMethod()
-                << " (symbol: " << jni_short_name << ") in " << agent;
+                << " (symbol: " << jni_short_name << ") in " << *agent;
       return fn;
     }
-    fn = agent.FindSymbol(jni_long_name);
+    fn = agent->FindSymbol(jni_long_name);
     if (fn != nullptr) {
       VLOG(jni) << "Found implementation for " << m->PrettyMethod()
-                << " (symbol: " << jni_long_name << ") in " << agent;
+                << " (symbol: " << jni_long_name << ") in " << *agent;
       return fn;
     }
   }