blob: 3dcfbee3a520f17f90033d9df0ce09e11450f5df [file] [log] [blame]
/*
* Copyright 2020 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.
*/
#include "memory_advice_utils.h"
#include <stdlib.h>
#include <algorithm>
#include <cctype>
#include <fstream>
#include <iterator>
#include <map>
#include <sstream>
#include <streambuf>
#include <string>
#include "Log.h"
#include "jni/jni_wrap.h"
#include "memory_advice/memory_advice.h"
#include "system_utils.h"
#define LOG_TAG "MemoryAdvice:DeviceProfiler"
using namespace json11;
namespace memory_advice {
namespace utils {
bool EvaluateBoolean(std::string formula, Json::object metrics) {
if (formula.find('>') != std::string::npos) {
return EvaluateNumber(formula.substr(0, formula.find('>')), metrics) >
EvaluateNumber(formula.substr(formula.find('>') + 1), metrics);
} else if (formula.find('<') != std::string::npos) {
return EvaluateNumber(formula.substr(0, formula.find('<')), metrics) <
EvaluateNumber(formula.substr(formula.find('<') + 1), metrics);
} else {
return false;
}
}
double EvaluateNumber(std::string formula, Json::object metrics) {
if (formula.find('/') != std::string::npos) {
return EvaluateNumber(formula.substr(0, formula.find('/')), metrics) /
EvaluateNumber(formula.substr(formula.find('/') + 1), metrics);
} else if (formula.find('*') != std::string::npos) {
return EvaluateNumber(formula.substr(0, formula.find('*')), metrics) *
EvaluateNumber(formula.substr(formula.find('*') + 1), metrics);
} else if (formula.find('+') != std::string::npos) {
return EvaluateNumber(formula.substr(0, formula.find('+')), metrics) +
EvaluateNumber(formula.substr(formula.find('+') + 1), metrics);
} else if (formula.find('-') != std::string::npos) {
return EvaluateNumber(formula.substr(0, formula.find('-')), metrics) -
EvaluateNumber(formula.substr(formula.find('-') + 1), metrics);
} else if (std::isdigit(formula[0])) {
return std::stod(formula);
} else {
return metrics[formula].number_value();
}
}
Json::object GetBuildInfo() {
// The current version of default.json only uses the sdk version from the
// build parameters; so having this function only return that value saves
// time during initialization of the library
Json::object build_info;
build_info["version"] = {
{"sdk_int", Json(gamesdk::GetSystemPropAsInt("ro.build.version.sdk"))}};
return build_info;
}
} // namespace utils
} // namespace memory_advice