Skip to content

Commit d156dc2

Browse files
jckingcopybara-github
authored andcommitted
Avoid std::invoke and just directly call visitors to avoid ugly frames in pprof
PiperOrigin-RevId: 739254948
1 parent 3f4e486 commit d156dc2

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

common/internal/byte_string.h

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -307,16 +307,14 @@ ByteString final {
307307
void HashValue(absl::HashState state) const;
308308

309309
template <typename Visitor>
310-
std::common_type_t<std::invoke_result_t<Visitor, absl::string_view>,
311-
std::invoke_result_t<Visitor, const absl::Cord&>>
312-
Visit(Visitor&& visitor) const {
310+
decltype(auto) Visit(Visitor&& visitor) const {
313311
switch (GetKind()) {
314312
case ByteStringKind::kSmall:
315-
return std::invoke(std::forward<Visitor>(visitor), GetSmall());
313+
return std::forward<Visitor>(visitor)(GetSmall());
316314
case ByteStringKind::kMedium:
317-
return std::invoke(std::forward<Visitor>(visitor), GetMedium());
315+
return std::forward<Visitor>(visitor)(GetMedium());
318316
case ByteStringKind::kLarge:
319-
return std::invoke(std::forward<Visitor>(visitor), GetLarge());
317+
return std::forward<Visitor>(visitor)(GetLarge());
320318
}
321319
}
322320

@@ -664,15 +662,13 @@ class ABSL_ATTRIBUTE_TRIVIAL_ABI ByteStringView final {
664662
void HashValue(absl::HashState state) const;
665663

666664
template <typename Visitor>
667-
std::common_type_t<std::invoke_result_t<Visitor, absl::string_view>,
668-
std::invoke_result_t<Visitor, const absl::Cord&>>
669-
Visit(Visitor&& visitor) const {
665+
decltype(auto) Visit(Visitor&& visitor) const {
670666
switch (GetKind()) {
671667
case ByteStringViewKind::kString:
672-
return std::invoke(std::forward<Visitor>(visitor), GetString());
668+
return std::forward<Visitor>(visitor)(GetString());
673669
case ByteStringViewKind::kCord:
674-
return std::invoke(std::forward<Visitor>(visitor),
675-
static_cast<const absl::Cord&>(GetSubcord()));
670+
return std::forward<Visitor>(visitor)(
671+
static_cast<const absl::Cord&>(GetSubcord()));
676672
}
677673
}
678674

0 commit comments

Comments
 (0)