diff --git a/include/rtc/init.hpp b/include/rtc/init.hpp index 2299986..ef1dbf6 100644 --- a/include/rtc/init.hpp +++ b/include/rtc/init.hpp @@ -31,6 +31,7 @@ using init_token = std::shared_ptr; class Init { public: static init_token Token(); + static void Preload(); static void Cleanup(); ~Init(); @@ -43,6 +44,7 @@ private: static std::mutex Mutex; }; +inline void Preload() { Init::Preload(); } inline void Cleanup() { Init::Cleanup(); } } // namespace rtc diff --git a/src/certificate.hpp b/src/certificate.hpp index bd5095c..4c19dfc 100644 --- a/src/certificate.hpp +++ b/src/certificate.hpp @@ -61,7 +61,7 @@ string make_fingerprint(X509 *x509); using certificate_ptr = std::shared_ptr; using future_certificate_ptr = std::shared_future; -future_certificate_ptr make_certificate(string commonName); // cached +future_certificate_ptr make_certificate(string commonName = "libdatachannel"); // cached void CleanupCertificateCache(); diff --git a/src/init.cpp b/src/init.cpp index c3b37c7..cbc4198 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -55,6 +55,11 @@ init_token Init::Token() { return Global; } +void Init::Preload() { + Token(); // pre-init + make_certificate().wait(); // preload certificate +} + void Init::Cleanup() { Global.reset(); } Init::Init() { diff --git a/src/peerconnection.cpp b/src/peerconnection.cpp index a9de036..aed6933 100644 --- a/src/peerconnection.cpp +++ b/src/peerconnection.cpp @@ -39,7 +39,7 @@ using std::weak_ptr; PeerConnection::PeerConnection() : PeerConnection(Configuration()) {} PeerConnection::PeerConnection(const Configuration &config) - : mConfig(config), mCertificate(make_certificate("libdatachannel")), mState(State::New), + : mConfig(config), mCertificate(make_certificate()), mState(State::New), mGatheringState(GatheringState::New) { PLOG_VERBOSE << "Creating PeerConnection"; } diff --git a/test/benchmark.cpp b/test/benchmark.cpp index a6fa7ab..326aa67 100644 --- a/test/benchmark.cpp +++ b/test/benchmark.cpp @@ -183,10 +183,13 @@ size_t benchmark(milliseconds duration) { #ifdef BENCHMARK_MAIN int main(int argc, char **argv) { try { + rtc::Preload(); + size_t goodput = benchmark(30s); if (goodput == 0) throw runtime_error("No data received"); + rtc::Cleanup(); return 0; } catch (const std::exception &e) {