blob: 37f0ab1d6d9c9c83483780e8618bc910413650ec [file] [log] [blame]
// Copyright 2019 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 "android/base/perflogger/WindowDeviationAnalyzer.h"
#include "android/base/JsonWriter.h"
#include <sstream>
using namespace android::base;
using namespace android::perflogger;
WindowDeviationAnalyzer::WindowDeviationAnalyzer(
MetricAggregate aggregate,
int runInfoQueryLimit,
int recentWindowSize,
const std::vector<MeanToleranceParams>& meanTolerances,
const std::vector<MedianToleranceParams>& medianTolerances)
: mAggregate(aggregate),
mRunInfoQueryLimit(runInfoQueryLimit),
mRecentWindowSize(recentWindowSize),
mMeanTolerances(meanTolerances),
mMedianTolerances(medianTolerances) {}
WindowDeviationAnalyzer::WindowDeviationAnalyzer(
const WindowDeviationAnalyzer& other)
: mAggregate(other.mAggregate),
mRunInfoQueryLimit(other.mRunInfoQueryLimit),
mRecentWindowSize(other.mRecentWindowSize),
mMeanTolerances(other.mMeanTolerances),
mMedianTolerances(other.mMedianTolerances) {}
void WindowDeviationAnalyzer::outputJson(JsonWriter* writerPtr) {
auto& writer = *writerPtr;
writer.beginObject();
writer.name("type").value("WindowDeviationAnalyzer");
switch (mAggregate) {
case MetricAggregate::Mean:
writer.name("metricAggregate").value("Mean");
break;
case MetricAggregate::Median:
writer.name("metricAggregate").value("Median");
break;
case MetricAggregate::Min:
writer.name("metricAggregate").value("Min");
break;
case MetricAggregate::Max:
writer.name("metricAggregate").value("Max");
break;
default:
writer.name("metricAggregate").value("Unknown");
}
writer.name("runInfoQueryLimit").valueAsStr(mRunInfoQueryLimit);
writer.name("recentWindowSize").valueAsStr(mRecentWindowSize);
writer.name("toleranceParams").beginArray();
{
for (const auto& param : mMeanTolerances) {
writer.beginObject();
writer.name("type").value("Mean");
writer.name("constTerm").valueAsStr(param.constTerm);
writer.name("meanCoeff").valueAsStr(param.meanCoeff);
writer.name("stddevCoeff").valueAsStr(param.stddevCoeff);
writer.endObject();
}
for (const auto& param : mMedianTolerances) {
writer.beginObject();
writer.name("type").value("Median");
writer.name("constTerm").valueAsStr(param.constTerm);
writer.name("medianCoeff").valueAsStr(param.medianCoeff);
writer.name("madCoeff").valueAsStr(param.madCoeff);
writer.endObject();
}
}
writer.endArray();
writer.endObject();
}