File: rtp_bench.cc

package info (click to toggle)
libtoxcore 0.2.22-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 6,992 kB
  • sloc: ansic: 70,235; cpp: 14,770; sh: 1,576; python: 649; makefile: 255; perl: 39
file content (76 lines) | stat: -rw-r--r-- 2,236 bytes parent folder | download
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();