Java tutorial
/* * Copyright 2012-present Facebook, Inc. * * Licensed 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.facebook.buck.debug; import com.google.common.base.Preconditions; import com.google.common.base.Strings; /** * Single event for a trace. */ class TraceEvent { private final long id; private final String comment; private final String type; private final long eventTime; private final long startTime; TraceEvent(long id, String comment, String type, long startTime) { this.id = id; this.comment = comment; this.type = type; this.eventTime = System.currentTimeMillis(); this.startTime = startTime; } public long getId() { return id; } public String getComment() { return comment; } public String getType() { return type; } public long getEventTime() { return eventTime; } /** * Returns a formatted string for the event. * * @param traceStartTime the start time of the trace to generate relative times * @param prevTime the completion time of the previous event or -1 * @param indent extra indent for the message if there was no previous event. * @return the formatted tracer string */ String toTraceString(long traceStartTime, long prevTime, String indent) { // TODO(user): move to ThreadTrace to split formatting from representation StringBuilder sb = new StringBuilder(); if (prevTime == -1) { sb.append("-----"); } else { sb.append(longToPaddedString(this.eventTime - prevTime)); } sb.append(" "); sb.append(formatTime(this.eventTime - traceStartTime)); if (this instanceof TraceStart) { sb.append(" Start "); } else if (this instanceof TraceStop) { sb.append(" Done "); long delta = eventTime - startTime; sb.append(longToPaddedString(delta)); sb.append(" ms "); } else { sb.append(" Comment "); } sb.append(indent); sb.append(this.toString()); return sb.toString(); } /** * @return A string describing the tracer event. */ @Override public String toString() { if (this.type == null) { return comment; } else { return String.format("[%s] %s", type, comment); } } /** * Converts {@code value} to a string and pads it with up to 4 spaces for improved alignment. * @param value A nonnegative value. * @return A padded string. */ static String longToPaddedString(long value) { Preconditions.checkArgument(value >= 0, "value must be positive"); return Strings.padStart(String.valueOf(value), 5, '0'); } /** * Return the sec.ms part of time (if time = "20:06:11.566", "11.566") * * @param time The time in milliseconds. * @return A formatted string as "sec.ms". */ static String formatTime(long time) { String sec = String.valueOf(Math.max(0, (time / 1000) % 60)); String ms = String.valueOf(Math.max(time % 1000, 0)); return Strings.padStart(sec, 2, '0') + '.' + Strings.padStart(ms, 3, '0'); } }