protobuf/benches/proto.rs (89 lines of code) (raw):

use aliyun_log_sdk_protobuf::{Log, LogGroup, LogGroupList}; use criterion::{criterion_group, criterion_main, Criterion}; use std::hint::black_box; fn prepare_log_group(log_count: usize) -> LogGroup { let mut log_group = LogGroup::new(); for _ in 0..log_count { let mut log = Log::new(); log.set_time(1694253376); log.add_content_kv("Owner".to_string(), "1654218965343050".to_string()); log.add_content_kv( "ProjectName".to_string(), ":cloudlens-test-cn-beijing-stg".to_string(), ); log.add_content_kv("GroupCount".to_string(), "778".to_string()); log.add_content_kv("NetFlow".to_string(), "0".to_string()); log.add_content_kv("CallerType".to_string(), "Sts".to_string()); log.add_content_kv("OutFlow".to_string(), "31145".to_string()); log.add_content_kv( "Cursor".to_string(), "MTc0NDM0MDIzOTQzNTM0NzM2Mg==".to_string(), ); log.add_content_kv("Source".to_string(), "100.68.147.135".to_string()); log.add_content_kv("InFlow".to_string(), "0".to_string()); log.add_content_kv("RoleSessionName".to_string(), "sls_dispatch".to_string()); log.add_content_kv("APIVersion".to_string(), "0.6.0".to_string()); log.add_content_kv("NetworkType".to_string(), "intranet".to_string()); log.add_content_kv("UserAgent".to_string(), "sls-cpp-sdk v0.6.1".to_string()); log.add_content_kv("Status".to_string(), "200".to_string()); log.add_content_kv( "RequestId".to_string(), "67F88F0A0CA59FE9DD227CAE".to_string(), ); log.add_content_kv("LogStore".to_string(), "oss-access-log".to_string()); log.add_content_kv("ProjectId".to_string(), "38760".to_string()); log.add_content_kv("__THREAD__".to_string(), "57304".to_string()); log.add_content_kv("Method".to_string(), "PullData".to_string()); log.add_content_kv("Acl".to_string(), "0".to_string()); log.add_content_kv("ClientIP".to_string(), "100.68.147.135".to_string()); log.add_content_kv("RoleId".to_string(), "310438458647495662".to_string()); log.add_content_kv("CompressType".to_string(), "zstd".to_string()); log.add_content_kv("Latency".to_string(), "6486".to_string()); log.add_content_kv("Role".to_string(), "aliyunlogdispatchrole".to_string()); log.add_content_kv("RawOutflow".to_string(), "1553725".to_string()); log.add_content_kv( "NextCursor".to_string(), "MTc0NDM0MDIzOTQzNTM0ODE0MA==".to_string(), ); log.add_content_kv("UserId".to_string(), "248".to_string()); log.add_content_kv( "AccessKeyId".to_string(), "STS.NWMLZ5XvntWPyLd8rjkXzQgvA".to_string(), ); log.add_content_kv("Shard".to_string(), "115".to_string()); log.add_content_kv("Vip".to_string(), "100.67.27.217".to_string()); log.add_content_kv("AliUid".to_string(), "1418436495972562".to_string()); log.add_content_kv("ExOutFlow".to_string(), "0".to_string()); log.add_content_kv("RequestType".to_string(), "read".to_string()); log.add_content_kv("microtime".to_string(), "1744342794704865".to_string()); log_group.add_log(log); } log_group.add_log_tag_kv("__hostname__", "hellow"); log_group.add_log_tag_kv("__source__", "127.0.0.1"); log_group } fn encode(log_group: &LogGroup) -> Vec<u8> { #[allow(unused_must_use)] log_group.encode().expect("Cannot encode!") } fn decode(encoded_log_group: &[u8]) { LogGroupList::decode(encoded_log_group).expect("Cannot decode!"); } fn get_log_group_list_bytes(encoded_log_group: &[u8]) -> Vec<u8> { let mut buffer = Vec::new(); prost::encoding::encode_key(1, prost::encoding::WireType::LengthDelimited, &mut buffer); prost::encoding::encode_length_delimiter(encoded_log_group.len(), &mut buffer) .expect("Cannot encode!"); buffer.extend_from_slice(encoded_log_group); buffer } fn criterion_benchmark(c: &mut Criterion) { let log_group = prepare_log_group(100); c.bench_function("encode", |b| b.iter(|| encode(black_box(&log_group)))); let encoded = encode(&log_group); println!("{}", encoded.len()); let log_group_bytes = get_log_group_list_bytes(&encoded); c.bench_function("decode", |b| b.iter(|| decode(black_box(&log_group_bytes)))); } criterion_group!(benches, criterion_benchmark); criterion_main!(benches);