package org.hwbot.bench.service; import org.apache.commons.lang.StringUtils; import org.hwbot.bench.prime.AbstractHardwareService; import org.hwbot.bench.prime.FileSystemUtil; import org.hwbot.bench.prime.Log; import org.hwbot.cpuid.CpuId; public abstract class HardwareServiceCpuID extends AbstractHardwareService { public HardwareServiceCpuID() { if (!libraryLoaded) { prepareCpuid(); } } public String getProcessorInfo() { String processor = null; try { if (libraryLoaded) { processor = CpuId.model(); } } catch (Exception e) { processor = null; } return StringUtils.trim(processor); } public Float getEstimatedProcessorSpeed() { if (libraryLoaded) { return CpuId.sampleFrequency(); } return null; } protected void prepareCpuid() { String libraryName = getLibraryName(); if (libraryName == null) { Log.error("No native cpu speed library for " + AbstractHardwareService.OS + " yet... falling back to OS tools."); } else { String libraryNameWithVersion = libraryName + "-" + version; java.io.File cpuid = new java.io.File(System.getProperty("java.io.tmpdir") + java.io.File.separator + libraryNameWithVersion + getLibraryExtension()); if (!cpuid.exists()) { // Log.info("Installing " + libraryNameWithVersion + " in " + cpuid); FileSystemUtil.extractFile(libraryName + getLibraryExtension(), cpuid); } else { // Log.info("Using existing " + cpuid.getAbsolutePath()); FileSystemUtil.extractFile(libraryName + getLibraryExtension(), cpuid); } // load String libraryDirectory = cpuid.getParent(); // System.setProperty("java.library.path", libraryDirectory); FileSystemUtil.addDirToJavaLibraryPath(libraryDirectory); String libraryShortName = (libraryNameWithVersion.startsWith("lib")) ? StringUtils.substringAfter(libraryNameWithVersion, "lib") : libraryNameWithVersion; try { System.loadLibrary(libraryShortName); CpuId.model(); // CpuId.sampleFrequency(); libraryLoaded = true; } catch (UnsatisfiedLinkError e) { Log.error("Failed to load native library " + libraryShortName + " on OS " + AbstractHardwareService.OS + ": " + e.getMessage()); } } } }