| 67 | constexpr size_t kMaxTraceTriggerAttributeLength = 96; |
| 68 | |
| 69 | std::string getRenderRequestAttributeNamesTrigger(const RenderRequest& request, const AttributeIds& attributeIds) { |
| 70 | std::set<std::string> names; |
| 71 | struct Visitor { |
| 72 | const AttributeIds& ids; |
| 73 | std::set<std::string>& out; |
| 74 | void visit(RenderRequestEntries::EntryBase& entry) { |
| 75 | if (entry.getType() == RenderRequestEntryType::SetElementAttribute) { |
| 76 | auto& setAttr = static_cast<RenderRequestEntries::SetElementAttribute&>(entry); |
| 77 | out.insert(ids.getNameForId(setAttr.getAttributeId()).slowToString()); |
| 78 | } |
| 79 | } |
| 80 | } visitor{attributeIds, names}; |
| 81 | request.visitEntries(visitor); |
| 82 | |
| 83 | if (names.empty()) { |
| 84 | return "render_request"; |
| 85 | } |
| 86 | std::string trigger = "render_request|"; |
| 87 | size_t count = 0; |
| 88 | size_t length = trigger.size(); |
| 89 | for (const auto& name : names) { |
| 90 | if (count >= kMaxAttributeNamesInTrace || |
| 91 | (length + name.size() + (count ? 1 : 0) > kMaxTraceTriggerAttributeLength)) { |
| 92 | if (count > 0) { |
| 93 | trigger += ",..."; |
| 94 | } |
| 95 | break; |
| 96 | } |
| 97 | if (count != 0) { |
| 98 | trigger += ","; |
| 99 | length += 1; |
| 100 | } |
| 101 | trigger += name; |
| 102 | length += name.size(); |
| 103 | ++count; |
| 104 | } |
| 105 | return trigger; |
| 106 | } |
| 107 | #endif |
| 108 | |
| 109 | } // namespace |
no test coverage detected