modules/core/util/src/main/java/org/rhq/core/util/StopWatch.java | 42 +++--- modules/core/util/src/test/java/org/rhq/core/util/StopWatchTest.java | 66 ++++++++++ 2 files changed, 92 insertions(+), 16 deletions(-)
New commits: commit d928dea3f5484c315f7125a6ee1100cb0ab66f69 Author: John Mazzitelli mazz@redhat.com Date: Fri Feb 1 19:11:17 2013 -0500
clean up the StopWatch toString
diff --git a/modules/core/util/src/main/java/org/rhq/core/util/StopWatch.java b/modules/core/util/src/main/java/org/rhq/core/util/StopWatch.java index c220d99..7f2e38f 100644 --- a/modules/core/util/src/main/java/org/rhq/core/util/StopWatch.java +++ b/modules/core/util/src/main/java/org/rhq/core/util/StopWatch.java @@ -73,36 +73,47 @@ public class StopWatch { }
public String toString() { - long elap = this.getElapsed(); - - String fraction = (elap % 1000) + ""; - int pad = 3 - fraction.length(); - - StringBuffer buf = new StringBuffer().append(elap / 1000).append('.'); - - //for example, 15 millseconds formatted as ".015" rather than ".15" - while (pad-- > 0) { - buf.append("0"); - } - - buf.append(fraction); + final long elap = this.getElapsed(); + final StringBuffer buf = new StringBuffer(formatMillis(elap));
if (markerMap.size() > 0) { - buf.append("{StopWatch Markers:\n"); + buf.append(" {StopWatch Markers:\n");
+ long totalMarked = 0; TreeSet<String> keys = new TreeSet<String>(markerMap.keySet()); for (String key : keys) { TimeSlice ts = markerMap.get(key); + totalMarked += (ts.end - ts.begin); ts.writeBuf(buf); buf.append('\n'); }
+ long unmarked = elap - totalMarked; + if (unmarked > 99) { // only show if the value is substantial + buf.append(" [unmarked=").append(formatMillis(unmarked)).append("]\n"); + } + buf.append("}"); }
return buf.toString(); }
+ private String formatMillis(long millis) { + final String fraction = String.valueOf(millis % 1000L); + int pad = 3 - fraction.length(); + + final StringBuffer buf = new StringBuffer().append(millis / 1000L).append('.'); + + // for example, 15 millseconds formatted as ".015" rather than ".15" + while (pad-- > 0) { + buf.append("0"); + } + + buf.append(fraction).append(" secs"); + return buf.toString(); + } + class TimeSlice { String marker; long begin; @@ -123,8 +134,7 @@ public class StopWatch {
public void writeBuf(StringBuffer buf) { long elap = end - begin; - buf.append(" [").append(marker).append("=").append(elap / 1000).append('.').append(elap % 1000) - .append("] "); + buf.append(" [").append(marker).append("=").append(formatMillis(elap)).append("] "); } } } \ No newline at end of file diff --git a/modules/core/util/src/test/java/org/rhq/core/util/StopWatchTest.java b/modules/core/util/src/test/java/org/rhq/core/util/StopWatchTest.java new file mode 100644 index 0000000..2982cc0 --- /dev/null +++ b/modules/core/util/src/test/java/org/rhq/core/util/StopWatchTest.java @@ -0,0 +1,66 @@ + /* + * RHQ Management Platform + * Copyright (C) 2005-2013 Red Hat, Inc. + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 2, as + * published by the Free Software Foundation, and/or the GNU Lesser + * General Public License, version 2.1, also as published by the Free + * Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License and the GNU Lesser General Public License + * for more details. + * + * You should have received a copy of the GNU General Public License + * and the GNU Lesser General Public License along with this program; + * if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +package org.rhq.core.util; + +import org.testng.annotations.Test; + +@Test +public class StopWatchTest { + public void testQuick() { + StopWatch sw = new StopWatch(); + try { + Thread.sleep(1100); + } catch (InterruptedException e) { + } + assert sw.getElapsed() > 1000L; + assert sw.reset() > 1000L : "reset should have returned the elapse time"; + assert sw.getElapsed() < 300L : "timer should have been reset"; + } + + public void testMarkers() { + StopWatch sw = new StopWatch(); + + // B time + sw.markTimeBegin("B"); + try { + Thread.sleep(400); + } catch (InterruptedException e) { + } + sw.markTimeEnd("B"); + + // unmarked + try { + Thread.sleep(500); + } catch (InterruptedException e) { + } + + // A time + sw.markTimeBegin("A"); + try { + Thread.sleep(600); + } catch (InterruptedException e) { + } + sw.markTimeEnd("A"); + System.out.println(sw.toString()); + } +} \ No newline at end of file
rhq-commits@lists.fedorahosted.org