Mantis - Quercus
|
|||||
Viewing Issue Advanced Details | |||||
|
|||||
ID: | Category: | Severity: | Reproducibility: | Date Submitted: | Last Update: |
1119 | minor | always | 05-17-06 12:02 | 05-19-06 13:19 | |
|
|||||
Reporter: | koreth | Platform: | |||
Assigned To: | ferg | OS: | |||
Priority: | normal | OS Version: | |||
Status: | closed | Product Version: | 3.0.20 | ||
Product Build: | Resolution: | fixed | |||
Projection: | none | ||||
ETA: | none | Fixed in Version: | 3.0.20 | ||
|
|||||
Summary: | 0001119: microtime() is only millisecond-accurate, is formatted incorrectly (w/patch) | ||||
Description: |
We use microtime() to do some internal profiling of database queries and communication with backend servers. It appears that Quercus' microtime() is broken in two ways: it is not microsecond-accurate (since it's based on System.currentTimeMillis()) and its string output is in the wrong format (should be ".012345 6789" instead of "12345 67890".) Here's a patch. I did the initial divide by 1000 because I found it hard to visually count all the zeros in the subsequent division and modulo operations. --- resin-3.0.s060516/modules/quercus/src/com/caucho/quercus/lib/DateModule.java2006-05-10 19:50:42.000000000 -0700 +++ old/060516/resin-3.0.s060516/modules/quercus/src/com/caucho/quercus/lib/DateModule.java 2006-05-16 18:12:45.000000000 -0700 @@ -603,13 +603,13 @@ */ public static Value microtime(@Optional boolean getAsFloat) { - long now = Alarm.getCurrentTime(); + long now = Alarm.getExactTimeNanoseconds() / 1000; if (getAsFloat) { - return new DoubleValue((double) now / 1000.0); + return new DoubleValue((double) now / 1000000.0); } else { - return new StringValueImpl((now % 1000 * 1000) + " " + (now / 1000)); + return new StringValueImpl((now % 1000000) / 1000000.0 + " " + (now / 1000000)); } } |
||||
Steps To Reproduce: | |||||
Additional Information: | |||||
Relationships | |||||
Attached Files: |
Notes | |||||
|
|||||
|
|