diff options
-rw-r--r-- | org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java | 2 | ||||
-rw-r--r-- | org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java | 40 |
2 files changed, 30 insertions, 12 deletions
diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java index f6c1e767..b4dd0c10 100644 --- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java +++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Agent.java @@ -82,6 +82,8 @@ public class Agent implements IAgent { /** * Returns a global instance which is already started. If an agent has not * been initialized then one will be created via {@link Offline#createAgent()}. + * This will capture any data written via {@link Offline#getProbes} prior to + * this call, but not subsequently. * * @return global instance * @throws IllegalStateException diff --git a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java index 21a78bbd..7eac19fa 100644 --- a/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java +++ b/org.jacoco.agent.rt/src/org/jacoco/agent/rt/internal/Offline.java @@ -11,8 +11,11 @@ *******************************************************************************/ package org.jacoco.agent.rt.internal; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; +import org.jacoco.core.data.ExecutionData; import org.jacoco.core.data.ExecutionDataStore; import org.jacoco.core.runtime.AgentOptions; import org.jacoco.core.runtime.RuntimeData; @@ -25,18 +28,17 @@ public final class Offline { // BEGIN android-change // private static final RuntimeData DATA; - private static final ExecutionDataStore DATA; + private static final Map<Long, ExecutionData> DATA = new HashMap<Long, ExecutionData>(); // END android-change private static final String CONFIG_RESOURCE = "/jacoco-agent.properties"; - static { - // BEGIN android-change - // final Properties config = ConfigLoader.load(CONFIG_RESOURCE, - // System.getProperties()); - // DATA = Agent.getInstance(new AgentOptions(config)).getData(); - DATA = new ExecutionDataStore(); - // END android-change - } + // BEGIN android-change + // static { + // final Properties config = ConfigLoader.load(CONFIG_RESOURCE, + // System.getProperties()); + // DATA = Agent.getInstance(new AgentOptions(config)).getData(); + // } + // END android-change private Offline() { // no instances @@ -59,7 +61,14 @@ public final class Offline { // return DATA.getExecutionData(Long.valueOf(classid), classname, // probecount).getProbes(); synchronized (DATA) { - return DATA.get(classid, classname, probecount).getProbes(); + ExecutionData entry = DATA.get(classid); + if (entry == null) { + entry = new ExecutionData(classid, classname, probecount); + DATA.put(classid, entry); + } else { + entry.assertCompatibility(classid, classname, probecount); + } + return entry.getProbes(); } // END android-change } @@ -68,14 +77,21 @@ public final class Offline { /** * Creates a default agent, using config loaded from the classpath resource and the system * properties, and a runtime data instance populated with the execution data accumulated by - * the probes. + * the probes up until this call is made (subsequent probe updates will not be reflected in + * this agent). * * @return the new agent */ static Agent createAgent() { final Properties config = ConfigLoader.load(CONFIG_RESOURCE, System.getProperties()); - return Agent.getInstance(new AgentOptions(config), new RuntimeData(DATA)); + synchronized (DATA) { + ExecutionDataStore store = new ExecutionDataStore(); + for (ExecutionData data : DATA.values()) { + store.put(data); + } + return Agent.getInstance(new AgentOptions(config), new RuntimeData(store)); + } } // END android-change } |