You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/09/28 18:24:42 UTC
svn commit: r1176947 - in /incubator/jena/Experimental/JenaPerf/trunk: ./
.settings/ classes/ src/ src/main/ src/main/scala/ src/main/scala/org/
src/main/scala/org/apache/ src/main/scala/org/apache/jena/
src/main/scala/org/apache/jena/perf/ src/test/ s...
Author: andy
Date: Wed Sep 28 16:24:41 2011
New Revision: 1176947
URL: http://svn.apache.org/viewvc?rev=1176947&view=rev
Log:
Jena Performance Framework (experimental)
Added:
incubator/jena/Experimental/JenaPerf/trunk/.classpath (with props)
incubator/jena/Experimental/JenaPerf/trunk/.project (with props)
incubator/jena/Experimental/JenaPerf/trunk/.settings/
incubator/jena/Experimental/JenaPerf/trunk/.settings/org.eclipse.jdt.core.prefs (with props)
incubator/jena/Experimental/JenaPerf/trunk/D.ttl (with props)
incubator/jena/Experimental/JenaPerf/trunk/classes/
incubator/jena/Experimental/JenaPerf/trunk/pom.xml (with props)
incubator/jena/Experimental/JenaPerf/trunk/src/
incubator/jena/Experimental/JenaPerf/trunk/src/main/
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Enum.scala
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Main.scala
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala
incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala
incubator/jena/Experimental/JenaPerf/trunk/src/test/
incubator/jena/Experimental/JenaPerf/trunk/src/test/scala/
Modified:
incubator/jena/Experimental/JenaPerf/trunk/ (props changed)
Propchange: incubator/jena/Experimental/JenaPerf/trunk/
------------------------------------------------------------------------------
--- svn:ignore (added)
+++ svn:ignore Wed Sep 28 16:24:41 2011
@@ -0,0 +1,3 @@
+target
+
+DB
Added: incubator/jena/Experimental/JenaPerf/trunk/.classpath
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/.classpath?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/.classpath (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/.classpath Wed Sep 28 16:24:41 2011
@@ -0,0 +1,34 @@
+<classpath>
+ <!--
+ <classpathentry kind="src" path="src/main/java"/>
+ <classpathentry kind="src" path="src/test/java"/>
+ -->
+ <classpathentry kind="src" path="src/main/scala"/>
+ <classpathentry kind="src" path="src/test/scala"/>
+
+ <classpathentry kind="con" path="org.scala-ide.sdt.launching.SCALA_CONTAINER"/>
+ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+
+ <classpathentry kind="output" path="classes"/>
+
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/arq/2.8.9-SNAPSHOT/arq-2.8.9-SNAPSHOT.jar" sourcepath="M2_REPO/com/hp/hpl/jena/arq/2.8.9-SNAPSHOT/arq-2.8.9-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/jena/2.6.4/jena-2.6.4.jar" sourcepath="M2_REPO/com/hp/hpl/jena/jena/2.6.4/jena-2.6.4-sources.jar"/>
+
+ <classpathentry kind="var" path="M2_REPO/commons-codec/commons-codec/1.4/commons-codec-1.4.jar" sourcepath="M2_REPO/commons-codec/commons-codec/1.4/commons-codec-1.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpclient/4.1.2/httpclient-4.1.2.jar" sourcepath="M2_REPO/org/apache/httpcomponents/httpclient/4.1.2/httpclient-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/apache/httpcomponents/httpcore/4.1.2/httpcore-4.1.2.jar" sourcepath="M2_REPO/org/apache/httpcomponents/httpcore/4.1.2/httpcore-4.1.2-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/ibm/icu/icu4j/3.4.4/icu4j-3.4.4.jar" sourcepath="M2_REPO/com/ibm/icu/icu4j/3.4.4/icu4j-3.4.4-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/iri/0.8/iri-0.8.jar" sourcepath="M2_REPO/com/hp/hpl/jena/iri/0.8/iri-0.8-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.1/jcl-over-slf4j-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/jcl-over-slf4j/1.6.1/jcl-over-slf4j-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/junit/junit/4.9/junit-4.9.jar" sourcepath="M2_REPO/junit/junit/4.9/junit-4.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16.jar" sourcepath="M2_REPO/log4j/log4j/1.2.16/log4j-1.2.16-sources.jar"/>
+
+ <classpathentry kind="var" path="M2_REPO/org/scala-lang/scala-library/2.9.1/scala-library-2.9.1.jar" sourcepath="M2_REPO/org/scala-lang/scala-library/2.9.1/scala-library-2.9.1-sources.jar"/>
+
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/slf4j-api/1.6.1/slf4j-api-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1.jar" sourcepath="M2_REPO/org/slf4j/slf4j-log4j12/1.6.1/slf4j-log4j12-1.6.1-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/stax/stax-api/1.0.1/stax-api-1.0.1.jar"/>
+ <classpathentry kind="var" path="M2_REPO/com/hp/hpl/jena/tdb/0.8.11-SNAPSHOT/tdb-0.8.11-SNAPSHOT.jar" sourcepath="M2_REPO/com/hp/hpl/jena/tdb/0.8.11-SNAPSHOT/tdb-0.8.11-SNAPSHOT-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/org/codehaus/woodstox/wstx-asl/3.2.9/wstx-asl-3.2.9.jar" sourcepath="M2_REPO/org/codehaus/woodstox/wstx-asl/3.2.9/wstx-asl-3.2.9-sources.jar"/>
+ <classpathentry kind="var" path="M2_REPO/xerces/xercesImpl/2.7.1/xercesImpl-2.7.1.jar"/>
+</classpath>
\ No newline at end of file
Propchange: incubator/jena/Experimental/JenaPerf/trunk/.classpath
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/jena/Experimental/JenaPerf/trunk/.project
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/.project?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/.project (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/.project Wed Sep 28 16:24:41 2011
@@ -0,0 +1,20 @@
+<projectDescription>
+ <name>jena-perf</name>
+ <projects/>
+ <buildSpec>
+ <buildCommand>
+ <name>org.scala-ide.sdt.core.scalabuilder</name>
+ <arguments>
+ </arguments>
+ </buildCommand>
+ <!--
+ <buildCommand>
+ <name>org.eclipse.jdt.core.javabuilder</name>
+ </buildCommand>
+ -->
+ </buildSpec>
+ <natures>
+ <nature>org.scala-ide.sdt.core.scalanature</nature>
+ <nature>org.eclipse.jdt.core.javanature</nature>
+ </natures>
+</projectDescription>
\ No newline at end of file
Propchange: incubator/jena/Experimental/JenaPerf/trunk/.project
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/jena/Experimental/JenaPerf/trunk/.settings/org.eclipse.jdt.core.prefs
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/.settings/org.eclipse.jdt.core.prefs?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/.settings/org.eclipse.jdt.core.prefs (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/.settings/org.eclipse.jdt.core.prefs Wed Sep 28 16:24:41 2011
@@ -0,0 +1,16 @@
+#Tue Sep 27 17:34:26 BST 2011
+encoding//src/main/java=UTF-8
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+encoding//src/main/resources=UTF-8
+encoding//src/test/resources=UTF-8
+encoding//src/test/java=UTF-8
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
Propchange: incubator/jena/Experimental/JenaPerf/trunk/.settings/org.eclipse.jdt.core.prefs
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/jena/Experimental/JenaPerf/trunk/D.ttl
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/D.ttl?rev=1176947&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/jena/Experimental/JenaPerf/trunk/D.ttl
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
Added: incubator/jena/Experimental/JenaPerf/trunk/pom.xml
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/pom.xml?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/pom.xml (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/pom.xml Wed Sep 28 16:24:41 2011
@@ -0,0 +1,221 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.jena</groupId>
+ <artifactId>jena-perf</artifactId>
+ <packaging>jar</packaging>
+ <name>Jena Benchmark Framework</name>
+ <version>0.0.0-SNAPSHOT</version>
+
+ <parent>
+ <groupId>org.apache.jena</groupId>
+ <artifactId>jena-top</artifactId>
+ <version>0-SNAPSHOT</version>
+ <relativePath>../JenaTop/pom.xml</relativePath>
+ </parent>
+
+ <description/>
+
+ <organization>
+ <name>Apache Jena</name>
+ <url>http://incubator.apache.org/jena</url>
+ </organization>
+
+ <licenses>
+ <license>
+ <name>Apache 2.0 License</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0</url>
+ </license>
+ </licenses>
+
+ <properties>
+ <this.root>${project.artifactId}-${project.version}</this.root>
+
+ <ver.jena>2.6.4</ver.jena>
+ <ver.arq>2.8.9-SNAPSHOT</ver.arq>
+ <ver.tdb>0.8.11-SNAPSHOT</ver.tdb>
+ <ver.httpclient>4.1.1</ver.httpclient>
+ <!-- <ver.httpfileupload>1.2.2</ver.httpfileupload> -->
+ <ver.junit>4.9</ver.junit>
+ <ver.commonscodec>1.5</ver.commonscodec>
+ <ver.slf4j>1.6.1</ver.slf4j>
+ <ver.log4j>1.2.16</ver.log4j>
+ <ver.scala>[2.9.0,]</ver.scala>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.scala-lang</groupId>
+ <artifactId>scala-library</artifactId>
+ <version>${ver.scala}</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>arq</artifactId>
+ <version>${ver.arq}</version>
+ </dependency>
+
+
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>jena</artifactId>
+ <classifier>tests</classifier>
+ <version>${ver.jena}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>tdb</artifactId>
+ <version>${ver.tdb}</version>
+ </dependency>
+
+ <!--
+ <dependency>
+ <groupId>com.hp.hpl.jena</groupId>
+ <artifactId>sdb</artifactId>
+ <version>${ver.sdb}</version>
+ <optional>true</optional>
+ </dependency>
+ -->
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>${ver.junit}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ <version>${ver.slf4j}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <version>${ver.slf4j}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>jcl-over-slf4j</artifactId>
+ <version>${ver.slf4j}</version>
+ <optional>true</optional>
+ </dependency>
+
+ <!-- Needed if controlling logging in testing -->
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>${ver.log4j}</version>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.jms</groupId>
+ <artifactId>jms</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.jdmk</groupId>
+ <artifactId>jmxtools</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>com.sun.jmx</groupId>
+ <artifactId>jmxri</artifactId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ </dependencies>
+
+ <build>
+
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.scala-tools</groupId>
+ <artifactId>maven-scala-plugin</artifactId>
+
+ <configuration>
+ <jvmArgs>
+ <jvmArg>-Xmx1024m</jvmArg>
+ </jvmArgs>
+ <args>
+ <arg>-unchecked</arg>
+ <arg>-deprecation</arg>
+ </args>
+ </configuration>
+
+ <executions>
+ <execution>
+ <id>scala-compile-first</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>add-source</goal>
+ <goal>compile</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>scala-test-compile</id>
+ <phase>process-test-resources</phase>
+ <goals>
+ <goal>testCompile</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <includes>
+ <include>**/TS_*.java</include>
+ </includes>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <configuration>
+ <overWriteReleases>false</overWriteReleases>
+ <overWriteIfNewer>true</overWriteIfNewer>
+ </configuration>
+ </plugin>
+
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-resources-plugin</artifactId>
+ <configuration>
+ <encoding>UTF-8</encoding>
+ </configuration>
+ </plugin>
+
+ </plugins>
+
+ </build>
+
+
+ <pluginRepositories>
+ <pluginRepository>
+ <id>scala-tools.org</id>
+ <name>Scala-tools Maven2 Repository</name>
+ <url>http://scala-tools.org/repo-releases</url>
+ </pluginRepository>
+ </pluginRepositories>
+
+</project>
Propchange: incubator/jena/Experimental/JenaPerf/trunk/pom.xml
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Enum.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Enum.scala?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Enum.scala (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Enum.scala Wed Sep 28 16:24:41 2011
@@ -0,0 +1,12 @@
+package org.apache.jena.perf
+
+// Machinary
+// Can iterate over the Enum names
+
+trait Enum[A] {
+ trait Value { self: A =>
+ _values :+= this
+ }
+ private var _values = List.empty[A]
+ def values = _values
+}
Added: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Main.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Main.scala?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Main.scala (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/Main.scala Wed Sep 28 16:24:41 2011
@@ -0,0 +1,20 @@
+package org.apache.jena.perf
+
+object Main {
+ def main(args: Array[String]): Unit = {
+ // Read actions
+ // Perform actions
+ val x = List("A","AB","XYZ")
+
+ def func(a:String) = { List(a,a.length).iterator }
+
+ val y = flatMap2(x.iterator, func)
+
+ y.foreach( z => println(z) )
+ }
+
+ def flatMap2[A,B](iter:Iterator[A], func: A => Iterator[B]) : Iterator[B] =
+ iter.map(func(_)).flatten
+
+}
+
Added: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfMain.scala Wed Sep 28 16:24:41 2011
@@ -0,0 +1,81 @@
+package org.apache.jena.perf
+import java.util.Date
+import com.hp.hpl.jena.query._
+import com.hp.hpl.jena.tdb.TDBFactory
+import com.hp.hpl.jena.util.FileManager
+
+object PerfMain {
+ def main(args: Array[String]): Unit = {
+ println("Jena SPARQL Performance test bed")
+
+ val query1 = QueryFactory.create("SELECT * { ?s1 ?p1 ?o1 }")
+ val query2 = QueryFactory.create("SELECT * { ?s2 ?p2 ?o2 }")
+ val action1 = new ActionByScheme("Q1", "file:D.ttl", query1)
+ val action2 = new ActionByScheme("Q2", "tdb:DB", query2)
+ val collector = new Collector()
+
+ val actions: List[Action] = List ( action1, action2 )
+
+ actions.foreach( a => collector.acc(a, a.perform ()) )
+
+ println("Acc = "+collector.results.length)
+ for ( (action,result) <- collector.results )
+ {
+ println("**"+action.name)
+ println(result.outcome)
+ println(result.elapsed)
+ }
+ println("Done")
+ }
+}
+
+class ActionByScheme(val name: String, uri:String, query:Query) extends ActionQuery {
+ def perform():Result = {
+ def action(): Action =
+ {
+ if ( uri.startsWith("tdb:") ) return new ActionQueryTDB(name, uri.substring(4), query)
+ if ( uri.startsWith("file:") ) return new ActionQueryFile(name, uri.substring(5), query)
+ new ActionNone("No scheme")
+ }
+ return action().perform()
+ }
+}
+
+trait ActionQuery extends Action {
+ def exec(ds:Dataset, query:Query) : Result = {
+ import com.hp.hpl.jena.sparql.util.QueryExecUtils
+ val start = System.currentTimeMillis() ;
+ val startDate = new Date()
+ val qexec = QueryExecutionFactory.create(query, ds)
+ // later
+ //QueryExecUtils.executeQuery(query, qexec)
+
+ val count = ResultSetFormatter.consume(qexec.execSelect())
+
+ val finish = System.currentTimeMillis() ;
+ val finishDate = new Date()
+ new Result(Success, finish-start)
+ }
+}
+
+class ActionQueryTDB(n:String, location:String, query:Query) extends ActionQuery {
+ val name = n+"["+location+"]"
+ def perform():Result = {
+ val ds = TDBFactory.createDataset(location)
+ return exec(ds, query)
+ }
+}
+
+class ActionQueryFile(val name:String, filename:String, query:Query) extends ActionQuery {
+ def perform():Result = {
+ val ds = DatasetFactory.create()
+ FileManager.get().readModel(ds.getDefaultModel(), filename)
+ return exec(ds, query)
+ }
+}
+
+class ActionNone(val name: String) extends Action {
+ def perform():Result = { return ResultNone ; }
+}
+
+
Added: incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala
URL: http://svn.apache.org/viewvc/incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala?rev=1176947&view=auto
==============================================================================
--- incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala (added)
+++ incubator/jena/Experimental/JenaPerf/trunk/src/main/scala/org/apache/jena/perf/PerfUnit.scala Wed Sep 28 16:24:41 2011
@@ -0,0 +1,50 @@
+package org.apache.jena.perf
+import java.util.Date
+import scala.collection.mutable.ListBuffer
+import scala.collection.mutable.ArrayBuffer
+
+/** A single step in the performance suite */
+case class PerfUnit(name:String, action:Action, result:Option[Result] = None)
+
+trait Action {
+ def name:String
+ // This is blocking - pass in a handler to call after .
+ // Signature
+ def perform(): Result
+}
+
+// Simple - but no iteration.
+sealed abstract class Outcome(val name:String)
+case object Success extends Outcome("success")
+case object Failure extends Outcome("failure")
+case object NoOutcome extends Outcome("nothing")
+
+//sealed trait Outcome extends Outcome.Value
+//object Outcome extends Enum[Outcome]
+//case object Success extends Outcome
+//case object Failure extends Outcome
+//case object NoOutcome extends Outcome
+
+
+/** Details, details */
+case class Result(outcome:Outcome, elapsed:Long = -1, startDT:Option[Date] = None, finishDT:Option[Date] = None)
+object ResultNone extends Result(NoOutcome)
+
+class Collector {
+ type OneStep = (Action, Result)
+ private val lock:AnyRef = new AnyRef
+ private val resultsAcc:ArrayBuffer[(Action, Result)] = ArrayBuffer.empty
+ // Cache.
+ private var view:Option[Array[(Action, Result)]] = None
+
+ def results:Array[(Action, Result)] = {
+ lock.synchronized {
+ if ( view.isEmpty ) view = Some(resultsAcc.toArray)
+ view.get
+ }
+ }
+
+ def acc(step: OneStep /*action: Action, outcome:Result*/):Unit = {
+ lock.synchronized { resultsAcc += step ; view = None ; }
+ }
+}