/* * Copyright (c) 2017 Chris Newland. * Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD * Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki */ package org.adoptopenjdk.jitwatch.compilation.codecache; import org.adoptopenjdk.jitwatch.compilation.AbstractCompilationWalker; import org.adoptopenjdk.jitwatch.model.CodeCacheEvent; import org.adoptopenjdk.jitwatch.model.CodeCacheEvent.CodeCacheEventType; import org.adoptopenjdk.jitwatch.model.Compilation; import org.adoptopenjdk.jitwatch.model.IMetaMember; import org.adoptopenjdk.jitwatch.model.IReadOnlyJITDataModel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CodeCacheEventWalker extends AbstractCompilationWalker { private CodeCacheWalkerResult result = new CodeCacheWalkerResult(); private static final Logger logger = LoggerFactory.getLogger(CodeCacheEventWalker.class); public CodeCacheEventWalker(IReadOnlyJITDataModel model) { super(model); } @Override public void reset() { result.reset(); } @Override public void visit(IMetaMember metaMember) { if (metaMember != null && metaMember.isCompiled()) { for (Compilation compilation : metaMember.getCompilations()) { if (compilation.isFailedTask()) { continue; } String address = compilation.getNativeAddress(); // hex string if (address != null) { long addressLong = 0; long stamp = compilation.getCompiledStamp(); try { if (address.startsWith("0x")) { addressLong = Long.decode(address); } else { addressLong = Long.parseLong(address, 16); } } catch (NumberFormatException exception) { logger.error("Couldn't decode address {} on compilation {}", address, compilation); continue; // don't allow a zero address } // intrinsic has no size info int nativeCodeSize = compilation.getNativeSize(); CodeCacheEvent event = new CodeCacheEvent(CodeCacheEventType.COMPILATION, stamp, nativeCodeSize, 0); event.setNativeAddress(addressLong); event.setCompilation(compilation); result.addEvent(event); } } } } public CodeCacheWalkerResult getResult() { return result; } }