blob: dc873d26b0030f6d3639640b5ac67963c34c1c86 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2003, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.test.internal.performance;
import java.util.Map;
/**
* The PerformanceMonitor for Windows.
*/
class PerformanceMonitorWindows extends PerformanceMonitor {
private boolean fgNativeGetPerformanceInfoNotAvailable;
@Override
protected void collectOperatingSystemCounters(Map scalars) {
synchronized (this) {
if (org.eclipse.perfmsr.core.PerformanceMonitor.isLoaded()) {
long[] counters = new long[14];
if (org.eclipse.perfmsr.core.PerformanceMonitor.nativeGetPerformanceCounters(counters)) {
addScalar(scalars, InternalDimensions.WORKING_SET, counters[0]);
addScalar(scalars, InternalDimensions.WORKING_SET_PEAK, counters[1]);
addScalar(scalars, InternalDimensions.ELAPSED_PROCESS, counters[2]);
// addScalar(scalars, InternalDimensions.USER_TIME, counters[3]);
addScalar(scalars, InternalDimensions.KERNEL_TIME, counters[4]);
addScalar(scalars, InternalDimensions.CPU_TIME, counters[3] + counters[4]);
addScalar(scalars, InternalDimensions.PAGE_FAULTS, counters[5]);
if (counters[6] != -1)
addScalar(scalars, InternalDimensions.COMITTED, counters[6]);
addScalar(scalars, InternalDimensions.GDI_OBJECTS, counters[7]);
// addScalar(scalars, Dimensions.USER_OBJECTS, counters[8]);
// if (counters[9] != -1)
// addScalar(scalars, InternalDimensions.OPEN_HANDLES, counters[9]);
// addScalar(scalars, InternalDimensions.READ_COUNT, counters[10]);
// addScalar(scalars, InternalDimensions.WRITE_COUNT, counters[11]);
// addScalar(scalars, InternalDimensions.BYTES_READ, counters[12]);
// addScalar(scalars, InternalDimensions.BYTES_WRITTEN, counters[13]);
}
}
super.collectOperatingSystemCounters(scalars);
}
}
/**
* Collect global performance info. This includes things like the total committed memory for the entire system.
*
* This function depends on the GetPerformanceInfo() function being available in the Windows ivjperf.dll. This is available in
* XP but is usually not available in Win2000. If it is not available then this function throws an
* UnsupportedOperationException.
*
* @param scalars
*/
@Override
protected void collectGlobalPerformanceInfo(Map scalars) {
synchronized (this) {
if (!fgNativeGetPerformanceInfoNotAvailable && org.eclipse.perfmsr.core.PerformanceMonitor.isLoaded()) {
long[] counters = new long[13];
try {
org.eclipse.perfmsr.core.PerformanceMonitor.nativeGetPerformanceInfo(counters);
long pageSize = counters[9];
addScalar(scalars, InternalDimensions.COMMIT_TOTAL, counters[0] * pageSize);
addScalar(scalars, InternalDimensions.COMMIT_LIMIT, counters[1] * pageSize);
addScalar(scalars, InternalDimensions.COMMIT_PEAK, counters[2] * pageSize);
addScalar(scalars, InternalDimensions.PHYSICAL_TOTAL, counters[3] * pageSize);
addScalar(scalars, InternalDimensions.PHYSICAL_AVAIL, counters[4] * pageSize);
addScalar(scalars, InternalDimensions.SYSTEM_CACHE, counters[5] * pageSize);
addScalar(scalars, InternalDimensions.KERNEL_TOTAL, counters[6] * pageSize);
addScalar(scalars, InternalDimensions.KERNEL_PAGED, counters[7] * pageSize);
addScalar(scalars, InternalDimensions.KERNEL_NONPAGED, counters[8] * pageSize);
addScalar(scalars, InternalDimensions.PAGE_SIZE, counters[9]);
addScalar(scalars, InternalDimensions.HANDLE_COUNT, counters[10]);
addScalar(scalars, InternalDimensions.PROCESS_COUNT, counters[11]);
addScalar(scalars, InternalDimensions.THREAD_COUNT, counters[12]);
}
catch (Exception e) {
PerformanceTestPlugin
.logWarning("native function GetPerformanceInfo() not available on this version of Windows"); //$NON-NLS-1$
fgNativeGetPerformanceInfoNotAvailable = true;
}
}
super.collectGlobalPerformanceInfo(scalars);
}
}
}