| /********************************************************************** |
| * This file is part of "Object Teams Development Tooling"-Software |
| * |
| * Copyright 2004, 2006 Fraunhofer Gesellschaft, Munich, Germany, |
| * for its Fraunhofer Institute for Computer Architecture and Software |
| * Technology (FIRST), Berlin, Germany and Technical University Berlin, |
| * Germany. |
| * |
| * 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 |
| * $Id: Util.java 23461 2010-02-04 22:10:39Z stephan $ |
| * |
| * Please visit http://www.eclipse.org/objectteams for updates and contact. |
| * |
| * Contributors: |
| * Fraunhofer FIRST - Initial API and implementation |
| * Technical University Berlin - Initial API and implementation |
| **********************************************************************/ |
| package org.eclipse.objectteams.internal.osgi.weaving; |
| |
| import static org.eclipse.core.runtime.IStatus.*; |
| |
| public class Util |
| { |
| |
| // configure OT/Equinox debugging: |
| public static int WARN_LEVEL = INFO; |
| public static boolean PROFILE= false; |
| static { |
| String level = System.getProperty("otequinox.debug"); //$NON-NLS-1$ |
| if (level != null) { |
| level = level.toUpperCase(); |
| if (level.equals("OK")) //$NON-NLS-1$ |
| WARN_LEVEL = OK; |
| else if (level.equals("INFO")) //$NON-NLS-1$ |
| WARN_LEVEL = INFO; |
| else if (level.startsWith("WARN")) //$NON-NLS-1$ |
| WARN_LEVEL = WARNING; |
| else if (level.startsWith("ERR")) //$NON-NLS-1$ |
| WARN_LEVEL = ERROR; |
| else |
| WARN_LEVEL = OK; |
| } |
| String profile = System.getProperty("otequinox.profile"); //$NON-NLS-1$ |
| PROFILE= profile != null && !"false".equals(profile); //$NON-NLS-1$ |
| } |
| |
| /** Profiling data: */ |
| enum ProfileKind { Transformation, NoTransformation, Activation, Scan, SuperClassFetching, RedefineClasses } |
| private static long[] profileTimes= new long[ProfileKind.values().length]; |
| private static long systemStartTime= System.nanoTime(); |
| |
| @SuppressWarnings("nls") |
| public static void profile(long startTime, ProfileKind kind, String msg) |
| { |
| long now= System.nanoTime(); |
| long delta= (now-startTime);// / getActiveCount(); |
| long total= (profileTimes[kind.ordinal()]+= delta); |
| if (kind != ProfileKind.Scan) |
| msg = msg.substring(msg.lastIndexOf('.')+1); |
| // doLog(INFO, "Profile "+kind.name()+": "+m(delta)+"("+m(total)+"/"+m(now-systemStartTime)+") ["+msg+"]"); |
| System.out.println("OT/Equinox Profile "+kind.name()+": "+m(delta)+"("+m(total)+"/"+m(now-systemStartTime)+") ["+msg+"]");; |
| } |
| |
| // nano-to milli conversion |
| private static double m(long l) { |
| return (l/1000000.0); |
| } |
| |
| private static int getActiveCount() { |
| ThreadGroup group= Thread.currentThread().getThreadGroup(); |
| ThreadGroup parent= group.getParent(); |
| while (parent != null) { |
| group= parent; |
| parent= group.getParent(); |
| } |
| return group.activeCount(); |
| } |
| } |