/* * Copyright (C) 2021 The Android Open Source Project * * 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. */ #define LOG_TAG "ServerFlag" #include "ServerFlag.h" #include #include #include #include #include #include #if !defined(NN_COMPATIBILITY_LIBRARY_BUILD) && !defined(NN_EXPERIMENTAL_FEATURE) #include #endif // !defined(NN_COMPATIBILITY_LIBRARY_BUILD) && !defined(NN_EXPERIMENTAL_FEATURE) namespace android::nn { #ifndef NN_COMPATIBILITY_LIBRARY_BUILD #ifndef NN_EXPERIMENTAL_FEATURE int64_t getServerFeatureLevelFlag() { return getServerFeatureLevelFlag(server_configurable_flags::GetServerConfigurableFlag); } bool getServerTelemetryEnableFlag() { return getServerTelemetryEnableFlag(server_configurable_flags::GetServerConfigurableFlag); } #endif // NN_EXPERIMENTAL_FEATURE int64_t getServerFeatureLevelFlag(GetServerConfigurableFlagFunc serverFunc) { const std::string featureLevelString = serverFunc(kExprCategoryName, kCurrentFeatureLevelFlagName, std::to_string(kDefaultFeatureLevelNum)); int64_t featureLevel = kDefaultFeatureLevelNum; const bool success = base::ParseInt(featureLevelString, &featureLevel, kMinFeatureLevelNum, kMaxFeatureLevelNum); if (!success) { LOG(WARNING) << "Failed to parse result of GetServerConfigurableFlag, errno=" << errno; } return featureLevel; } bool getServerTelemetryEnableFlag(GetServerConfigurableFlagFunc serverFunc) { const std::string telemetryEnabledString = serverFunc(kExprCategoryName, kTelemetryEnableFlagName, std::to_string(kDefaultTelemetryEnableValue)); const auto parseBoolResult = base::ParseBool(telemetryEnabledString); switch (parseBoolResult) { case base::ParseBoolResult::kError: LOG(WARNING) << "Failed to parse result of GetServerConfigurableFlag"; return kDefaultTelemetryEnableValue; case base::ParseBoolResult::kFalse: return false; case base::ParseBoolResult::kTrue: return true; } LOG(WARNING) << "Unrecognized return from base::ParseBool: " << static_cast(parseBoolResult); return kDefaultTelemetryEnableValue; } #endif // NN_COMPATIBILITY_LIBRARY_BUILD Version serverFeatureLevelToVersion(int64_t serverFeatureLevel) { Version version; switch (serverFeatureLevel) { case 5: return kVersionFeatureLevel5; case 6: return kVersionFeatureLevel6; case 7: return kVersionFeatureLevel7; case 8: return kVersionFeatureLevel8; default: LOG(FATAL) << "Invalid feature level flag value " << serverFeatureLevel; return {}; } } } // namespace android::nn