зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1798617 - GeckoAppShell.isTablet returns correct value. r=geckoview-reviewers,owlish
Since `GeckoLoader.getLoadDiagnostics` is never called, `HardwareUtils` isn't initialized. It means that `GeckoAppShell.isTablet` always return false. So `HardwareUtils` should be initialized. Also, a lot of codes in `HardwareUtils` and `GeckoLoader.getLoadDiagnostics` are unused, so let's clean up. Differential Revision: https://phabricator.services.mozilla.com/D161006
This commit is contained in:
Родитель
df8c460a6b
Коммит
a83c653bc8
|
@ -1213,7 +1213,7 @@ public class GeckoAppShell {
|
|||
@WrapForJNI(calledFrom = "gecko")
|
||||
@RobocopTarget
|
||||
public static boolean isTablet() {
|
||||
return HardwareUtils.isTablet();
|
||||
return HardwareUtils.isTablet(getApplicationContext());
|
||||
}
|
||||
|
||||
@WrapForJNI(calledFrom = "gecko")
|
||||
|
|
|
@ -21,7 +21,6 @@ import java.util.zip.ZipFile;
|
|||
import org.mozilla.gecko.GeckoAppShell;
|
||||
import org.mozilla.gecko.annotation.JNITarget;
|
||||
import org.mozilla.gecko.annotation.RobocopTarget;
|
||||
import org.mozilla.gecko.util.HardwareUtils;
|
||||
|
||||
public final class GeckoLoader {
|
||||
private static final String LOGTAG = "GeckoLoader";
|
||||
|
@ -350,55 +349,6 @@ public final class GeckoLoader {
|
|||
}
|
||||
}
|
||||
|
||||
private static String getLoadDiagnostics(final Context context, final String lib) {
|
||||
final String androidPackageName = context.getPackageName();
|
||||
|
||||
final StringBuilder message = new StringBuilder("LOAD ");
|
||||
message.append(lib);
|
||||
|
||||
final String packageDataDir = context.getApplicationInfo().dataDir;
|
||||
|
||||
// These might differ. If so, we know why the library won't load!
|
||||
HardwareUtils.init(context);
|
||||
message.append(": ABI: " + HardwareUtils.getLibrariesABI() + ", " + getCPUABI());
|
||||
message.append(": Data: " + packageDataDir);
|
||||
|
||||
try {
|
||||
final boolean appLibExists =
|
||||
new File("/data/app-lib/" + androidPackageName + "/lib" + lib + ".so").exists();
|
||||
final boolean dataDataExists = new File(packageDataDir + "/lib/lib" + lib + ".so").exists();
|
||||
message.append(", ax=" + appLibExists);
|
||||
message.append(", ddx=" + dataDataExists);
|
||||
} catch (final Throwable e) {
|
||||
message.append(": ax/ddx fail, ");
|
||||
}
|
||||
|
||||
try {
|
||||
final String dashOne = packageDataDir + "-1";
|
||||
final String dashTwo = packageDataDir + "-2";
|
||||
final boolean dashOneExists = new File(dashOne).exists();
|
||||
final boolean dashTwoExists = new File(dashTwo).exists();
|
||||
message.append(", -1x=" + dashOneExists);
|
||||
message.append(", -2x=" + dashTwoExists);
|
||||
} catch (final Throwable e) {
|
||||
message.append(", dash fail, ");
|
||||
}
|
||||
|
||||
try {
|
||||
final String nativeLibPath = context.getApplicationInfo().nativeLibraryDir;
|
||||
final boolean nativeLibDirExists = new File(nativeLibPath).exists();
|
||||
final boolean nativeLibLibExists = new File(nativeLibPath + "/lib" + lib + ".so").exists();
|
||||
|
||||
message.append(", nativeLib: " + nativeLibPath);
|
||||
message.append(", dirx=" + nativeLibDirExists);
|
||||
message.append(", libx=" + nativeLibLibExists);
|
||||
} catch (final Throwable e) {
|
||||
message.append(", nativeLib fail.");
|
||||
}
|
||||
|
||||
return message.toString();
|
||||
}
|
||||
|
||||
private static boolean attemptLoad(final String path) {
|
||||
try {
|
||||
System.load(path);
|
||||
|
|
|
@ -7,11 +7,6 @@ package org.mozilla.gecko.util;
|
|||
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.util.Log;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
|
||||
public final class HardwareUtils {
|
||||
private static final String LOGTAG = "GeckoHardwareUtils";
|
||||
|
@ -22,12 +17,9 @@ public final class HardwareUtils {
|
|||
private static volatile boolean sIsLargeTablet;
|
||||
private static volatile boolean sIsSmallTablet;
|
||||
|
||||
private static volatile File sLibDir;
|
||||
private static volatile int sMachineType = -1;
|
||||
|
||||
private HardwareUtils() {}
|
||||
|
||||
public static void init(final Context context) {
|
||||
public static synchronized void init(final Context context) {
|
||||
if (sInited) {
|
||||
return;
|
||||
}
|
||||
|
@ -42,73 +34,13 @@ public final class HardwareUtils {
|
|||
sIsSmallTablet = true;
|
||||
}
|
||||
|
||||
sLibDir = new File(context.getApplicationInfo().nativeLibraryDir);
|
||||
sInited = true;
|
||||
}
|
||||
|
||||
public static boolean isTablet() {
|
||||
public static boolean isTablet(final Context context) {
|
||||
if (!sInited) {
|
||||
init(context);
|
||||
}
|
||||
return sIsLargeTablet || sIsSmallTablet;
|
||||
}
|
||||
|
||||
private static final int ELF_MACHINE_UNKNOWN = 0;
|
||||
private static final int ELF_MACHINE_X86 = 0x03;
|
||||
private static final int ELF_MACHINE_X86_64 = 0x3e;
|
||||
private static final int ELF_MACHINE_ARM = 0x28;
|
||||
private static final int ELF_MACHINE_AARCH64 = 0xb7;
|
||||
|
||||
private static int readElfMachineType(final File file) {
|
||||
try (final FileInputStream is = new FileInputStream(file)) {
|
||||
final byte[] buf = new byte[19];
|
||||
int count = 0;
|
||||
while (count != buf.length) {
|
||||
count += is.read(buf, count, buf.length - count);
|
||||
}
|
||||
|
||||
int machineType = buf[18];
|
||||
if (machineType < 0) {
|
||||
machineType += 256;
|
||||
}
|
||||
|
||||
return machineType;
|
||||
} catch (final FileNotFoundException e) {
|
||||
Log.w(LOGTAG, String.format("Failed to open %s", file.getAbsolutePath()));
|
||||
return ELF_MACHINE_UNKNOWN;
|
||||
} catch (final IOException e) {
|
||||
Log.w(LOGTAG, "Failed to read library", e);
|
||||
return ELF_MACHINE_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
private static String machineTypeToString(final int machineType) {
|
||||
switch (machineType) {
|
||||
case ELF_MACHINE_X86:
|
||||
return "x86";
|
||||
case ELF_MACHINE_X86_64:
|
||||
return "x86_64";
|
||||
case ELF_MACHINE_ARM:
|
||||
return "arm";
|
||||
case ELF_MACHINE_AARCH64:
|
||||
return "aarch64";
|
||||
case ELF_MACHINE_UNKNOWN:
|
||||
default:
|
||||
return String.format("unknown (0x%x)", machineType);
|
||||
}
|
||||
}
|
||||
|
||||
private static void initMachineType() {
|
||||
if (sMachineType >= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
sMachineType = readElfMachineType(new File(sLibDir, System.mapLibraryName("mozglue")));
|
||||
}
|
||||
|
||||
/**
|
||||
* @return The ABI of the libraries installed for this app.
|
||||
*/
|
||||
public static String getLibrariesABI() {
|
||||
initMachineType();
|
||||
|
||||
return machineTypeToString(sMachineType);
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче