Update documentation with new runtime.
diff --git a/org.jacoco.doc/diagrams/implementation-1.dot b/org.jacoco.doc/diagrams/implementation-1.dot
new file mode 100644
index 0000000..f0a6add
--- /dev/null
+++ b/org.jacoco.doc/diagrams/implementation-1.dot
@@ -0,0 +1,39 @@
+digraph G {
+
+ node [shape="rect", penwidth="0.33", style="rounded", margin="0.1,0", height="0.3", fontsize="10", fontname="Arial"];
+ edge [arrowsize="0.75"];
+ {
+ coverage [label="Code Coverage", style="", fontname="Arial Bold"]
+
+ rt [label="Runtime Profiling"]
+ instrumentation [label="Instrumentation", style="rounded,filled", fillcolor="#ffff80"]
+ coverage -> rt;
+ coverage -> instrumentation;
+
+ jvmpi [label="JVMPI"]
+ jvmti [label="JVMTI"]
+ rt -> jvmpi;
+ rt -> jvmti;
+
+ source [label="Source"]
+ bytecode [label="Bytecode", style="rounded,filled", fillcolor="#ffff80"]
+ instrumentation -> source;
+ instrumentation -> bytecode;
+
+ offline [label="Offline"]
+ onthefly [label="On-The-Fly", style="rounded,filled", fillcolor="#ffff80"]
+ bytecode -> offline;
+ bytecode -> onthefly;
+
+ replace [label="Replace"]
+ inject [label="Inject"]
+ offline -> replace;
+ offline -> inject;
+
+ classloader [label="Class Loader"]
+ agent [label="Java Agent", style="rounded,filled", fillcolor="#ffff80"]
+ onthefly -> classloader;
+ onthefly -> agent;
+ }
+
+}
\ No newline at end of file
diff --git a/org.jacoco.doc/diagrams/render.sh b/org.jacoco.doc/diagrams/render.sh
index 6805cd1..8292b7b 100644
--- a/org.jacoco.doc/diagrams/render.sh
+++ b/org.jacoco.doc/diagrams/render.sh
@@ -10,3 +10,5 @@
dot -Tpng -o$OUTPUT/flow-4b.png flow-4b.dot
dot -Tpng -o$OUTPUT/flow-5a.png flow-5a.dot
dot -Tpng -o$OUTPUT/flow-5b.png flow-5b.dot
+
+dot -Tpng -o$OUTPUT/implementation-1.png implementation-1.dot
diff --git a/org.jacoco.doc/docroot/doc/.resources/implementation-1.png b/org.jacoco.doc/docroot/doc/.resources/implementation-1.png
new file mode 100644
index 0000000..5fe2ba4
--- /dev/null
+++ b/org.jacoco.doc/docroot/doc/.resources/implementation-1.png
Binary files differ
diff --git a/org.jacoco.doc/docroot/doc/implementation.html b/org.jacoco.doc/docroot/doc/implementation.html
index b8040f3..693c0f9 100644
--- a/org.jacoco.doc/docroot/doc/implementation.html
+++ b/org.jacoco.doc/docroot/doc/implementation.html
@@ -47,36 +47,8 @@
diagram gives an overview with the techniques used by JaCoCo highlighted:
</p>
-<ul>
- <li>Runtime Profiling
- <ul>
- <li>Java Virtual Machine Profiler Interface (JVMPI), until Java 1.4</li>
- <li>Java Virtual Machine Tool Interface (JVMTI), since Java 1.5</li>
- </ul>
- </li>
- <li><span class="high">Instrumentation*</span>
- <ul>
- <li>Java Source Instrumentation</li>
- <li><span class="high">Byte Code Instrumentation*</span>
- <ul>
- <li>Offline
- <ul>
- <li>Replace Original Classes In-Place</li>
- <li>Inject Instrumented Classes into the Class Path</li>
- </ul>
- </li>
- <li><span class="high">On-The-Fly*</span>
- <ul>
- <li>Special Classloader Implementions or Framework Specific Hooks</li>
- <li><span class="high">Java Agent*</span></li>
- </ul>
- </li>
- </ul>
- </li>
- </ul>
- </li>
-</ul>
-
+<img src=".resources/implementation-1.png" alt="Coverage Implementation Techniques"/>
+
<p>
Byte code instrumentation is very fast, can be implemented in pure Java and
works with every Java VM. On-the-fly instrumentation with the Java agent
@@ -228,6 +200,12 @@
runtime registers a custom <code>Handler</code> to receive the parameter
array. This approach might break environments that install their own log
managers (e.g. Glassfish).</li>
+ <li><b><code>URLStreamHandlerRuntime</code></b>: This runtime registers a
+ <code>URLStreamHandler</code> for a "jacoco-xxxxx" protocol. Instrumented
+ classes open a connection on this protocol. The returned connection object
+ is the one that provides access to the coverage runtime through its
+ <code>equals()</code> method. However to register the protocol the runtime
+ needs to access internal members of the <code>java.net.URL</code> class.</li>
<li><b><code>ModifiedSystemClassRuntime</code></b>: This approach adds a
public static field to an existing JRE class through instrumentation. Unlike
the other methods above this is only possible for environments where a Java