100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C++
		
	
	
	
| /*
 | |
|  * 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 <android-base/logging.h>
 | |
| #include <android-base/parsebool.h>
 | |
| #include <android-base/parseint.h>
 | |
| #include <nnapi/Types.h>
 | |
| #include <stdint.h>
 | |
| 
 | |
| #include <string>
 | |
| 
 | |
| #if !defined(NN_COMPATIBILITY_LIBRARY_BUILD) && !defined(NN_EXPERIMENTAL_FEATURE)
 | |
| #include <server_configurable_flags/get_flags.h>
 | |
| #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<int32_t>(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
 |