All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.gridkit.jvmtool.stacktrace.codec.json.JfrHelper Maven / Gradle / Ivy

There is a newer version: 0.23
Show newest version
package org.gridkit.jvmtool.stacktrace.codec.json;

import java.util.concurrent.TimeUnit;

import org.gridkit.jvmtool.event.GenericEvent;
import org.gridkit.jvmtool.jvmevents.JvmEvents;

class JfrHelper {

	private static final long NS_PER_MS = TimeUnit.MILLISECONDS.toNanos(1);

	public static void setTimestamp(GenericEvent ge, Object val) {
		if (val instanceof Number) {
			ge.timestamp(((Number) val).longValue() / NS_PER_MS);
			return;
		}
		else if (val instanceof String) {
			try {
				long ts = Long.parseLong(val.toString());
				ge.timestamp(ts / NS_PER_MS);
				return;
			} catch (NumberFormatException e) {
				// ignore
			}
		}
		throw new IllegalArgumentException("Cannot cast " + val + " to time stamp");
	}

	public static void setThreadState(GenericEvent event, Object val) {
		event.tags().put(JvmEvents.THREAD_STATE, convertThreadState(String.valueOf(val)));
	}

	public static void setAllocationSize(GenericEvent ge, Object val) {
		Long lval = asLong(val);
		if (lval != null) {
			ge.counters().set("jfr.ObjectAllocationInNewTLAB.allocationSize",lval.longValue());
		}
		else {
			throw new IllegalArgumentException("Cannot cast " + val + " to number");
		}
	}

	public static void setTLABSize(GenericEvent ge, Object val) {
		Long lval = asLong(val);
		if (lval != null) {
			ge.counters().set("jfr.ObjectAllocationInNewTLAB.tlabSize",lval.longValue());
		}
		else {
			throw new IllegalArgumentException("Cannot cast " + val + " to number");
		}
	}

	public static Long asLong(Object value) {
		if (value instanceof Number) {
			return ((Number) value).longValue();
		}
		else if (value instanceof String) {
			try {
				return Long.parseLong((String) value);
			}
			catch(NumberFormatException e) {
				return null;
			}
		}
		return null;
	}

	private static String convertThreadState(String val) {
		if (val.startsWith("STATE_")) {
			return val.substring("STATE_".length());
		}
		else {
			return val;
		}
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy