You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by an...@apache.org on 2015/06/17 19:18:58 UTC
svn commit: r1686080 - in /lucene/dev/branches/branch_5x: ./ solr/
solr/CHANGES.txt solr/core/
solr/core/src/java/org/apache/solr/util/RTimer.java
solr/core/src/test/org/apache/solr/util/TestRTimer.java
Author: andyetitmoves
Date: Wed Jun 17 17:18:57 2015
New Revision: 1686080
URL: http://svn.apache.org/r1686080
Log:
SOLR-7678: Switch RTimer to use nanoTime
Added:
lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/util/TestRTimer.java
- copied unchanged from r1685485, lucene/dev/trunk/solr/core/src/test/org/apache/solr/util/TestRTimer.java
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/solr/ (props changed)
lucene/dev/branches/branch_5x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/solr/core/ (props changed)
lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/RTimer.java
Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1686080&r1=1686079&r2=1686080&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Wed Jun 17 17:18:57 2015
@@ -139,6 +139,9 @@ Other Changes
* SOLR-7619: Fix SegmentsInfoRequestHandlerTest when more than one segment is created.
(Ramkumar Aiyengar, Steve Rowe)
+* SOLR-7678: Switch RTimer to use nanoTime (improves accuracy of QTime, and other times
+ returned by Solr handlers) (Ramkumar Aiyengar)
+
* SOLR-7680: Use POST instead of GET when finding versions for mismatches with
CloudInspectUtil for tests (Ramkumar Aiyengar)
Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/RTimer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/RTimer.java?rev=1686080&r1=1686079&r2=1686080&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/RTimer.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/util/RTimer.java Wed Jun 17 17:18:57 2015
@@ -17,13 +17,12 @@ package org.apache.solr.util;
* limitations under the License.
*/
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
-import java.lang.System;
-import java.lang.Thread;
-import java.util.*;
-
/** A recursive timer.
*
* RTimers are started automatically when instantiated; subtimers are also
@@ -39,31 +38,49 @@ public class RTimer {
public static final int PAUSED = 2;
protected int state;
- protected double startTime;
+ protected TimerImpl timerImpl;
protected double time;
protected double culmTime;
protected SimpleOrderedMap<RTimer> children;
+ protected interface TimerImpl {
+ void start();
+ double elapsed();
+ }
+
+ private class NanoTimeTimerImpl implements TimerImpl {
+ private long start;
+ public void start() {
+ start = System.nanoTime();
+ }
+ public double elapsed() {
+ return TimeUnit.MILLISECONDS.convert(System.nanoTime() - start, TimeUnit.NANOSECONDS);
+ }
+ }
+
+ protected TimerImpl newTimerImpl() {
+ return new NanoTimeTimerImpl();
+ }
+
+ protected RTimer newTimer() {
+ return new RTimer();
+ }
+
public RTimer() {
time = 0;
culmTime = 0;
children = new SimpleOrderedMap<>();
- startTime = now();
+ timerImpl = newTimerImpl();
+ timerImpl.start();
state = STARTED;
}
- /** Get current time
- *
- * May override to implement a different timer (CPU time, etc).
- */
- protected double now() { return System.currentTimeMillis(); }
-
/** Recursively stop timer and sub timers */
public double stop() {
assert state == STARTED || state == PAUSED;
time = culmTime;
if(state == STARTED)
- time += now() - startTime;
+ time += timerImpl.elapsed();
state = STOPPED;
for( Map.Entry<String,RTimer> entry : children ) {
@@ -76,7 +93,7 @@ public class RTimer {
public void pause() {
assert state == STARTED;
- culmTime += now() - startTime;
+ culmTime += timerImpl.elapsed();
state = PAUSED;
}
@@ -85,7 +102,7 @@ public class RTimer {
return;
assert state == PAUSED;
state = STARTED;
- startTime = now();
+ timerImpl.start();
}
/** Get total elapsed time for this timer. */
@@ -94,7 +111,7 @@ public class RTimer {
else if (state == PAUSED) return culmTime;
else {
assert state == STARTED;
- return culmTime + (now() - startTime);
+ return culmTime + timerImpl.elapsed();
}
}
@@ -105,7 +122,7 @@ public class RTimer {
public RTimer sub(String desc) {
RTimer child = children.get( desc );
if( child == null ) {
- child = new RTimer();
+ child = newTimer();
children.add(desc, child);
}
return child;
@@ -134,25 +151,4 @@ public class RTimer {
{
return children;
}
-
- /*************** Testing *******/
- public static void main(String []argv) throws InterruptedException {
- RTimer rt = new RTimer(), subt, st;
- Thread.sleep(100);
-
- subt = rt.sub("sub1");
- Thread.sleep(50);
- st = subt.sub("sub1.1");
- st.resume();
- Thread.sleep(10);
- st.pause();
- Thread.sleep(50);
- st.resume();
- Thread.sleep(10);
- st.pause();
- subt.stop();
- rt.stop();
-
- System.out.println( rt.toString());
- }
}