/*
* Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package com.sun.tools.visualvm.sampler.cpu;
import org.netbeans.lib.profiler.results.cpu.FlatProfileContainer;
import org.netbeans.lib.profiler.results.cpu.MethodInfoMapper;
import org.netbeans.lib.profiler.utils.formatting.MethodNameFormatter;
import org.netbeans.lib.profiler.utils.formatting.MethodNameFormatterFactory;
/**
*
* @author Tomas Hurka
*/
final class FlatProfilerContainer extends FlatProfileContainer {
//~ Instance fields ----------------------------------------------------------------------------------------------------------
protected double wholeGraphNetTime0;
protected double wholeGraphNetTime1;
private MethodInfoMapper methodInfoMapper;
//~ Constructors -------------------------------------------------------------------------------------------------------------
/**
* The data passed to this constructor may contain some zero-invocation rows. That's because the size of passed arrays
* is equal to the number of currently instrumented methods, but in general not all of the methods may be invoked even
* once at an arbitrary moment.
*
* @param timeInMcs0 Array of Absolute timer values for each method - always used
* @param timeInMcs1 Array of CPU timer values for each method - optional, may be null
* @param totalTimeInMcs0 Array of Absolute timer (total time) values for each method - always used
* @param totalTimeInMcs1 Array of CPU timer (total time) values for each method - optional, may be null
* @param nInvocations Array of number of invocations for each method
* @param wholeGraphNetTime0 Total absolute time
* @param wholeGraphNetTime1 Total CPU time - not used if CPU timer is not used
* @param nMethods Total number of profiled methods - length of the provided arrays
*/
FlatProfilerContainer(MethodInfoMapper mapper,boolean twoStamps,long[] timeInMcs0, long[] timeInMcs1,
long[] totalTimeInMcs0, long[] totalTimeInMcs1,int[] nInvocations,
char[] marks, double wholeGraphNetTime0, double wholeGraphNetTime1, int nMethods) {
super(timeInMcs0, timeInMcs1, totalTimeInMcs0, totalTimeInMcs1, nInvocations, marks, nMethods);
this.wholeGraphNetTime0 = wholeGraphNetTime0;
this.wholeGraphNetTime1 = wholeGraphNetTime1;
collectingTwoTimeStamps = twoStamps;
methodInfoMapper = mapper;
// Now get rid of zero-invocation entries once and forever. Also set nTotalInvocations and set negative times
// (that may be possible due to time cleansing inaccuracies) to zero.
removeZeroInvocationEntries();
}
//~ Methods ------------------------------------------------------------------------------------------------------------------
public String getMethodNameAtRow(int row) {
int methodId = methodIds[row];
MethodNameFormatter formatter = MethodNameFormatterFactory.getDefault().getFormatter(null);
String className = methodInfoMapper.getInstrMethodClass(methodId);
String methodName = methodInfoMapper.getInstrMethodName(methodId);
String signature = methodInfoMapper.getInstrMethodSignature(methodId);
return formatter.formatMethodName(className, methodName, signature).toFormatted();
}
public double getWholeGraphNetTime0() {
return wholeGraphNetTime0;
}
public double getWholeGraphNetTime1() {
return wholeGraphNetTime1;
}
}