//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//

#include "ArmnnDriverImpl.hpp"
#include "../SystemPropertiesUtils.hpp"

#include <log/log.h>

namespace
{

const char *g_Float32PerformanceExecTimeName             = "ArmNN.float32Performance.execTime";
const char *g_Float32PerformancePowerUsageName           = "ArmNN.float32Performance.powerUsage";
const char *g_Quantized8PerformanceExecTimeName          = "ArmNN.quantized8Performance.execTime";
const char *g_Quantized8PerformancePowerUsageName        = "ArmNN.quantized8Performance.powerUsage";
const char *g_RelaxedFloat32toFloat16PerformanceExecTime = "ArmNN.relaxedFloat32toFloat16Performance.execTime";

} // anonymous namespace

namespace armnn_driver
{
namespace hal_1_1
{

Return<void> ArmnnDriverImpl::getCapabilities_1_1(const armnn::IRuntimePtr& runtime,
                                                  V1_1::IDevice::getCapabilities_1_1_cb cb)
{
    ALOGV("hal_1_1::ArmnnDriverImpl::getCapabilities()");

    V1_1::Capabilities capabilities;
    if (runtime)
    {
        capabilities.float32Performance.execTime =
            ParseSystemProperty(g_Float32PerformanceExecTimeName, .1f);

        capabilities.float32Performance.powerUsage =
            ParseSystemProperty(g_Float32PerformancePowerUsageName, .1f);

        capabilities.quantized8Performance.execTime =
            ParseSystemProperty(g_Quantized8PerformanceExecTimeName, .1f);

        capabilities.quantized8Performance.powerUsage =
            ParseSystemProperty(g_Quantized8PerformancePowerUsageName, .1f);

        capabilities.relaxedFloat32toFloat16Performance.execTime =
            ParseSystemProperty(g_RelaxedFloat32toFloat16PerformanceExecTime, .1f);

        cb(ErrorStatus::NONE, capabilities);
    }
    else
    {
        capabilities.float32Performance.execTime                 = 0;
        capabilities.float32Performance.powerUsage               = 0;
        capabilities.quantized8Performance.execTime              = 0;
        capabilities.quantized8Performance.powerUsage            = 0;
        capabilities.relaxedFloat32toFloat16Performance.execTime = 0;

        cb(ErrorStatus::DEVICE_UNAVAILABLE, capabilities);
    }

    return Void();
}

} // namespace hal_1_1
} // namespace armnn_driver