summaryrefslogtreecommitdiffstats
path: root/sched
diff options
context:
space:
mode:
authorJean-Philippe Lesot <jplesot@google.com>2014-04-07 18:55:26 +0200
committerJean-Philippe Lesot <jplesot@google.com>2014-04-07 18:55:26 +0200
commitb8c695636f772bb69efe52a323569fc33e26b3a4 (patch)
treef6c955408d23be50b6f3219067d1354d692ca172 /sched
parenta3f53b951f34f2b45ab9e3940f46e9dc0b97800d (diff)
downloadtoolchain_jack-b8c695636f772bb69efe52a323569fc33e26b3a4.zip
toolchain_jack-b8c695636f772bb69efe52a323569fc33e26b3a4.tar.gz
toolchain_jack-b8c695636f772bb69efe52a323569fc33e26b3a4.tar.bz2
Fix a concurency problem when no tracer is enabled.
- Replace newDummyInstance() by a getDummyInstance in StatisticId - Remove HashMap from DummyTracer to keep dummy instances This HashMap has to be synchronized, but we want to have a very light implementation of DummyTracer. So, we prefer to keep multiple instances of dummy statistics than having a ConcurrentHashMap. Change-Id: I4e8ec3aaf42ac6843626e4d2432db1212b03a0ed
Diffstat (limited to 'sched')
-rw-r--r--sched/src/com/android/sched/util/log/DummyTracer.java16
-rw-r--r--sched/src/com/android/sched/util/log/stats/StatisticId.java11
2 files changed, 9 insertions, 18 deletions
diff --git a/sched/src/com/android/sched/util/log/DummyTracer.java b/sched/src/com/android/sched/util/log/DummyTracer.java
index 4d27c70..5851a6d 100644
--- a/sched/src/com/android/sched/util/log/DummyTracer.java
+++ b/sched/src/com/android/sched/util/log/DummyTracer.java
@@ -25,9 +25,7 @@ import com.android.sched.util.log.tracer.watcher.ObjectWatcher;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
@@ -44,10 +42,6 @@ public final class DummyTracer implements Tracer {
* Represents event.
*/
public static class DummyTracerEvent implements Event {
- @Nonnull
- private final Map<StatisticId<? extends Statistic>, Statistic> statisticsById =
- new HashMap<StatisticId<? extends Statistic>, Statistic>();
-
DummyTracerEvent() {
}
@@ -98,15 +92,7 @@ public final class DummyTracer implements Tracer {
@Override
@Nonnull
public <T extends Statistic> T getStatistic(@Nonnull StatisticId<T> id) {
- @SuppressWarnings("unchecked")
- T statistic = (T) statisticsById.get(id);
-
- if (statistic == null) {
- statistic = id.newDummyInstance();
- statisticsById.put(id, statistic);
- }
-
- return statistic;
+ return id.getDummyInstance();
}
}
diff --git a/sched/src/com/android/sched/util/log/stats/StatisticId.java b/sched/src/com/android/sched/util/log/stats/StatisticId.java
index 597a5a3..30444c5 100644
--- a/sched/src/com/android/sched/util/log/stats/StatisticId.java
+++ b/sched/src/com/android/sched/util/log/stats/StatisticId.java
@@ -38,6 +38,9 @@ public class StatisticId<T extends Statistic> {
new ConcurrentHashMap<Class<? extends Statistic>, Class<? extends Statistic>>();
@Nonnull
+ private final T dummyInstance;
+
+ @Nonnull
private final String name;
@Nonnull
@@ -57,10 +60,12 @@ public class StatisticId<T extends Statistic> {
regularFactory = new ReflectFactory<T>(regularClass, false, StatisticId.class);
dummyFactory = new ReflectFactory<T>(dummyClass, false, StatisticId.class);
+ dummyInstance = dummyFactory.create(this);
+
// Followings are deprecated, to be removed
if (!dummies.containsKey(dummyClass)) {
- dummies.put(dummyClass, newDummyInstance());
+ dummies.put(dummyClass, dummyInstance);
regulars.put(dummyClass, regularClass);
}
}
@@ -81,8 +86,8 @@ public class StatisticId<T extends Statistic> {
}
@Nonnull
- public T newDummyInstance() {
- return dummyFactory.create(this);
+ public T getDummyInstance() {
+ return dummyInstance;
}
@Nonnull