1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
|
/* SPDX-License-Identifier: GPL-3.0-or-later
* Copyright © 2025-2026 The TokTok team.
*/
#include <benchmark/benchmark.h>
#include <cstddef>
#include <cstdint>
#include <cstring>
#include <vector>
#include "../toxcore/attributes.h"
#include "../toxcore/logger.h"
#include "../toxcore/mono_time.h"
#include "../toxcore/os_memory.h"
#include "av_test_support.hh"
#include "rtp.h"
namespace {
class RtpBench : public benchmark::Fixture {
public:
void SetUp(const ::benchmark::State &) override
{
const Memory *_Nonnull mem = os_memory();
log = logger_new(mem);
mono_time = mono_time_new(mem, nullptr, nullptr);
mock.store_last_packet_only = true;
session = rtp_new(log, RTP_TYPE_VIDEO, mono_time, RtpMock::send_packet, &mock, nullptr,
nullptr, nullptr, &mock, RtpMock::noop_cb);
}
void TearDown(const ::benchmark::State &) override
{
const Memory *mem = os_memory();
rtp_kill(log, session);
mono_time_free(mem, mono_time);
logger_kill(log);
}
Logger *_Nullable log = nullptr;
Mono_Time *_Nullable mono_time = nullptr;
RTPSession *_Nullable session = nullptr;
RtpMock mock;
};
BENCHMARK_DEFINE_F(RtpBench, SendData)(benchmark::State &state)
{
std::size_t data_size = static_cast<std::size_t>(state.range(0));
std::vector<std::uint8_t> data(data_size, 0xAA);
for (auto _ : state) {
rtp_send_data(log, session, data.data(), static_cast<std::uint32_t>(data.size()), false);
benchmark::DoNotOptimize(mock.captured_packets.back());
}
}
BENCHMARK_REGISTER_F(RtpBench, SendData)->Arg(100)->Arg(1000)->Arg(5000);
BENCHMARK_DEFINE_F(RtpBench, ReceivePacket)(benchmark::State &state)
{
std::size_t data_size = static_cast<std::size_t>(state.range(0));
std::vector<std::uint8_t> data(data_size, 0xAA);
rtp_send_data(log, session, data.data(), static_cast<std::uint32_t>(data.size()), false);
std::vector<std::uint8_t> packet = mock.captured_packets.back();
for (auto _ : state) {
rtp_receive_packet(session, packet.data(), packet.size());
}
}
BENCHMARK_REGISTER_F(RtpBench, ReceivePacket)->Arg(100)->Arg(1000);
} // namespace
BENCHMARK_MAIN();
|