From a82fc0a04663d46b16184e00ab85aed6275f499a Mon Sep 17 00:00:00 2001 From: Alexander Smorkalov Date: Wed, 11 Jul 2012 13:30:41 +0000 Subject: [PATCH] Unit tests updated. Version and HW compatiblity tests added; Tegra3, neon, sseX, x64 support uncomment and guarded by ifdefs --- .../jni/BinderComponent/HardwareDetector.cpp | 4 + .../engine/jni/NativeService/PackageInfo.cpp | 58 ++++++------- .../service/engine/jni/Tests/OpenCVEngineTest.cpp | 43 +--------- .../service/engine/jni/Tests/PackageInfoTest.cpp | 97 ++++++++-------------- .../engine/jni/Tests/PackageManagerStub.cpp | 2 +- 5 files changed, 70 insertions(+), 134 deletions(-) diff --git a/android/service/engine/jni/BinderComponent/HardwareDetector.cpp b/android/service/engine/jni/BinderComponent/HardwareDetector.cpp index ccfad3c..ce60325 100644 --- a/android/service/engine/jni/BinderComponent/HardwareDetector.cpp +++ b/android/service/engine/jni/BinderComponent/HardwareDetector.cpp @@ -156,6 +156,7 @@ int GetProcessorCount() int DetectKnownPlatforms() { +#ifdef __SUPPORT_TEGRA3 int tegra_status = DetectTegra(); if (3 == tegra_status) @@ -166,6 +167,9 @@ int DetectKnownPlatforms() { return PLATFORM_UNKNOWN; } +#else + return PLATFORM_UNKNOWN; +#endif // NOTE: Uncomment when all Tegras will be supported /*if (tegra_status > 0) diff --git a/android/service/engine/jni/NativeService/PackageInfo.cpp b/android/service/engine/jni/NativeService/PackageInfo.cpp index 65828e7..ae4b34b 100644 --- a/android/service/engine/jni/NativeService/PackageInfo.cpp +++ b/android/service/engine/jni/NativeService/PackageInfo.cpp @@ -30,23 +30,19 @@ inline string JoinARMFeatures(int cpu_id) if (FEATURES_HAS_NEON2 & cpu_id) { - if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id) ||(ARCH_ARMv7 & cpu_id))) - result = string(FEATURES_HAS_NEON2_NAME); + result = string(FEATURES_HAS_NEON2_NAME); } else if (FEATURES_HAS_NEON & cpu_id) { - if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id))) - result = string(FEATURES_HAS_NEON_NAME); + result = string(FEATURES_HAS_NEON_NAME); } else if (FEATURES_HAS_VFPv3 & cpu_id) { - if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id)) - result = string(FEATURES_HAS_VFPv3_NAME); + result = string(FEATURES_HAS_VFPv3_NAME); } else if (FEATURES_HAS_VFPv3d16 & cpu_id) { - if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id)) - result = string(FEATURES_HAS_VFPv3d16_NAME); + result = string(FEATURES_HAS_VFPv3d16_NAME); } return result; @@ -186,7 +182,7 @@ inline int SplitPlatfrom(const vector& features) * If platform is unknown it is defined by hardware capabilities using pattern: __ * Example: armv7_neon, armv5_vfpv3 */ -PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::string install_path): +PackageInfo::PackageInfo(const string& version, int platform, int cpu_id): Version(version), Platform(platform), CpuID(cpu_id), @@ -198,6 +194,7 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s FullName = BasePackageName + "_v" + Version.substr(0, Version.size()-1); if (PLATFORM_UNKNOWN != Platform) { + LOGD("Try to use known platform !!!"); FullName += string("_") + JoinPlatform(platform); } else @@ -206,19 +203,21 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s { if (ARCH_X86 & CpuID) { - LOGD("PackageInfo::PackageInfo: package arch x86"); + LOGD("Found processor with x86 arch"); FullName += string("_") + ARCH_X86_NAME; #ifdef __SUPPORT_INTEL_FEATURES string features = JoinIntelFeatures(CpuID); +#else + string features; +#endif if (!features.empty()) { FullName += string("_") + features; } -#endif } else if (ARCH_X64 & CpuID) { - LOGD("PackageInfo::PackageInfo: package arch x64"); + LOGD("Found processor with x64 arch"); #ifdef __SUPPORT_INTEL_x64 FullName += string("_") + ARCH_X64_NAME; #else @@ -226,53 +225,61 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s #endif #ifdef __SUPPORT_INTEL_FEATURES string features = JoinIntelFeatures(CpuID); +#else + string features; +#endif if (!features.empty()) { FullName += string("_") + features; } -#endif } else if (ARCH_ARMv5 & CpuID) { - LOGD("PackageInfo::PackageInfo: package arch ARMv5"); + LOGD("Found processor with ARMv5 arch"); FullName += string("_") + ARCH_ARMv5_NAME; #ifdef __SUPPORT_ARMEABI_FEATURES string features = JoinARMFeatures(CpuID); +#else + string features; +#endif if (!features.empty()) { FullName += string("_") + features; } -#endif } else if (ARCH_ARMv6 & CpuID) { - LOGD("PackageInfo::PackageInfo: package arch ARMv6"); + LOGD("Found processor with ARMv6 arch"); // NOTE: ARM v5 used instead ARM v6 //FullName += string("_") + ARCH_ARMv6_NAME; FullName += string("_") + ARCH_ARMv5_NAME; #ifdef __SUPPORT_ARMEABI_FEATURES string features = JoinARMFeatures(CpuID); +#else + string features; +#endif if (!features.empty()) { FullName += string("_") + features; } -#endif } else if (ARCH_ARMv7 & CpuID) { - LOGD("PackageInfo::PackageInfo: package arch ARMv7"); + LOGD("Found processor with ARMv7 arch"); FullName += string("_") + ARCH_ARMv7_NAME; #ifdef __SUPPORT_ARMEABI_V7A_FEATURES string features = JoinARMFeatures(CpuID); +#else + string features; +#endif if (!features.empty()) { FullName += string("_") + features; } -#endif } else if (ARCH_ARMv8 & CpuID) { - LOGD("PackageInfo::PackageInfo: package arch ARMv8"); + LOGD("Found processor with ARMv8 arch"); #ifdef __SUPPORT_ARMEABI_V8 FullName += string("_") + ARCH_ARMv8_NAME; #else @@ -286,7 +293,7 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s } else { - LOGD("PackageInfo::PackageInfo: package arch unknown"); + LOGD("Found processor with unknown arch"); Version.clear(); CpuID = ARCH_UNKNOWN; Platform = PLATFORM_UNKNOWN; @@ -294,24 +301,19 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::s } else { - LOGD("PackageInfo::PackageInfo: package arch unknown"); + LOGD("Found processor with unknown arch"); Version.clear(); CpuID = ARCH_UNKNOWN; Platform = PLATFORM_UNKNOWN; } } - - if (!FullName.empty()) - { - InstallPath = install_path + FullName + "/lib"; - } } PackageInfo::PackageInfo(const string& fullname, const string& install_path, const string& package_version): FullName(fullname), InstallPath(install_path) { - LOGD("PackageInfo::PackageInfo(\"%s\", \"%s\", \"%s\")", fullname.c_str(), install_path.c_str(), package_version.c_str()); + LOGD("PackageInfo::PackageInfo(\"%s\", \"%s\")", fullname.c_str(), install_path.c_str()); assert(!fullname.empty()); assert(!install_path.empty()); diff --git a/android/service/engine/jni/Tests/OpenCVEngineTest.cpp b/android/service/engine/jni/Tests/OpenCVEngineTest.cpp index 4ea8b3d..1b4b6b2 100644 --- a/android/service/engine/jni/Tests/OpenCVEngineTest.cpp +++ b/android/service/engine/jni/Tests/OpenCVEngineTest.cpp @@ -104,9 +104,9 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion) { sp Engine = InitConnect(); Starter.PackageManager->InstalledPackages.clear(); - Starter.PackageManager->InstallVersion("241", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); + Starter.PackageManager->InstallVersion("242", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); EXPECT_FALSE(NULL == Engine.get()); - String16 result = Engine->GetLibPathByVersion(String16("2.4.2")); + String16 result = Engine->GetLibPathByVersion(String16("2.4.3")); EXPECT_EQ(0, result.size()); } @@ -118,48 +118,9 @@ TEST(OpenCVEngineTest, GetPathForUnExistVersion) EXPECT_EQ(0, result.size()); } -TEST(OpenCVEngineTest, GetPathForCompatiblePackage1) -{ - sp Engine = InitConnect(); - Starter.PackageManager->InstalledPackages.clear(); - Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_ARMv5); - EXPECT_FALSE(NULL == Engine.get()); - String16 result = Engine->GetLibPathByVersion(String16("2.4")); - EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv5/lib", String8(result).string()); -} - -TEST(OpenCVEngineTest, GetPathForCompatiblePackage2) -{ - sp Engine = InitConnect(); - Starter.PackageManager->InstalledPackages.clear(); - Starter.PackageManager->InstallVersion("242", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); - EXPECT_FALSE(NULL == Engine.get()); - String16 result = Engine->GetLibPathByVersion(String16("2.4")); -#ifdef __SUPPORT_TEGRA3 - EXPECT_STREQ("/data/data/org.opencv.lib_v24_tegra3/lib", String8(result).string()); -#else -#ifdef __SUPPORT_ARMEABI_V7A_FEATURES - EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a_neon/lib", String8(result).string()); -#else - EXPECT_STREQ("/data/data/org.opencv.lib_v24_armv7a/lib", String8(result).string()); -#endif -#endif -} - -TEST(OpenCVEngineTest, GetPathForInCompatiblePackage1) -{ - sp Engine = InitConnect(); - Starter.PackageManager->InstalledPackages.clear(); - Starter.PackageManager->InstallVersion("242", PLATFORM_UNKNOWN, ARCH_X64); - EXPECT_FALSE(NULL == Engine.get()); - String16 result = Engine->GetLibPathByVersion(String16("2.4")); - EXPECT_EQ(0, result.size()); -} - TEST(OpenCVEngineTest, InstallAndGetVersion) { sp Engine = InitConnect(); - Starter.PackageManager->InstalledPackages.clear(); EXPECT_FALSE(NULL == Engine.get()); EXPECT_TRUE(Engine->InstallVersion(String16("2.4"))); String16 result = Engine->GetLibPathByVersion(String16("2.4")); diff --git a/android/service/engine/jni/Tests/PackageInfoTest.cpp b/android/service/engine/jni/Tests/PackageInfoTest.cpp index c8f6c7c..14e347c 100644 --- a/android/service/engine/jni/Tests/PackageInfoTest.cpp +++ b/android/service/engine/jni/Tests/PackageInfoTest.cpp @@ -18,24 +18,25 @@ TEST(PackageInfo, FullNameArmv7) TEST(PackageInfo, FullNameArmv7Neon) { - PackageInfo info("241", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON); + PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON); string name = info.GetFullName(); #ifdef __SUPPORT_ARMEABI_V7A_FEATURES - EXPECT_STREQ("org.opencv.lib_v24_armv7a_neon", name.c_str()); + EXPECT_STREQ("org.opencv.lib_v23_armv7a_neon", name.c_str()); #else - EXPECT_STREQ("org.opencv.lib_v24_armv7a", name.c_str()); + EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); #endif } TEST(PackageInfo, FullNameArmv7VFPv3) { - PackageInfo info("233", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3); + PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3); string name = info.GetFullName(); EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); } TEST(PackageInfo, FullNameArmv7VFPv3Neon) { + PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); string name = info.GetFullName(); #ifdef __SUPPORT_ARMEABI_V7A_FEATURES @@ -45,46 +46,6 @@ TEST(PackageInfo, FullNameArmv7VFPv3Neon) #endif } -TEST(PackageInfo, FullNameArmv5) -{ - PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv5); - string name = info.GetFullName(); - EXPECT_STREQ("org.opencv.lib_v23_armv5", name.c_str()); -} - -TEST(PackageInfo, FullNameArmv6) -{ - PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv6); - string name = info.GetFullName(); - EXPECT_STREQ("org.opencv.lib_v23_armv5", name.c_str()); -} - -TEST(PackageInfo, FullNameArmv6VFPv3) -{ - PackageInfo info("232", PLATFORM_UNKNOWN, ARCH_ARMv6 | FEATURES_HAS_VFPv3); - string name = info.GetFullName(); -#ifdef __SUPPORT_ARMEABI_FEATURES - EXPECT_STREQ("org.opencv.lib_v23_armv5_vfpv3", name.c_str()); -#else - EXPECT_STREQ("org.opencv.lib_v23_armv5", name.c_str()); -#endif -} - -TEST(PackageInfo, FullNameTegra3) -{ - PackageInfo info("230", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); - string name = info.GetFullName(); - #ifdef __SUPPORT_TEGRA3 - EXPECT_STREQ("org.opencv.lib_v23_tegra3", name.c_str()); - #else - #ifdef __SUPPORT_ARMEABI_V7A_FEATURES - EXPECT_STREQ("org.opencv.lib_v23_armv7a_neon", name.c_str()); - #else - EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); - #endif - #endif -} - TEST(PackageInfo, FullNameX86SSE2) { PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2); @@ -103,20 +64,6 @@ TEST(PackageInfo, Armv7NeonFromFullName) EXPECT_EQ(ARCH_ARMv7 | FEATURES_HAS_NEON, info.GetCpuID()); } -TEST(PackageInfo, Armv5FromFullName) -{ - PackageInfo info("org.opencv.lib_v23_armv5", "/data/data/org.opencv.lib_v23_armv5"); - EXPECT_EQ("230", info.GetVersion()); - EXPECT_EQ(ARCH_ARMv5, info.GetCpuID()); -} - -TEST(PackageInfo, Armv5VFPv3FromFullName) -{ - PackageInfo info("org.opencv.lib_v23_armv5_vfpv3", "/data/data/org.opencv.lib_v23_armv5_vfpv3"); - EXPECT_EQ("230", info.GetVersion()); - EXPECT_EQ(ARCH_ARMv5 | FEATURES_HAS_VFPv3, info.GetCpuID()); -} - TEST(PackageInfo, X86SSE2FromFullName) { PackageInfo info("org.opencv.lib_v24_x86_sse2", "/data/data/org.opencv.lib_v24_x86_sse2"); @@ -139,6 +86,30 @@ TEST(PackageInfo, Tegra3FromFullName) EXPECT_EQ(PLATFORM_TEGRA3, info.GetPlatform()); } +TEST(PackageInfo, FullNameTegra3) +{ + PackageInfo info("230", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); + string name = info.GetFullName(); +#ifdef __SUPPORT_TEGRA3 + EXPECT_STREQ("org.opencv.lib_v23_tegra3", name.c_str()); +#else +#ifdef __SUPPORT_ARMEABI_V7A_FEATURES + EXPECT_STREQ("org.opencv.lib_v23_armv7a_neon", name.c_str()); +#else + EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); +#endif +#endif +} + +TEST(PackageInfo, FullNameTegra2) +{ + PackageInfo info("230", PLATFORM_TEGRA2, 0); + EXPECT_TRUE(!info.IsValid()); + // TODO: Replace if seporate package will be exists + //string name = info.GetFullName(); + //EXPECT_STREQ("org.opencv.lib_v23_tegra2", name.c_str()); +} + TEST(PackageInfo, Comparator1) { PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_X86); @@ -150,11 +121,9 @@ TEST(PackageInfo, Comparator1) TEST(PackageInfo, Comparator2) { PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON | FEATURES_HAS_VFPv3); -#ifdef __SUPPORT_ARMEABI_V7A_FEATURES - PackageInfo info2("org.opencv.lib_v24_armv7a_neon", "/data/data/org.opencv.lib_v24_armv7a_neon"); -#else PackageInfo info2("org.opencv.lib_v24_armv7a", "/data/data/org.opencv.lib_v24_armv7a"); -#endif + // TODO: Replace if seporate package will be exists + //PackageInfo info2("org.opencv.lib_v24_armv7_vfpv3_neon", "/data/data/org.opencv.lib_v24_armv7_vfpv3_neon"); EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str()); EXPECT_EQ(info1, info2); } @@ -162,8 +131,8 @@ TEST(PackageInfo, Comparator2) #ifdef __SUPPORT_TEGRA3 TEST(PackageInfo, Comparator3) { - PackageInfo info1("230", PLATFORM_TEGRA3, 0); - PackageInfo info2("org.opencv.lib_v23_tegra3", "/data/data/org.opencv.lib_v23_tegra3"); + PackageInfo info1("230", PLATFORM_TEGRA2, 0); + PackageInfo info2("org.opencv.lib_v23_tegra2", "/data/data/org.opencv.lib_v23_tegra2"); EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str()); EXPECT_EQ(info1, info2); } diff --git a/android/service/engine/jni/Tests/PackageManagerStub.cpp b/android/service/engine/jni/Tests/PackageManagerStub.cpp index 20be63a..b39524b 100644 --- a/android/service/engine/jni/Tests/PackageManagerStub.cpp +++ b/android/service/engine/jni/Tests/PackageManagerStub.cpp @@ -4,7 +4,7 @@ using namespace std; bool PackageManagerStub::InstallPackage(const PackageInfo& package) { - InstalledPackages.push_back(package); + InstalledPackages.push_back(PackageInfo(package.GetFullName(), "/data/data/" + package.GetFullName() + "/lib")); return true; } -- 2.7.4