| /******************************************************************************* |
| * Copyright (c) 2012 Obeo. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Obeo - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.emf.compare.tests.performance; |
| |
| import java.lang.management.ManagementFactory; |
| import java.lang.management.MemoryMXBean; |
| import java.lang.management.MemoryUsage; |
| import java.util.concurrent.TimeUnit; |
| |
| import com.google.common.base.Stopwatch; |
| |
| /** |
| * @author <a href="mailto:mikael.barbero@obeo.fr">Mikael Barbero</a> |
| */ |
| public class EMFComparePerfStats { |
| |
| private MemoryMXBean fMemoryBean; |
| |
| private MemoryUsage beforeMatchHeapMemoryUsage; |
| |
| private MemoryUsage afterMatchHeapMemoryUsage; |
| |
| private MemoryUsage beforeDiffHeapMemoryUsage; |
| |
| private MemoryUsage afterDiffHeapMemoryUsage; |
| |
| private final Stopwatch elapsedTimeInMatch; |
| |
| private final Stopwatch elapsedTimeInDiff; |
| |
| EMFComparePerfStats() { |
| fMemoryBean = ManagementFactory.getMemoryMXBean(); |
| elapsedTimeInMatch = Stopwatch.createUnstarted(); |
| elapsedTimeInDiff = Stopwatch.createUnstarted(); |
| } |
| |
| void beforeMatch() { |
| beforeMatchHeapMemoryUsage = fMemoryBean.getHeapMemoryUsage(); |
| elapsedTimeInMatch.start(); |
| } |
| |
| void afterMatch() { |
| elapsedTimeInMatch.stop(); |
| afterMatchHeapMemoryUsage = fMemoryBean.getHeapMemoryUsage(); |
| } |
| |
| void beforeDiff() { |
| beforeDiffHeapMemoryUsage = fMemoryBean.getHeapMemoryUsage(); |
| elapsedTimeInDiff.start(); |
| } |
| |
| void afterDiff() { |
| elapsedTimeInDiff.stop(); |
| afterDiffHeapMemoryUsage = fMemoryBean.getHeapMemoryUsage(); |
| } |
| |
| public long elapsedTimeInMatch(TimeUnit unit) { |
| return elapsedTimeInMatch.elapsed(unit); |
| } |
| |
| public long usedHeapBeforeMatch(SizeUnit unit) { |
| return unit.convert(beforeMatchHeapMemoryUsage.getUsed()); |
| } |
| |
| public long usedHeapAfterMatch(SizeUnit unit) { |
| return unit.convert(afterMatchHeapMemoryUsage.getUsed()); |
| } |
| |
| public long elapsedTimeInDiff(TimeUnit unit) { |
| return elapsedTimeInDiff.elapsed(unit); |
| } |
| |
| public long usedHeapBeforeDiff(SizeUnit unit) { |
| return unit.convert(beforeDiffHeapMemoryUsage.getUsed()); |
| } |
| |
| public long usedHeapAfterDiff(SizeUnit unit) { |
| return unit.convert(afterDiffHeapMemoryUsage.getUsed()); |
| } |
| |
| public EMFComparePerfStats minus(EMFComparePerfStats stats) { |
| return null; |
| } |
| |
| /** |
| * {@inheritDoc} |
| * |
| * @see java.lang.Object#toString() |
| */ |
| @Override |
| public String toString() { |
| StringBuilder sb = new StringBuilder(256); |
| sb.append("Match\n") |
| .append("\tElapsed time: " + elapsedTimeInMatch(TimeUnit.MILLISECONDS) + " msec.\n") |
| .append("\tUsed heap before: " + usedHeapBeforeMatch(SizeUnit.MEBI) + " MiB\n") |
| .append("\tUsed heap after : " + usedHeapAfterMatch(SizeUnit.MEBI) + " MiB\n") |
| .append("Diff\n") |
| .append("\tElapsed time: " + elapsedTimeInDiff(TimeUnit.MILLISECONDS) + " msec.\n") |
| .append("\tUsed heap before: " + usedHeapBeforeDiff(SizeUnit.MEBI) + " MiB\n") |
| .append("\tUsed heap after : " + usedHeapAfterDiff(SizeUnit.MEBI) + " MiB\n"); |
| return sb.toString(); |
| } |
| } |