142 lines
4.7 KiB
C++
142 lines
4.7 KiB
C++
/* Copyright 2020 The TensorFlow Authors. All Rights Reserved.
|
|
|
|
Licensed under the Apache License, Version 2.0 (the "License");
|
|
you may not use this file except in compliance with the License.
|
|
You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
==============================================================================*/
|
|
#include "tensorflow/lite/experimental/acceleration/compatibility/devicedb.h"
|
|
|
|
#include <memory>
|
|
#include <string>
|
|
|
|
#include <gtest/gtest.h>
|
|
#include "flatbuffers/flatbuffers.h" // from @flatbuffers
|
|
#include "tensorflow/lite/experimental/acceleration/compatibility/devicedb-sample.h"
|
|
#include "tensorflow/lite/experimental/acceleration/compatibility/variables.h"
|
|
#include "tensorflow/lite/testing/util.h"
|
|
|
|
namespace tflite {
|
|
namespace acceleration {
|
|
namespace {
|
|
|
|
class DeviceDbTest : public ::testing::Test {
|
|
protected:
|
|
void LoadSample() {
|
|
device_db_ = flatbuffers::GetRoot<DeviceDatabase>(
|
|
g_tflite_acceleration_devicedb_sample_binary);
|
|
}
|
|
|
|
const DeviceDatabase* device_db_ = nullptr;
|
|
};
|
|
|
|
TEST_F(DeviceDbTest, Load) {
|
|
LoadSample();
|
|
ASSERT_TRUE(device_db_);
|
|
ASSERT_TRUE(device_db_->root());
|
|
EXPECT_EQ(device_db_->root()->size(), 3);
|
|
}
|
|
|
|
TEST_F(DeviceDbTest, SocLookup) {
|
|
LoadSample();
|
|
ASSERT_TRUE(device_db_);
|
|
std::map<std::string, std::string> variables;
|
|
|
|
// Find first device mapping.
|
|
variables[kDeviceModel] = "m712c";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables[kSoCModel], "exynos_7872");
|
|
|
|
// Find second device mapping.
|
|
variables.clear();
|
|
variables[kDeviceModel] = "sc_02l";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables[kSoCModel], "exynos_7885");
|
|
|
|
// Make sure no results are returned without a match.
|
|
variables.clear();
|
|
variables[kDeviceModel] = "nosuch";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables.find(kSoCModel), variables.end());
|
|
}
|
|
|
|
TEST_F(DeviceDbTest, StatusLookupWithSoC) {
|
|
LoadSample();
|
|
ASSERT_TRUE(device_db_);
|
|
std::map<std::string, std::string> variables;
|
|
|
|
// Find exact match.
|
|
variables[kOpenGLESVersion] = "3.1";
|
|
variables[kSoCModel] = "exynos_7872";
|
|
variables[kAndroidSdkVersion] = "24";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables[gpu::kStatus], gpu::kStatusSupported);
|
|
|
|
// Ensure no results without a match.
|
|
variables[kOpenGLESVersion] = "3.0";
|
|
variables.erase(variables.find(gpu::kStatus));
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables.find(gpu::kStatus), variables.end());
|
|
|
|
// Find no results with too low an android version.
|
|
variables.clear();
|
|
variables[kOpenGLESVersion] = "3.1";
|
|
variables[kSoCModel] = "exynos_7883";
|
|
variables[kAndroidSdkVersion] = "24";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables.find(gpu::kStatus), variables.end());
|
|
// Find a match with android version above minimum.
|
|
variables[kAndroidSdkVersion] = "29";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables[gpu::kStatus], gpu::kStatusSupported);
|
|
}
|
|
|
|
TEST_F(DeviceDbTest, StatusLookupWithDevice) {
|
|
LoadSample();
|
|
ASSERT_TRUE(device_db_);
|
|
std::map<std::string, std::string> variables;
|
|
// Find unsupported device (same model, different device).
|
|
variables[kAndroidSdkVersion] = "24";
|
|
variables[kDeviceModel] = "sm_j810f";
|
|
variables[kDeviceName] = "j8y18lte";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables[gpu::kStatus], gpu::kStatusUnsupported);
|
|
|
|
// Find supported device (same model, different device).
|
|
variables.clear();
|
|
variables[kAndroidSdkVersion] = "24";
|
|
variables[kDeviceModel] = "sm_j810m";
|
|
variables[kDeviceName] = "j8y18lte";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables[gpu::kStatus], gpu::kStatusSupported);
|
|
}
|
|
|
|
TEST_F(DeviceDbTest, StatusLookupBasedOnDerivedProperties) {
|
|
LoadSample();
|
|
ASSERT_TRUE(device_db_);
|
|
std::map<std::string, std::string> variables;
|
|
// Find status based on SoC derived from model.
|
|
variables[kOpenGLESVersion] = "3.1";
|
|
variables[kAndroidSdkVersion] = "24";
|
|
variables[kDeviceModel] = "m712c";
|
|
UpdateVariablesFromDatabase(&variables, *device_db_);
|
|
EXPECT_EQ(variables[gpu::kStatus], gpu::kStatusSupported);
|
|
}
|
|
|
|
} // namespace
|
|
} // namespace acceleration
|
|
} // namespace tflite
|
|
|
|
int main(int argc, char** argv) {
|
|
::tflite::LogToStderr();
|
|
::testing::InitGoogleTest(&argc, argv);
|
|
return RUN_ALL_TESTS();
|
|
}
|