blob: 85c39b0535995cb495a5e8602657f43e4c1e3f53 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "garnet/lib/measure/argument_value.h"
#include "garnet/public/lib/fxl/logging.h"
namespace tracing {
namespace measure {
MeasureArgumentValue::MeasureArgumentValue(std::vector<ArgumentValueSpec> specs)
: specs_(std::move(specs)) {}
bool MeasureArgumentValue::RecordArgumentValue(
const trace::Record::Event& event, const ArgumentValueSpec& spec) {
for (const trace::Argument& argument : event.arguments) {
if ((argument.name() == spec.argument_name) &&
(argument.value().type() == trace::ArgumentType::kUint64)) {
AddResult(spec.common.id, argument.value().GetUint64());
return true;
}
}
return false;
}
bool MeasureArgumentValue::Process(const trace::Record::Event& event) {
for (const ArgumentValueSpec& spec : specs_) {
if (EventMatchesSpec(event, spec.event) &&
RecordArgumentValue(event, spec)) {
return true;
}
}
return false;
}
void MeasureArgumentValue::AddResult(uint64_t spec_id,
uint64_t argument_value) {
results_[spec_id].push_back(argument_value);
}
} // namespace measure
} // namespace tracing