blob: bdccfe40dc81f1d07f26211400d93c6550e673a3 [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 "src/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