1f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac/* 2f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * Copyright (C) 2018 The Android Open Source Project 3f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * 4f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * Licensed under the Apache License, Version 2.0 (the "License"); 5f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * you may not use this file except in compliance with the License. 6f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * You may obtain a copy of the License at 7f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * 8f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * http://www.apache.org/licenses/LICENSE-2.0 9f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * 10f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * Unless required by applicable law or agreed to in writing, software 11f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * distributed under the License is distributed on an "AS IS" BASIS, 12f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * See the License for the specific language governing permissions and 14f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac * limitations under the License. 15f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac */ 16f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac#include <vector> 17f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac#include "benchmark/benchmark.h" 18f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac#include "FieldValue.h" 19f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac#include "HashableDimensionKey.h" 20f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac#include "logd/LogEvent.h" 2113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster#include "stats_log_util.h" 22f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac 23f520492279ce5c0a029c36b5251031a66f1413fbYangster-macnamespace android { 24f520492279ce5c0a029c36b5251031a66f1413fbYangster-macnamespace os { 25f520492279ce5c0a029c36b5251031a66f1413fbYangster-macnamespace statsd { 26f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac 27f520492279ce5c0a029c36b5251031a66f1413fbYangster-macusing std::vector; 28f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac 2913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangsterstatic void createLogEventAndMatcher(LogEvent* event, FieldMatcher *field_matcher) { 3013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster AttributionNodeInternal node; 3113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster node.set_uid(100); 3213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster node.set_tag("LOCATION"); 3313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 3413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster std::vector<AttributionNodeInternal> nodes = {node, node}; 3513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->write(nodes); 3613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->write(3.2f); 3713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->write("LOCATION"); 3813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->write((int64_t)990); 3913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster event->init(); 4013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 4113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster field_matcher->set_field(1); 4213fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster auto child = field_matcher->add_child(); 4313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster child->set_field(1); 4413fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster child->set_position(FIRST); 4513fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster child->add_child()->set_field(1); 4613fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 4713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 48f520492279ce5c0a029c36b5251031a66f1413fbYangster-macstatic void BM_FilterValue(benchmark::State& state) { 49f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac LogEvent event(1, 100000); 50f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac FieldMatcher field_matcher; 5113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster createLogEventAndMatcher(&event, &field_matcher); 52f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac 53f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac std::vector<Matcher> matchers; 54f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac translateFieldMatcher(field_matcher, &matchers); 55f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac 56f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac while (state.KeepRunning()) { 5713fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster HashableDimensionKey output; 5813fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster filterValues(matchers, event.getValues(), &output); 5913fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster } 6013fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster} 6113fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 62e06cfd777a501eca17f8dd796b32ad61002c5875Yangster-macBENCHMARK(BM_FilterValue); 6313fb7e4eeaf7aee408821afe7ee55a5167e49e59Yangster 64f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac} // namespace statsd 65f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac} // namespace os 66f520492279ce5c0a029c36b5251031a66f1413fbYangster-mac} // namespace android 67