// // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. // package com.cloud.utils; public class Profiler { private static final long MILLIS_FACTOR = 1000l; private static final double EXPONENT = 2d; private Long startTickNanoSeconds; private Long stopTickNanoSeconds; public long start() { startTickNanoSeconds = System.nanoTime(); return startTickNanoSeconds; } public long stop() { stopTickNanoSeconds = System.nanoTime(); return stopTickNanoSeconds; } /** * 1 millisecond = 1e+6 nanoseconds * 1 second = 1000 milliseconds = 1e+9 nanoseconds * * @return the duration in nanoseconds. */ public long getDuration() { if (startTickNanoSeconds != null && stopTickNanoSeconds != null) { return stopTickNanoSeconds - startTickNanoSeconds; } return -1; } /** * 1 millisecond = 1e+6 nanoseconds * 1 second = 1000 millisecond = 1e+9 nanoseconds * * @return the duration in milliseconds. */ public long getDurationInMillis() { if (startTickNanoSeconds != null && stopTickNanoSeconds != null) { return (stopTickNanoSeconds - startTickNanoSeconds) / (long)Math.pow(MILLIS_FACTOR, EXPONENT); } return -1; } public boolean isStarted() { return startTickNanoSeconds != null; } public boolean isStopped() { return stopTickNanoSeconds != null; } @Override public String toString() { if (startTickNanoSeconds == null) { return "Not Started"; } if (stopTickNanoSeconds == null) { return "Started but not stopped"; } return "Done. Duration: " + getDurationInMillis() + "ms"; } }