void metrics::record_sample(const simple_wml::string_span& name, clock_t parsing_time, clock_t processing_time) { std::vector<sample>::iterator isample = std::lower_bound(samples_.begin(), samples_.end(), name,compare_samples_to_stringspan()); if(isample == samples_.end() || isample->name != name) { //protect against DoS with memory exhaustion if(samples_.size() > 30) { return; } int index = isample - samples_.begin(); simple_wml::string_span dup_name(name.duplicate()); sample new_sample; new_sample.name = dup_name; samples_.insert(isample, new_sample); isample = samples_.begin() + index; } isample->nsamples++; isample->parsing_time += parsing_time; isample->processing_time += processing_time; isample->max_parsing_time = std::max(parsing_time,isample->max_parsing_time); isample->max_processing_time = std::max(processing_time,isample->max_processing_time); }
void obs_context_data_setname(struct obs_context_data *context, const char *name) { pthread_mutex_lock(&context->rename_cache_mutex); if (context->name) da_push_back(context->rename_cache, &context->name); context->name = dup_name(name); pthread_mutex_unlock(&context->rename_cache_mutex); }
static inline bool obs_context_data_init_wrap( struct obs_context_data *context, obs_data_t *settings, const char *name) { assert(context); memset(context, 0, sizeof(*context)); pthread_mutex_init_value(&context->rename_cache_mutex); if (pthread_mutex_init(&context->rename_cache_mutex, NULL) < 0) return false; context->signals = signal_handler_create(); if (!context->signals) return false; context->procs = proc_handler_create(); if (!context->procs) return false; context->name = dup_name(name); context->settings = obs_data_newref(settings); return true; }