Merge pull request #3704 from Tsunamical/arm

[Android] Remove CPUHelper Class
This commit is contained in:
Ryan Houdek 2016-03-04 16:47:37 -05:00
commit 5b040ec67b
1 changed files with 0 additions and 395 deletions

View File

@ -1,395 +0,0 @@
package org.dolphinemu.dolphinemu.utils;
import android.content.Context;
import android.os.Build;
import org.dolphinemu.dolphinemu.R;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
/**
* Utility class for retrieving information
* from a device's CPU.
*/
public final class CPUHelper
{
private int revision;
private int variant;
private int numCores;
private String implementerID = "N/A";
private String part = "N/A";
private String hardware = "N/A";
private String processorInfo = "N/A";
private String features = "N/A";
private final Context ctx;
/**
* Constructor
*
* @param ctx The current {@link Context}.
*/
public CPUHelper(Context ctx)
{
this.ctx = ctx;
try
{
// TODO: Should do other architectures as well (x86 and MIPS).
// Can do differentiating between platforms by using
// android.os.Build.CPU_ABI.
//
// CPU_ABI.contains("armeabi") == get ARM info.
// CPU_ABI.contains("x86") == get x86 info.
// CPU_ABI.contains("mips") == get MIPS info.
//
// However additional testing should be done across devices,
// I highly doubt /proc/cpuinfo retains the same formatting
// on different architectures.
//
// If push comes to shove, we can simply spit out the cpuinfo
// contents. I would like to avoid this if possible, however.
if (Build.CPU_ABI.contains("arm"))
{
getARMInfo();
}
else
{
Log.error("[CPUHelper] CPU architecture not supported yet.");
}
}
catch (IOException ioe)
{
Log.error("[CPUHelper] " + ioe.getMessage());
}
}
/**
* Gets the revision number of the CPU.
*
* @return the revision number of the CPU.
*/
public int getRevision()
{
return revision;
}
/**
* Gets the CPU variant number.
*
* @return the CPU variant number.
*/
public int getVariant()
{
return variant;
}
/**
* Gets the total number of cores in the CPU.
*
* @return the total number of cores in the CPU.
*/
public int getNumCores()
{
return numCores;
}
/**
* Gets the name of the implementer of the CPU.
*
* @return the name of the implementer of the CPU.
*/
public String getImplementer()
{
return implementerID;
}
/**
* Gets the specific processor type of the CPU.
*
* @return the specific processor type.
*/
public String getProcessorType()
{
return part;
}
/**
* Gets the internal name of the hardware.
*
* @return the internal name of the hardware.
*/
public String getHardware()
{
return hardware;
}
/**
* Get the processor info string.
*
* @return the processor info string.
*/
public String getProcessorInfo()
{
return processorInfo;
}
/**
* Gets the features supported by the CPU.
*
* @return the features supported by the CPU.
*/
public String getFeatures()
{
return features;
}
/**
* Whether or not this CPU is using the ARM architecture.
*
* @return true if this CPU uses the ARM architecture; false otherwise.
*/
public static boolean isARM()
{
return Build.CPU_ABI.contains("arm");
}
/**
* Whether or not this CPU is using the ARM64 architecture.
*
* @return true if this CPU uses the ARM64 architecture; false otherwise.
*/
public static boolean isARM64() { return Build.CPU_ABI.contains("arm64"); }
/**
* Whether or not this CPU is using the x86 architecture.
*
* @return true if this CPU uses the x86 architecture; false otherwise.
*/
public static boolean isX86()
{
return Build.CPU_ABI.contains("x86");
}
/**
* Whether or not this CPU is using the MIPS architecture.
*
* @return true if this CPU uses the MIPS architecture; false otherwise.
*/
public static boolean isMIPS()
{
return Build.CPU_ABI.contains("mips");
}
// Retrieves information for ARM CPUs.
private void getARMInfo() throws IOException
{
File info = new File("/proc/cpuinfo");
if (info.exists())
{
BufferedReader br = new BufferedReader(new FileReader(info));
String line;
while ((line = br.readLine()) != null)
{
if (line.contains("Processor\t:"))
{
this.processorInfo = parseLine(line);
}
else if (line.contains("Hardware\t:"))
{
this.hardware = parseLine(line);
}
else if (line.contains("Features\t:"))
{
this.features = parseLine(line);
}
else if (line.contains("CPU implementer\t:"))
{
this.implementerID = parseArmID(Integer.decode(parseLine(line)));
}
else if (line.contains("CPU part\t:"))
{
this.part = parseArmPartNumber(Integer.decode(parseLine(line)));
}
else if (line.contains("CPU revision\t:"))
{
this.revision = Integer.decode(parseLine(line));
}
else if (line.contains("CPU variant\t:"))
{
this.variant = Integer.decode(parseLine(line));
}
else if (line.contains("processor\t:")) // Lower case indicates a specific core number
{
this.numCores++;
}
}
br.close();
}
}
// Basic function for parsing cpuinfo format strings.
// cpuinfo format strings consist of [label:info] parts.
// We only want to retrieve the info portion so we split
// them using ':' as a delimeter.
private String parseLine(String line)
{
String[] temp = line.split(":");
if (temp.length != 2)
return "N/A";
return temp[1].trim();
}
// Parses an ARM CPU ID.
private String parseArmID(int id)
{
switch (id)
{
case 0x41:
return "ARM Limited";
case 0x44:
return "Digital Equipment Corporation";
case 0x4D:
return "Freescale Semiconductor Inc.";
case 0x4E:
return "Nvidia Corporation";
case 0x51:
return "Qualcomm Inc.";
case 0x56:
return "Marvell Semiconductor Inc.";
case 0x69:
return "Intel Corporation";
default:
return "N/A";
}
}
// Parses the ARM CPU Part number.
private String parseArmPartNumber(int partNum)
{
switch (partNum)
{
// Qualcomm part numbers.
case 0x00F:
return "Qualcomm Scorpion";
case 0x02D:
return "Qualcomm Dual Scorpion";
case 0x04D:
return "Qualcomm Dual Krait";
case 0x06F:
return "Qualcomm Quad Krait";
// Marvell Semiconductor part numbers
case 0x131:
return "Marvell Feroceon";
case 0x581:
return "Marvell PJ4/PJ4b";
case 0x584:
return "Marvell Dual PJ4/PJ4b";
// Official ARM part numbers.
case 0x920:
return "ARM920";
case 0x922:
return "ARM922";
case 0x926:
return "ARM926";
case 0x940:
return "ARM940";
case 0x946:
return "ARM946";
case 0x966:
return "ARM966";
case 0x968:
return "ARM968";
case 0xB02:
return "ARM11 MPCore";
case 0xB36:
return "ARM1136";
case 0xB56:
return "ARM1156";
case 0xB76:
return "ARM1176";
case 0xC05:
return "ARM Cortex A5";
case 0xC07:
return "ARM Cortex-A7 MPCore";
case 0xC08:
return "ARM Cortex A8";
case 0xC09:
return "ARM Cortex A9";
case 0xC0C:
return "ARM Cortex A12";
case 0xC0F:
return "ARM Cortex A15";
case 0xC14:
return "ARM Cortex R4";
case 0xC15:
return "ARM Cortex R5";
case 0xC20:
return "ARM Cortex M0";
case 0xC21:
return "ARM Cortex M1";
case 0xC23:
return "ARM Cortex M3";
case 0xC24:
return "ARM Cortex M4";
case 0xC60:
return "ARM Cortex M0+";
case 0xD03:
return "ARM Cortex A53";
case 0xD07:
return "ARM Cortex A57 MPCore";
default: // Unknown/Not yet added to list.
return String.format(ctx.getString(R.string.unknown_part_num), partNum);
}
}
}