Prevent allocations in Vst3Logger::log_query_interface

String constants will be converted to `std::string` because it's not
constexpr yet, and that will allocate for longer strings. Since this
function only prints something when `YABRIDGE_DEBUG_LEVEL` is set to 2
or higher that seems like a waste.
This commit is contained in:
Robbert van der Helm
2021-05-31 18:07:19 +02:00
parent 2bf1c4c5eb
commit 5f4ffed90b
3 changed files with 12 additions and 4 deletions
+2 -2
View File
@@ -82,8 +82,8 @@ Versioning](https://semver.org/spec/v2.0.0.html).
- Fixed the _PG-8X_ VST2 plugin freezing in **REAPER** when loading the plugin. - Fixed the _PG-8X_ VST2 plugin freezing in **REAPER** when loading the plugin.
- Fixed _Voxengo_ VST2 plugins in **Renoise** freezing when loading a project or - Fixed _Voxengo_ VST2 plugins in **Renoise** freezing when loading a project or
when otherwise restoring plugin state. when otherwise restoring plugin state.
- Fixed logging traces in the VST2 audio processing functions causing - Fixed logging traces in the VST2 audio processing functions and VST3 query
allocations even when `YABRIDGE_DEBUG_LEVEL` is not set to 2. interfaces causing allocations even when `YABRIDGE_DEBUG_LEVEL` is not set to 2.
- Fixed builds on Wine 6.8 because of internal changes to Wine's `windows.h` - Fixed builds on Wine 6.8 because of internal changes to Wine's `windows.h`
implementation. implementation.
+1 -1
View File
@@ -54,7 +54,7 @@ std::string format_bstream(const YaBStream& stream) {
Vst3Logger::Vst3Logger(Logger& generic_logger) : logger(generic_logger) {} Vst3Logger::Vst3Logger(Logger& generic_logger) : logger(generic_logger) {}
void Vst3Logger::log_query_interface( void Vst3Logger::log_query_interface(
const std::string& where, const char* where,
tresult result, tresult result,
const std::optional<Steinberg::FUID>& uid) { const std::optional<Steinberg::FUID>& uid) {
if (logger.verbosity >= Logger::Verbosity::all_events) [[unlikely]] { if (logger.verbosity >= Logger::Verbosity::all_events) [[unlikely]] {
+9 -1
View File
@@ -18,6 +18,8 @@
#include <sstream> #include <sstream>
#include <boost/container/string.hpp>
#include "../serialization/vst3.h" #include "../serialization/vst3.h"
#include "common.h" #include "common.h"
@@ -41,8 +43,14 @@ class Vst3Logger {
* and queries for interfaces we do not implement depending on the verbosity * and queries for interfaces we do not implement depending on the verbosity
* level. In case we could not get a FUID (because of null pointers, for * level. In case we could not get a FUID (because of null pointers, for
* instance), `std::nullopt` should be passed. * instance), `std::nullopt` should be passed.
*
* NOTE: We're passing a `const char*` here instead of a `const
* std::string&` because that will still allocate for longer strings
* because `std::string` isn't constexpr yet. Most calls to this
* function won't print anything, so we should make sure that calling
* it doesn't add unnecessary overhead.
*/ */
void log_query_interface(const std::string& where, void log_query_interface(const char* where,
tresult result, tresult result,
const std::optional<Steinberg::FUID>& uid); const std::optional<Steinberg::FUID>& uid);