aboutsummaryrefslogtreecommitdiff
path: root/src/main/scala/firrtl/util
diff options
context:
space:
mode:
authorDavid Biancolin2019-01-21 18:50:51 -0500
committerGitHub2019-01-21 18:50:51 -0500
commit10586d6a141859b843057ec9979011e26ad207f1 (patch)
treeff23c30013159cdd1879b1e5c3dd5baca5bf4867 /src/main/scala/firrtl/util
parent73ae6257fce586ac145b6ab348ce1b47634e7a46 (diff)
parentdf3a34f01d227ff9ad0e63a41ff10001ac01c01d (diff)
Merge branch 'master' into top-wiring-aggregates
Diffstat (limited to 'src/main/scala/firrtl/util')
-rw-r--r--src/main/scala/firrtl/util/ClassUtils.scala19
-rw-r--r--src/main/scala/firrtl/util/TestOptions.scala13
2 files changed, 32 insertions, 0 deletions
diff --git a/src/main/scala/firrtl/util/ClassUtils.scala b/src/main/scala/firrtl/util/ClassUtils.scala
new file mode 100644
index 00000000..1b388035
--- /dev/null
+++ b/src/main/scala/firrtl/util/ClassUtils.scala
@@ -0,0 +1,19 @@
+package firrtl.util
+
+object ClassUtils {
+ /** Determine if a named class is loaded.
+ *
+ * @param name - name of the class: "foo.bar" or "org.foo.bar"
+ * @return true if the class has been loaded (is accessible), false otherwise.
+ */
+ def isClassLoaded(name: String): Boolean = {
+ val found = try {
+ Class.forName(name, false, getClass.getClassLoader) != null
+ } catch {
+ case e: ClassNotFoundException => false
+ case x: Throwable => throw x
+ }
+// println(s"isClassLoaded: %s $name".format(if (found) "found" else "didn't find"))
+ found
+ }
+}
diff --git a/src/main/scala/firrtl/util/TestOptions.scala b/src/main/scala/firrtl/util/TestOptions.scala
new file mode 100644
index 00000000..9ee99f8c
--- /dev/null
+++ b/src/main/scala/firrtl/util/TestOptions.scala
@@ -0,0 +1,13 @@
+package firrtl.util
+
+import ClassUtils.isClassLoaded
+
+object TestOptions {
+ // Our timing is inaccurate if we're running tests under coverage.
+ // If any of the classes known to be associated with evaluating coverage are loaded,
+ // assume we're running tests under coverage.
+ // NOTE: We assume we need only ask the class loader that loaded us.
+ // If it was loaded by another class loader (outside of our hierarchy), it wouldn't be available to us.
+ val coverageClasses = List("scoverage.Platform", "com.intellij.rt.coverage.instrumentation.TouchCounter")
+ val accurateTiming = !coverageClasses.exists(isClassLoaded(_))
+}