1
package org.opencv.engine;
4
import java.util.Arrays;
5
import java.util.HashMap;
8
import java.util.Scanner;
9
import java.util.regex.Pattern;
10
import java.util.regex.Matcher;
11
import android.os.Build;
12
import android.text.TextUtils;
13
import android.util.Log;
15
public class HardwareDetector {
16
private static String TAG = "OpenCVEngine/HardwareDetector";
18
public static final int ARCH_UNKNOWN = -1;
20
public static final int ARCH_X86 = 0x01000000;
21
public static final int ARCH_X86_64 = 0x02000000;
22
public static final int ARCH_ARM = 0x04000000;
23
public static final int ARCH_ARMv7 = 0x10000000;
24
public static final int ARCH_ARMv8 = 0x20000000;
25
public static final int ARCH_MIPS = 0x40000000;
26
public static final int ARCH_MIPS_64 = 0x80000000;
28
// Return CPU flags list
29
public static List<String> getFlags() {
30
Map<String, String> raw = getRawCpuInfo();
31
String f = raw.get("flags");
33
f = raw.get("Features");
35
return Arrays.asList();
36
return Arrays.asList(TextUtils.split(f, " "));
40
public static int getAbi() {
41
List<String> abis = Arrays.asList(Build.CPU_ABI, Build.CPU_ABI2);
42
Log.i(TAG, "ABIs: " + abis.toString());
43
if (abis.contains("x86_64")) {
45
} else if (abis.contains("x86")) {
47
} else if (abis.contains("arm64-v8a")) {
49
} else if (abis.contains("armeabi-v7a")
50
|| abis.contains("armeabi-v7a-hard")) {
52
} else if (abis.contains("armeabi")) {
54
} else if (abis.contains("mips64")) {
56
} else if (abis.contains("mips")) {
62
// Return hardware platform name
63
public static String getHardware() {
64
Map<String, String> raw = getRawCpuInfo();
65
return raw.get("Hardware");
68
// Return processor count
69
public static int getProcessorCount() {
72
Pattern pattern = Pattern.compile("(\\d)+(-(\\d+))?");
73
Scanner s = new Scanner(
74
new File("/sys/devices/system/cpu/possible"));
75
if (s.hasNextLine()) {
76
String line = s.nextLine();
77
Log.d(TAG, "Got CPUs: " + line);
78
Matcher m = pattern.matcher(line);
80
int start = Integer.parseInt(m.group(1));
82
if (m.group(3) != null) {
83
finish = Integer.parseInt(m.group(3));
85
result += finish - start + 1;
86
Log.d(TAG, "Got CPU range " + start + " ~ " + finish);
89
} catch (Exception e) {
90
Log.e(TAG, "Failed to read cpu count");
97
// Return parsed cpuinfo contents
98
public static Map<String, String> getRawCpuInfo() {
99
Map<String, String> map = new HashMap<String, String>();
101
Scanner s = new Scanner(new File("/proc/cpuinfo"));
102
while (s.hasNextLine()) {
103
String line = s.nextLine();
104
String[] vals = line.split(": ");
105
if (vals.length > 1) {
106
map.put(vals[0].trim(), vals[1].trim());
108
Log.d(TAG, "Failed to parse cpuinfo: " + line);
111
} catch (Exception e) {
112
Log.e(TAG, "Failed to read cpuinfo");