classtrace_resource:publicstd::pmr::memory_resource{public:explicittrace_resource(std::stringresource_name,std::pmr::memory_resource*upstream_resource=std::pmr::get_default_resource()):upstream{upstream_resource},name{std::move(resource_name)}{}[[nodiscard]]std::string_viewget_name()constnoexcept{returnstd::string_view(name);}[[nodiscard]]autoupstream_resource()const{returnupstream;}private:void*do_allocate(std::size_tbytes,std::size_talignment)override{auto*allocated=upstream->allocate(bytes,alignment);allocated_total+=bytes;ESP_LOGI(name.c_str(),"%s: %zu bytes allocated, %zu total bytes in use",name.c_str(),bytes,allocated_total);returnallocated;}voiddo_deallocate(void*ptr,std::size_tbytes,std::size_talignment)override{upstream->deallocate(ptr,bytes,alignment);ESP_LOGI(name.c_str(),"%s: %zu bytes deallocated, %zu total bytes in use",name.c_str(),bytes,allocated_total);}[[nodiscard]]booldo_is_equal(conststd::pmr::memory_resource&other)constnoexceptoverride{returnthis==&other;}size_tallocated_total{};std::pmr::memory_resource*upstream;std::stringname;};