blob: f46ab084044287941aa252c2ef9246a47212ca1a [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2012, 2014 Tilera 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:
* William R. Swanson (Tilera Corporation) - initial API and implementation
* Marc Dumais (Ericsson) - Add CPU/core load information to the multicore visualizer (Bug 396268)
* Marc Dumais (Ericsson) - Bug 405390
*******************************************************************************/
package org.eclipse.cdt.dsf.gdb.multicorevisualizer.internal.ui.model;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Hashtable;
import java.util.List;
//----------------------------------------------------------------------------
// VisualizerCPU
//----------------------------------------------------------------------------
/** Represents single CPU. */
public class VisualizerCPU implements Comparable<VisualizerCPU>, IVisualizerModelObject {
// --- members ---
/** ID of this core. */
public int m_id;
/** Load object associated to this cpu */
protected VisualizerLoadInfo m_loadinfo;
/** List of cores */
protected ArrayList<VisualizerCore> m_cores;
/** Lookup table for cores. */
protected Hashtable<Integer, VisualizerCore> m_coreMap;
// --- constructors/destructors ---
/** Constructor */
public VisualizerCPU(int id) {
m_id = id;
m_cores = new ArrayList<>();
m_coreMap = new Hashtable<>();
}
/** Dispose method */
public void dispose() {
if (m_cores != null) {
for (VisualizerCore core : m_cores) {
core.dispose();
}
m_coreMap.clear();
m_coreMap = null;
m_cores.clear();
m_cores = null;
m_loadinfo = null;
}
}
// --- Object methods ---
/** Returns string representation. */
@Override
public String toString() {
return "CPU:" + m_id; //$NON-NLS-1$
}
// --- accessors ---
/** Gets ID of this CPU. */
@Override
public int getID() {
return m_id;
}
/** CPU has no parent - always returns null */
@Override
public IVisualizerModelObject getParent() {
return null;
}
/** Sets the load object associated to this CPU */
public synchronized void setLoadInfo(VisualizerLoadInfo info) {
m_loadinfo = info;
}
/** Gets the load value associated to this CPU */
public synchronized Integer getLoad() {
return (m_loadinfo == null) ? null : m_loadinfo.getLoad();
}
/** get the highest recorded load value for this CPU*/
public synchronized Integer getHighLoadWatermark() {
return (m_loadinfo == null) ? null : m_loadinfo.getHighLoadWaterMark();
}
// --- methods ---
/** Gets number of cores. */
public int getCoreCount() {
return m_cores.size();
}
/** Gets cores. */
public List<VisualizerCore> getCores() {
return m_cores;
}
/** Gets core with specified ID. */
public VisualizerCore getCore(int id) {
return m_coreMap.get(id);
}
/** Adds core. */
public VisualizerCore addCore(VisualizerCore core) {
m_cores.add(core);
m_coreMap.put(core.getID(), core);
return core;
}
/** Removes core. */
public void removeCore(VisualizerCore core) {
m_cores.remove(core);
m_coreMap.remove(core.getID());
}
/** Sorts cores, cpus, etc. by IDs. */
public void sort() {
Collections.sort(m_cores);
}
// --- Comparable implementation ---
/** Compares this item to the specified item. */
@Override
public int compareTo(VisualizerCPU o) {
int result = 0;
if (o != null) {
if (m_id < o.m_id) {
result = -1;
} else if (m_id > o.m_id) {
result = 1;
}
}
return result;
}
/** IVisualizerModelObject version of compareTO() */
@Override
public int compareTo(IVisualizerModelObject o) {
if (o != null) {
if (o.getClass() == this.getClass()) {
return compareTo((VisualizerCPU) o);
}
}
return 1;
}
}