diff options
author | Jean-Philippe Lesot <jplesot@google.com> | 2014-04-07 18:55:26 +0200 |
---|---|---|
committer | Jean-Philippe Lesot <jplesot@google.com> | 2014-04-07 18:55:26 +0200 |
commit | b8c695636f772bb69efe52a323569fc33e26b3a4 (patch) | |
tree | f6c955408d23be50b6f3219067d1354d692ca172 /sched | |
parent | a3f53b951f34f2b45ab9e3940f46e9dc0b97800d (diff) | |
download | toolchain_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.java | 16 | ||||
-rw-r--r-- | sched/src/com/android/sched/util/log/stats/StatisticId.java | 11 |
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 |