Package name logic improved;

Aditional tests added;
Some bug fixes with different __SUPPORT_XXX defines.
This commit is contained in:
Alexander Smorkalov 2012-07-12 08:02:41 +00:00 committed by Andrey Kamaev
parent a82fc0a046
commit 44aeff04ae
6 changed files with 90 additions and 50 deletions

View File

@ -24,8 +24,8 @@ LOCAL_C_INCLUDES := \
$(TOP)/system/core/include $(TOP)/system/core/include
LOCAL_CFLAGS += -DPLATFORM_ANDROID LOCAL_CFLAGS += -DPLATFORM_ANDROID
LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_TEGRA3
LOCAL_CFLAGS += -D__SUPPORT_TEGRA3 #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES
#LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES
LOCAL_PRELINK_MODULE := false LOCAL_PRELINK_MODULE := false
@ -65,8 +65,8 @@ LOCAL_C_INCLUDES := \
LOCAL_PRELINK_MODULE := false LOCAL_PRELINK_MODULE := false
LOCAL_CFLAGS += -DPLATFORM_ANDROID LOCAL_CFLAGS += -DPLATFORM_ANDROID
LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_TEGRA3
LOCAL_CFLAGS += -D__SUPPORT_TEGRA3 #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES
#LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES
LOCAL_MODULE := libOpenCVEngine_jni LOCAL_MODULE := libOpenCVEngine_jni

View File

@ -30,19 +30,23 @@ inline string JoinARMFeatures(int cpu_id)
if (FEATURES_HAS_NEON2 & cpu_id) if (FEATURES_HAS_NEON2 & cpu_id)
{ {
result = string(FEATURES_HAS_NEON2_NAME); if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id) ||(ARCH_ARMv7 & cpu_id)))
result = string(FEATURES_HAS_NEON2_NAME);
} }
else if (FEATURES_HAS_NEON & cpu_id) else if (FEATURES_HAS_NEON & cpu_id)
{ {
result = string(FEATURES_HAS_NEON_NAME); if (!((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id)))
result = string(FEATURES_HAS_NEON_NAME);
} }
else if (FEATURES_HAS_VFPv3 & cpu_id) else if (FEATURES_HAS_VFPv3 & cpu_id)
{ {
result = string(FEATURES_HAS_VFPv3_NAME); if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id))
result = string(FEATURES_HAS_VFPv3_NAME);
} }
else if (FEATURES_HAS_VFPv3d16 & cpu_id) else if (FEATURES_HAS_VFPv3d16 & cpu_id)
{ {
result = string(FEATURES_HAS_VFPv3d16_NAME); if ((ARCH_ARMv5 & cpu_id) || (ARCH_ARMv6 & cpu_id))
result = string(FEATURES_HAS_VFPv3d16_NAME);
} }
return result; return result;
@ -182,7 +186,7 @@ inline int SplitPlatfrom(const vector<string>& features)
* If platform is unknown it is defined by hardware capabilities using pattern: <arch>_<floating point and vectorization features>_<other features> * If platform is unknown it is defined by hardware capabilities using pattern: <arch>_<floating point and vectorization features>_<other features>
* Example: armv7_neon, armv5_vfpv3 * Example: armv7_neon, armv5_vfpv3
*/ */
PackageInfo::PackageInfo(const string& version, int platform, int cpu_id): PackageInfo::PackageInfo(const string& version, int platform, int cpu_id, std::string install_path):
Version(version), Version(version),
Platform(platform), Platform(platform),
CpuID(cpu_id), CpuID(cpu_id),
@ -194,7 +198,6 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id):
FullName = BasePackageName + "_v" + Version.substr(0, Version.size()-1); FullName = BasePackageName + "_v" + Version.substr(0, Version.size()-1);
if (PLATFORM_UNKNOWN != Platform) if (PLATFORM_UNKNOWN != Platform)
{ {
LOGD("Try to use known platform !!!");
FullName += string("_") + JoinPlatform(platform); FullName += string("_") + JoinPlatform(platform);
} }
else else
@ -307,13 +310,18 @@ PackageInfo::PackageInfo(const string& version, int platform, int cpu_id):
Platform = PLATFORM_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): PackageInfo::PackageInfo(const string& fullname, const string& install_path, const string& package_version):
FullName(fullname), FullName(fullname),
InstallPath(install_path) InstallPath(install_path)
{ {
LOGD("PackageInfo::PackageInfo(\"%s\", \"%s\")", fullname.c_str(), install_path.c_str()); LOGD("PackageInfo::PackageInfo(\"%s\", \"%s\", \"%s\")", fullname.c_str(), install_path.c_str(), package_version.c_str());
assert(!fullname.empty()); assert(!fullname.empty());
assert(!install_path.empty()); assert(!install_path.empty());

View File

@ -104,9 +104,9 @@ TEST(OpenCVEngineTest, GetPathForExecHWNewVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear(); Starter.PackageManager->InstalledPackages.clear();
Starter.PackageManager->InstallVersion("242", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON); Starter.PackageManager->InstallVersion("241", PLATFORM_TEGRA3, ARCH_ARMv7 | FEATURES_HAS_NEON);
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
String16 result = Engine->GetLibPathByVersion(String16("2.4.3")); String16 result = Engine->GetLibPathByVersion(String16("2.4.2"));
EXPECT_EQ(0, result.size()); EXPECT_EQ(0, result.size());
} }
@ -121,6 +121,7 @@ TEST(OpenCVEngineTest, GetPathForUnExistVersion)
TEST(OpenCVEngineTest, InstallAndGetVersion) TEST(OpenCVEngineTest, InstallAndGetVersion)
{ {
sp<IOpenCVEngine> Engine = InitConnect(); sp<IOpenCVEngine> Engine = InitConnect();
Starter.PackageManager->InstalledPackages.clear();
EXPECT_FALSE(NULL == Engine.get()); EXPECT_FALSE(NULL == Engine.get());
EXPECT_TRUE(Engine->InstallVersion(String16("2.4"))); EXPECT_TRUE(Engine->InstallVersion(String16("2.4")));
String16 result = Engine->GetLibPathByVersion(String16("2.4")); String16 result = Engine->GetLibPathByVersion(String16("2.4"));

View File

@ -18,25 +18,24 @@ TEST(PackageInfo, FullNameArmv7)
TEST(PackageInfo, FullNameArmv7Neon) TEST(PackageInfo, FullNameArmv7Neon)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON); PackageInfo info("241", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON);
string name = info.GetFullName(); string name = info.GetFullName();
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES #ifdef __SUPPORT_ARMEABI_V7A_FEATURES
EXPECT_STREQ("org.opencv.lib_v23_armv7a_neon", name.c_str()); EXPECT_STREQ("org.opencv.lib_v24_armv7a_neon", name.c_str());
#else #else
EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); EXPECT_STREQ("org.opencv.lib_v24_armv7a", name.c_str());
#endif #endif
} }
TEST(PackageInfo, FullNameArmv7VFPv3) TEST(PackageInfo, FullNameArmv7VFPv3)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3); PackageInfo info("233", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3);
string name = info.GetFullName(); string name = info.GetFullName();
EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str()); EXPECT_STREQ("org.opencv.lib_v23_armv7a", name.c_str());
} }
TEST(PackageInfo, FullNameArmv7VFPv3Neon) TEST(PackageInfo, FullNameArmv7VFPv3Neon)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON); PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_VFPv3 | FEATURES_HAS_NEON);
string name = info.GetFullName(); string name = info.GetFullName();
#ifdef __SUPPORT_ARMEABI_V7A_FEATURES #ifdef __SUPPORT_ARMEABI_V7A_FEATURES
@ -46,6 +45,46 @@ TEST(PackageInfo, FullNameArmv7VFPv3Neon)
#endif #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) TEST(PackageInfo, FullNameX86SSE2)
{ {
PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2); PackageInfo info("230", PLATFORM_UNKNOWN, ARCH_X86 | FEATURES_HAS_SSE2);
@ -64,6 +103,20 @@ TEST(PackageInfo, Armv7NeonFromFullName)
EXPECT_EQ(ARCH_ARMv7 | FEATURES_HAS_NEON, info.GetCpuID()); 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) TEST(PackageInfo, X86SSE2FromFullName)
{ {
PackageInfo info("org.opencv.lib_v24_x86_sse2", "/data/data/org.opencv.lib_v24_x86_sse2"); PackageInfo info("org.opencv.lib_v24_x86_sse2", "/data/data/org.opencv.lib_v24_x86_sse2");
@ -86,30 +139,6 @@ TEST(PackageInfo, Tegra3FromFullName)
EXPECT_EQ(PLATFORM_TEGRA3, info.GetPlatform()); 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) TEST(PackageInfo, Comparator1)
{ {
PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_X86); PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_X86);
@ -121,9 +150,11 @@ TEST(PackageInfo, Comparator1)
TEST(PackageInfo, Comparator2) TEST(PackageInfo, Comparator2)
{ {
PackageInfo info1("240", PLATFORM_UNKNOWN, ARCH_ARMv7 | FEATURES_HAS_NEON | FEATURES_HAS_VFPv3); 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"); PackageInfo info2("org.opencv.lib_v24_armv7a", "/data/data/org.opencv.lib_v24_armv7a");
// TODO: Replace if seporate package will be exists #endif
//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_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str());
EXPECT_EQ(info1, info2); EXPECT_EQ(info1, info2);
} }
@ -131,8 +162,8 @@ TEST(PackageInfo, Comparator2)
#ifdef __SUPPORT_TEGRA3 #ifdef __SUPPORT_TEGRA3
TEST(PackageInfo, Comparator3) TEST(PackageInfo, Comparator3)
{ {
PackageInfo info1("230", PLATFORM_TEGRA2, 0); PackageInfo info1("230", PLATFORM_TEGRA3, 0);
PackageInfo info2("org.opencv.lib_v23_tegra2", "/data/data/org.opencv.lib_v23_tegra2"); PackageInfo info2("org.opencv.lib_v23_tegra3", "/data/data/org.opencv.lib_v23_tegra3");
EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str()); EXPECT_STREQ(info1.GetFullName().c_str(), info2.GetFullName().c_str());
EXPECT_EQ(info1, info2); EXPECT_EQ(info1, info2);
} }

View File

@ -4,7 +4,7 @@ using namespace std;
bool PackageManagerStub::InstallPackage(const PackageInfo& package) bool PackageManagerStub::InstallPackage(const PackageInfo& package)
{ {
InstalledPackages.push_back(PackageInfo(package.GetFullName(), "/data/data/" + package.GetFullName() + "/lib")); InstalledPackages.push_back(package);
return true; return true;
} }

View File

@ -17,7 +17,7 @@ LOCAL_SRC_FILES := \
Tests/PackageManagmentTest.cpp \ Tests/PackageManagmentTest.cpp \
Tests/PackageInfoTest.cpp \ Tests/PackageInfoTest.cpp \
Tests/OpenCVEngineTest.cpp \ Tests/OpenCVEngineTest.cpp \
Tests/TestMain.cpp Tests/TestMain.cpp
# Tests/HardwareDetectionTest.cpp \ # Tests/HardwareDetectionTest.cpp \
LOCAL_C_INCLUDES := \ LOCAL_C_INCLUDES := \
@ -31,8 +31,8 @@ LOCAL_C_INCLUDES := \
$(TOP)/system/core/include $(TOP)/system/core/include
LOCAL_CFLAGS += -O0 -DGTEST_HAS_CLONE=0 -DGTEST_OS_LINUX_ANDROID=1 -DGTEST_HAS_TR1_TUPLE=0 LOCAL_CFLAGS += -O0 -DGTEST_HAS_CLONE=0 -DGTEST_OS_LINUX_ANDROID=1 -DGTEST_HAS_TR1_TUPLE=0
LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_TEGRA3
LOCAL_CFLAGS += -D__SUPPORT_TEGRA3 #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_V7A_FEATURES
#LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES #LOCAL_CFLAGS += -D__SUPPORT_ARMEABI_FEATURES
LOCAL_LDFLAGS = -Wl,-allow-shlib-undefined LOCAL_LDFLAGS = -Wl,-allow-shlib-undefined