Blame qtwebengine-opensource-src-5.9.0-openmax-dl-neon.patch

Kevin Kofler c87d486
diff -ur qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn
Kevin Kofler c87d486
--- qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn	2017-05-18 16:51:44.000000000 +0200
Kevin Kofler c87d486
+++ qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/BUILD.gn	2017-06-10 02:41:10.317340598 +0200
Kevin Kofler c87d486
@@ -196,9 +196,6 @@
Kevin Kofler c87d486
     ]
Kevin Kofler c87d486
     if (arm_optionally_use_neon) {
Kevin Kofler c87d486
       # Run-time NEON detection.
Kevin Kofler c87d486
-      deps = [ "//third_party/android_tools:cpu_features" ]
Kevin Kofler c87d486
-      # To get the __android_log_print routine
Kevin Kofler c87d486
-      libs = [ "log" ]
Kevin Kofler c87d486
       # Detection routine
Kevin Kofler c87d486
       sources += [ "sp/src/arm/detect.c" ]
Kevin Kofler c87d486
     }
Kevin Kofler c87d486
diff -ur qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c
Kevin Kofler c87d486
--- qtwebengine-opensource-src-5.9.0/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c	2017-05-18 16:51:44.000000000 +0200
Kevin Kofler c87d486
+++ qtwebengine-opensource-src-5.9.0-openmax-dl-neon/src/3rdparty/chromium/third_party/openmax_dl/dl/sp/src/arm/detect.c	2017-06-10 02:38:30.593809570 +0200
Kevin Kofler db8ac78
@@ -9,13 +9,57 @@
Kevin Kofler db8ac78
  *
Kevin Kofler db8ac78
  */
Kevin Kofler db8ac78
 
Kevin Kofler db8ac78
-#include <cpu-features.h>
Kevin Kofler db8ac78
-
Kevin Kofler db8ac78
-#include "android/log.h"
Kevin Kofler db8ac78
 #include "dl/sp/api/omxSP.h"
Kevin Kofler db8ac78
 
Kevin Kofler db8ac78
+// For ArmCpuCaps()
Kevin Kofler db8ac78
+#include <stdio.h>
Kevin Kofler db8ac78
+#include <string.h>
Kevin Kofler db8ac78
+
Kevin Kofler db8ac78
+// based on libvpx arm_cpudetect.c
Kevin Kofler db8ac78
+static int ArmCpuCaps(const char* cpuinfo_name) {
Kevin Kofler db8ac78
+  char cpuinfo_line[512];
Kevin Kofler db8ac78
+  FILE* f = fopen(cpuinfo_name, "r");
Kevin Kofler db8ac78
+  if (!f) {
Kevin Kofler db8ac78
+    // Assume Neon if /proc/cpuinfo is unavailable.
Kevin Kofler db8ac78
+    // This will occur for Chrome sandbox for Pepper or Render process.
Kevin Kofler db8ac78
+    return 1;
Kevin Kofler db8ac78
+  }
Kevin Kofler db8ac78
+  while (fgets(cpuinfo_line, sizeof(cpuinfo_line) - 1, f)) {
Kevin Kofler db8ac78
+    if (memcmp(cpuinfo_line, "Features", 8) == 0) {
Kevin Kofler db8ac78
+      char* p = strstr(cpuinfo_line, " neon");
Kevin Kofler db8ac78
+      if (p && (p[5] == ' ' || p[5] == '\n')) {
Kevin Kofler db8ac78
+        fclose(f);
Kevin Kofler db8ac78
+        return 1;
Kevin Kofler db8ac78
+      }
Kevin Kofler db8ac78
+      // aarch64 uses asimd for Neon.
Kevin Kofler db8ac78
+      p = strstr(cpuinfo_line, " asimd");
Kevin Kofler db8ac78
+      if (p && (p[6] == ' ' || p[6] == '\n')) {
Kevin Kofler db8ac78
+        fclose(f);
Kevin Kofler db8ac78
+        return 1;
Kevin Kofler db8ac78
+      }
Kevin Kofler db8ac78
+    }
Kevin Kofler db8ac78
+  }
Kevin Kofler db8ac78
+  fclose(f);
Kevin Kofler db8ac78
+  return 0;
Kevin Kofler db8ac78
+}
Kevin Kofler db8ac78
+
Kevin Kofler db8ac78
 int omxSP_HasArmNeon() {
Kevin Kofler db8ac78
-  return (android_getCpuFeatures() & ANDROID_CPU_ARM_FEATURE_NEON) != 0;
Kevin Kofler db8ac78
+#if defined(__arm__) || defined(__aarch64__)
Kevin Kofler db8ac78
+// gcc -mfpu=neon defines __ARM_NEON__
Kevin Kofler db8ac78
+// __ARM_NEON__ generates code that requires Neon.  NaCL also requires Neon.
Kevin Kofler db8ac78
+// For Linux, /proc/cpuinfo can be tested but without that assume Neon.
Kevin Kofler db8ac78
+#if defined(__ARM_NEON__) || defined(__native_client__) || !defined(__linux__)
Kevin Kofler db8ac78
+  return 1;
Kevin Kofler db8ac78
+// For aarch64(arm64), /proc/cpuinfo's feature is not complete, e.g. no neon
Kevin Kofler db8ac78
+// flag in it.
Kevin Kofler db8ac78
+// So for aarch64, neon enabling is hard coded here.
Kevin Kofler db8ac78
+#elif defined(__aarch64__)
Kevin Kofler db8ac78
+  return 1;
Kevin Kofler db8ac78
+#else
Kevin Kofler db8ac78
+  // Linux arm parse text file for neon detect.
Kevin Kofler db8ac78
+  return ArmCpuCaps("/proc/cpuinfo");
Kevin Kofler db8ac78
+#endif
Kevin Kofler db8ac78
+#endif  // __arm__
Kevin Kofler db8ac78
 }
Kevin Kofler db8ac78
 
Kevin Kofler db8ac78
 static void SetFFTRoutines() {
Kevin Kofler c815122
@@ -24,13 +68,9 @@
Kevin Kofler db8ac78
    * forward and inverse FFTs
Kevin Kofler db8ac78
    */
Kevin Kofler db8ac78
   if (omxSP_HasArmNeon()) {
Kevin Kofler db8ac78
-    __android_log_print(ANDROID_LOG_INFO, "OpenMAX DL FFT",
Kevin Kofler db8ac78
-                        "Using NEON FFT");
Kevin Kofler db8ac78
     omxSP_FFTFwd_RToCCS_F32 = omxSP_FFTFwd_RToCCS_F32_Sfs;
Kevin Kofler db8ac78
     omxSP_FFTInv_CCSToR_F32 = omxSP_FFTInv_CCSToR_F32_Sfs;
Kevin Kofler db8ac78
   } else {
Kevin Kofler db8ac78
-    __android_log_print(ANDROID_LOG_INFO, "OpenMAX DL FFT",
Kevin Kofler db8ac78
-                        "Using non-NEON FFT");
Kevin Kofler db8ac78
     omxSP_FFTFwd_RToCCS_F32 = omxSP_FFTFwd_RToCCS_F32_Sfs_vfp;
Kevin Kofler db8ac78
     omxSP_FFTInv_CCSToR_F32 = omxSP_FFTInv_CCSToR_F32_Sfs_vfp;
Kevin Kofler db8ac78
   }