Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added slice equality when static fastpath. #18910

Merged
merged 1 commit into from
May 10, 2019

Conversation

arjunroy
Copy link
Contributor

@arjunroy arjunroy commented Apr 29, 2019

This change is Reviewable

@arjunroy arjunroy added the release notes: no Indicates if PR should not be in release notes label Apr 29, 2019
@arjunroy
Copy link
Contributor Author

name old time/op new time/op delta
BM_HpackEncoderInitDestroy 371ns ± 0% 372ns ± 0% +0.50% (p=0.000 n=16+18)
BM_HpackEncoderEncodeDeadline [framing_bytes/iter:9 header_bytes/iter:6 ] 168ns ± 1% 168ns ± 0% -0.12% (p=0.022 n=19+18)
BM_HpackEncoderEncodeHeader/0/16384 [framing_bytes/iter:9 header_bytes/iter:1 ] 60.4ns ± 2% 60.2ns ± 1% -0.28% (p=0.043 n=20+19)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<31, false>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:1 ] 60.7ns ± 2% 60.2ns ± 2% -0.72% (p=0.007 n=19+20)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<100, false>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:1 ] 60.0ns ± 0% 59.8ns ± 0% -0.26% (p=0.002 n=6+6)
BM_HpackEncoderEncodeHeader/0/16384 [framing_bytes/iter:9 header_bytes/iter:9 ] 102ns ± 1% 102ns ± 1% +0.39% (p=0.009 n=20+20)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<1, false>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:12 ] 126ns ± 1% 126ns ± 0% -0.37% (p=0.005 n=20+20)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<31, false>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:46 ] 248ns ± 1% 253ns ± 1% +2.16% (p=0.000 n=19+18)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<100, false>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:120 ] 484ns ± 0% 486ns ± 0% +0.55% (p=0.000 n=18+19)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<31, true>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:42 ] 120ns ± 0% 121ns ± 0% +0.83% (p=0.000 n=18+19)
BM_HpackEncoderEncodeHeader<SingleNonInternedBinaryElem<100, true>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:111 ] 120ns ± 0% 121ns ± 1% +0.28% (p=0.000 n=19+19)
BM_HpackEncoderEncodeHeader/0/1 [framing_bytes/iter:81 header_bytes/iter:9 ] 397ns ± 1% 399ns ± 1% +0.41% (p=0.004 n=19+20)
BM_HpackEncoderEncodeHeader/0/16384 [framing_bytes/iter:9 header_bytes/iter:16.0001 ] 324ns ± 2% 321ns ± 2% -0.71% (p=0.035 n=19+19)
BM_HpackEncoderEncodeHeader/0/16384 [framing_bytes/iter:9 header_bytes/iter:3 ] 94.8ns ± 0% 94.4ns ± 0% -0.44% (p=0.000 n=18+13)
BM_HpackParserInitDestroy 6.22µs ± 1% 5.73µs ± 1% -7.89% (p=0.000 n=20+20)
BM_HpackParserParseHeader<EmptyBatch, UnrefHeader> 10.0ns ± 0% 10.0ns ± 0% -0.09% (p=0.000 n=18+16)
BM_HpackParserParseHeader<IndexedSingleStaticElem, UnrefHeader> 27.1ns ± 0% 27.2ns ± 3% +0.09% (p=0.050 n=16+17)
BM_HpackParserParseHeader<AddIndexedSingleStaticElem, UnrefHeader> 190ns ± 1% 180ns ± 0% -4.82% (p=0.000 n=20+20)
BM_HpackParserParseHeader<KeyIndexedSingleStaticElem, UnrefHeader> 261ns ± 2% 246ns ± 2% -5.69% (p=0.000 n=20+19)
BM_HpackParserParseHeader<AddIndexedSingleInternedElem, UnrefHeader> 363ns ± 2% 334ns ± 4% -7.92% (p=0.000 n=20+19)
BM_HpackParserParseHeader<KeyIndexedSingleInternedElem, UnrefHeader> 269ns ± 1% 255ns ± 1% -5.31% (p=0.000 n=19+18)
BM_HpackParserParseHeader<NonIndexedElem, UnrefHeader> 224ns ± 1% 209ns ± 1% -6.60% (p=0.000 n=18+18)
BM_HpackParserParseHeader<NonIndexedBinaryElem<1, false>, UnrefHeader> 242ns ± 2% 227ns ± 2% -5.97% (p=0.000 n=19+19)
BM_HpackParserParseHeader<NonIndexedBinaryElem<3, false>, UnrefHeader> 265ns ± 3% 250ns ± 2% -5.47% (p=0.000 n=19+19)
BM_HpackParserParseHeader<NonIndexedBinaryElem<10, false>, UnrefHeader> 367ns ± 2% 354ns ± 1% -3.67% (p=0.000 n=19+19)
BM_HpackParserParseHeader<NonIndexedBinaryElem<31, false>, UnrefHeader> 685ns ± 1% 671ns ± 2% -2.10% (p=0.000 n=20+20)
BM_HpackParserParseHeader<NonIndexedBinaryElem<100, false>, UnrefHeader> 1.75µs ± 1% 1.70µs ± 2% -2.71% (p=0.000 n=20+20)
BM_HpackParserParseHeader<NonIndexedBinaryElem<1, true>, UnrefHeader> 228ns ± 3% 213ns ± 1% -6.86% (p=0.000 n=20+18)
BM_HpackParserParseHeader<NonIndexedBinaryElem<3, true>, UnrefHeader> 228ns ± 3% 213ns ± 1% -6.23% (p=0.000 n=20+18)
BM_HpackParserParseHeader<NonIndexedBinaryElem<10, true>, UnrefHeader> 229ns ± 3% 212ns ± 2% -7.10% (p=0.000 n=20+19)
BM_HpackParserParseHeader<NonIndexedBinaryElem<31, true>, UnrefHeader> 236ns ± 2% 223ns ± 2% -5.69% (p=0.000 n=19+19)
BM_HpackParserParseHeader<NonIndexedBinaryElem<100, true>, UnrefHeader> 242ns ± 5% 227ns ± 4% -6.03% (p=0.000 n=20+20)
BM_HpackParserParseHeader<RepresentativeClientInitialMetadata, UnrefHeader> 234ns ± 0% 224ns ± 1% -4.30% (p=0.000 n=16+19)
BM_HpackParserParseHeader<MoreRepresentativeClientInitialMetadata, UnrefHeader> 890ns ± 1% 856ns ± 1% -3.83% (p=0.000 n=20+18)
BM_HpackParserParseHeader<RepresentativeServerInitialMetadata, UnrefHeader> 55.7ns ± 0% 55.0ns ± 1% -1.23% (p=0.000 n=17+18)
BM_HpackParserParseHeader<RepresentativeServerTrailingMetadata, UnrefHeader> 62.4ns ± 0% 62.5ns ± 0% +0.13% (p=0.000 n=18+17)
BM_HpackParserParseHeader<RepresentativeClientInitialMetadata, OnInitialHeader> 537ns ± 0% 526ns ± 0% -2.01% (p=0.000 n=19+17)
BM_HpackParserParseHeader<MoreRepresentativeClientInitialMetadata, OnInitialHeader> 1.30µs ± 1% 1.24µs ± 2% -3.97% (p=0.000 n=20+20)
BM_HpackParserParseHeader<SameDeadline, OnHeaderTimeout> 129ns ± 1% 128ns ± 1% -1.31% (p=0.000 n=20+19)
BM_HpackEncoderEncodeHeader<SingleInternedBinaryElem<100, false>>/0/16384 [framing_bytes/iter:9 header_bytes/iter:1.00001 ] 60.6ns ± 0% 60.5ns ± 1% -0.27% (p=0.013 n=10+12)

@arjunroy
Copy link
Contributor Author

name old time/op new time/op delta
BM_SliceFromCopied 46.6ns ± 1% 47.1ns ± 1% +1.03% (p=0.000 n=17+20)
BM_SliceReIntern 102ns ± 4% 95ns ± 5% -7.24% (p=0.000 n=20+20)
BM_SliceInternStaticMetadata 4.92ns ± 1% 4.94ns ± 2% +0.48% (p=0.002 n=20+20)
BM_SliceInternEqualToStaticMetadata 23.5ns ± 3% 18.1ns ± 7% -23.00% (p=0.000 n=20+19)
BM_MetadataFromInternedSlicesAlreadyInIndex 65.8ns ± 0% 66.0ns ± 0% +0.22% (p=0.000 n=12+16)
BM_MetadataFromInternedKey 48.9ns ± 0% 49.0ns ± 0% +0.20% (p=0.000 n=16+15)
BM_MetadataFromNonInternedSlicesWithBackingStore 7.30ns ± 1% 7.14ns ± 0% -2.19% (p=0.000 n=20+17)
BM_MetadataFromInternedSlicesWithBackingStore 80.1ns ± 0% 79.3ns ± 1% -0.91% (p=0.000 n=19+18)
BM_MetadataFromInternedKeyWithBackingStore 8.34ns ± 0% 8.36ns ± 0% +0.20% (p=0.000 n=17+19)
BM_MetadataFromStaticMetadataStrings 13.2ns ± 0% 13.6ns ± 0% +3.11% (p=0.000 n=18+16)
BM_MetadataRefUnrefExternal 5.04ns ± 1% 4.91ns ± 0% -2.71% (p=0.000 n=19+16)

@arjunroy
Copy link
Contributor Author

name old time/op new time/op delta
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/1/0 [polls/iter:3.00009 ] 24.4µs ± 1% 23.9µs ± 1% -2.03% (p=0.016 n=4+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/8/0 [polls/iter:3.00014 ] 24.7µs ± 2% 24.2µs ± 2% -1.71% (p=0.048 n=7+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/8 [polls/iter:3.0001 ] 24.4µs ± 1% 24.0µs ± 1% -1.39% (p=0.002 n=6+6)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:3.00015 ] 30.0µs ± 2% 29.3µs ± 0% -2.18% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/32768/32768 [polls/iter:3.00011 ] 51.2µs ± 1% 50.4µs ± 1% -1.63% (p=0.004 n=6+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/8/8 [polls/iter:3.0001 ] 24.0µs ± 0% 23.5µs ± 1% -1.93% (p=0.006 n=7+4)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/4096 [polls/iter:3.00015 ] 26.0µs ± 1% 25.4µs ± 0% -1.98% (p=0.036 n=5+3)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:3.0001 ] 28.8µs ± 1% 28.3µs ± 1% -1.82% (p=0.024 n=3+6)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/0/0 [polls/iter:0 ] 7.03µs ± 4% 6.84µs ± 2% -2.63% (p=0.000 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/1/0 [polls/iter:0 ] 7.23µs ± 5% 7.06µs ± 5% -2.44% (p=0.003 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/1/1 [polls/iter:0 ] 7.22µs ± 4% 7.11µs ± 3% -1.58% (p=0.003 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/8/0 [polls/iter:0 ] 7.14µs ± 5% 7.00µs ± 2% -1.96% (p=0.001 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/0/8 [polls/iter:0 ] 7.05µs ± 3% 7.00µs ± 2% -0.73% (p=0.042 n=18+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/8/8 [polls/iter:0 ] 7.19µs ± 5% 7.11µs ± 4% -1.20% (p=0.041 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/64/0 [polls/iter:0 ] 7.38µs ± 4% 7.13µs ± 4% -3.35% (p=0.000 n=20+18)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/0/64 [polls/iter:0 ] 7.15µs ± 5% 7.04µs ± 1% -1.67% (p=0.042 n=20+17)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/4096/0 [polls/iter:0 ] 8.50µs ± 3% 8.39µs ± 5% -1.25% (p=0.015 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:0 ] 9.67µs ± 4% 9.53µs ± 3% -1.48% (p=0.007 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/0/32768 [polls/iter:0 ] 16.5µs ± 2% 16.4µs ± 2% -0.64% (p=0.040 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/16777216/16777216 [polls/iter:0 ] 27.3ms ± 1% 27.5ms ± 2% +0.70% (p=0.005 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/1/0 [polls/iter:0 ] 6.95µs ± 3% 6.90µs ± 2% -0.74% (p=0.026 n=17+17)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/0/1 [polls/iter:0 ] 6.94µs ± 4% 6.89µs ± 3% -0.66% (p=0.020 n=18+17)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/8/8 [polls/iter:0 ] 7.10µs ± 3% 7.03µs ± 2% -1.04% (p=0.009 n=20+18)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/64/0 [polls/iter:0 ] 7.11µs ± 2% 6.99µs ± 1% -1.77% (p=0.000 n=19+19)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/512/0 [polls/iter:0 ] 7.22µs ± 1% 7.17µs ± 2% -0.65% (p=0.008 n=18+18)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/512/512 [polls/iter:0 ] 7.48µs ± 3% 7.40µs ± 1% -1.05% (p=0.000 n=18+16)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/4096/0 [polls/iter:0 ] 8.34µs ± 3% 8.16µs ± 1% -2.16% (p=0.000 n=20+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:0 ] 9.43µs ± 2% 9.34µs ± 1% -0.99% (p=0.000 n=20+19)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/32768/0 [polls/iter:0 ] 16.6µs ± 2% 16.3µs ± 1% -1.34% (p=0.000 n=20+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/32768/32768 [polls/iter:0 ] 25.6µs ± 1% 25.5µs ± 1% -0.23% (p=0.033 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/262144/0 [polls/iter:0 ] 80.8µs ± 1% 80.2µs ± 2% -0.73% (p=0.038 n=20+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/2097152/0 [polls/iter:0 ] 907µs ± 1% 910µs ± 1% +0.28% (p=0.047 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/0/2097152 [polls/iter:0 ] 651µs ± 1% 653µs ± 1% +0.25% (p=0.044 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/134217728/0 [polls/iter:0 ] 148ms ± 3% 150ms ± 3% +1.63% (p=0.003 n=19+20)
BM_UnaryPingPong<InProcess, Client_AddMetadata<RandomBinaryMetadata<31>, 2>, NoOpMutator>/0/0 [polls/iter:0 ] 8.77µs ± 3% 8.69µs ± 3% -0.95% (p=0.024 n=18+19)
BM_UnaryPingPong<InProcess, Client_AddMetadata<RandomBinaryMetadata<100>, 2>, NoOpMutator>/0/0 [polls/iter:0 ] 9.02µs ± 3% 8.91µs ± 4% -1.28% (p=0.013 n=19+20)
BM_UnaryPingPong<InProcess, NoOpMutator, Server_AddInitialMetadata<RandomBinaryMetadata<10>, 1>>/0/0 [polls/iter:0 ] 8.18µs ± 4% 7.92µs ± 4% -3.26% (p=0.000 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, Server_AddInitialMetadata<RandomBinaryMetadata<31>, 1>>/0/0 [polls/iter:0 ] 8.27µs ± 4% 8.04µs ± 5% -2.78% (p=0.002 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, Server_AddInitialMetadata<RandomBinaryMetadata<100>, 1>>/0/0 [polls/iter:0 ] 8.37µs ± 5% 8.15µs ± 4% -2.62% (p=0.001 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, Server_AddInitialMetadata<RandomAsciiMetadata<10>, 1>>/0/0 [polls/iter:0 ] 8.22µs ± 4% 8.01µs ± 4% -2.59% (p=0.001 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, Server_AddInitialMetadata<RandomAsciiMetadata<100>, 1>>/0/0 [polls/iter:0 ] 8.37µs ± 3% 8.24µs ± 3% -1.56% (p=0.046 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, Server_AddInitialMetadata<RandomAsciiMetadata<10>, 100>>/0/0 [polls/iter:0 ] 89.8µs ± 3% 87.1µs ± 4% -3.00% (p=0.000 n=18+18)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/1/0 [polls/iter:3.00012 ] 24.4µs ± 1% 23.9µs ± 0% -1.90% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/1 [polls/iter:3.0001 ] 24.3µs ± 1% 23.9µs ± 0% -1.96% (p=0.036 n=3+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/512 [polls/iter:3.00009 ] 25.4µs ± 1% 24.9µs ± 0% -2.07% (p=0.010 n=4+6)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/1/1 [polls/iter:3.0001 ] 23.8µs ± 1% 23.4µs ± 1% -1.73% (p=0.002 n=6+6)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/64/64 [polls/iter:3.00011 ] 25.0µs ± 1% 24.5µs ± 1% -2.03% (p=0.029 n=4+4)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/4096/0 [polls/iter:3.00013 ] 26.4µs ± 2% 25.5µs ± 1% -3.44% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/64/64 [polls/iter:3.00011 ] 26.0µs ± 3% 25.5µs ± 1% -1.93% (p=0.030 n=6+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/8/0 [polls/iter:3.0001 ] 23.6µs ± 1% 23.0µs ± 0% -2.41% (p=0.003 n=7+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/8 [polls/iter:3.00012 ] 23.5µs ± 1% 23.2µs ± 1% -1.57% (p=0.005 n=7+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/32768 [polls/iter:3.0001 ] 36.5µs ± 0% 35.9µs ± 1% -1.43% (p=0.036 n=3+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/512/512 [polls/iter:3.00013 ] 26.0µs ± 2% 25.4µs ± 1% -2.36% (p=0.004 n=6+6)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/64/64 [polls/iter:3.00013 ] 26.1µs ± 1% 25.5µs ± 1% -2.03% (p=0.016 n=4+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/1/0 [polls/iter:3.00012 ] 23.6µs ± 1% 23.1µs ± 1% -1.95% (p=0.029 n=4+4)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/64 [polls/iter:3.0001 ] 24.0µs ± 1% 23.7µs ± 0% -1.21% (p=0.036 n=3+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/32768 [polls/iter:3.00018 ] 35.8µs ± 1% 35.0µs ± 0% -2.34% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/32768/32768 [polls/iter:3.00018 ] 51.2µs ± 1% 50.5µs ± 0% -1.41% (p=0.015 n=6+6)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/64/0 [polls/iter:3.00012 ] 24.1µs ± 1% 23.7µs ± 1% -1.65% (p=0.016 n=4+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/64 [polls/iter:3.00009 ] 24.9µs ± 1% 24.5µs ± 1% -1.56% (p=0.029 n=4+4)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/0 [polls/iter:3.0001 ] 23.4µs ± 2% 22.4µs ± 1% -4.46% (p=0.024 n=3+6)

name old allocs/op new allocs/op delta

name old peak-mem(Bytes)/op new peak-mem(Bytes)/op delta

name old speed new speed delta
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/1/0 [polls/iter:3.00009 ] 41.0kB/s ± 0% 42.0kB/s ± 0% +2.44% (p=0.016 n=4+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/8 [polls/iter:3.0001 ] 328kB/s ± 1% 333kB/s ± 1% +1.32% (p=0.006 n=6+6)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:3.00015 ] 273MB/s ± 2% 280MB/s ± 0% +2.21% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/32768/32768 [polls/iter:3.00011 ] 1.28GB/s ± 1% 1.30GB/s ± 1% +1.65% (p=0.004 n=6+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/8/8 [polls/iter:3.0001 ] 668kB/s ± 0% 681kB/s ± 1% +1.97% (p=0.006 n=7+4)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/4096 [polls/iter:3.00015 ] 158MB/s ± 1% 161MB/s ± 0% +2.01% (p=0.036 n=5+3)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:3.0001 ] 284MB/s ± 1% 290MB/s ± 1% +1.85% (p=0.024 n=3+6)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/1/0 [polls/iter:0 ] 138kB/s ± 4% 142kB/s ± 5% +2.50% (p=0.003 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/1/1 [polls/iter:0 ] 277kB/s ± 4% 281kB/s ± 3% +1.50% (p=0.006 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/8/0 [polls/iter:0 ] 1.12MB/s ± 5% 1.14MB/s ± 2% +1.96% (p=0.001 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/0/8 [polls/iter:0 ] 1.13MB/s ± 3% 1.14MB/s ± 2% +0.93% (p=0.028 n=19+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/8/8 [polls/iter:0 ] 2.22MB/s ± 5% 2.25MB/s ± 3% +1.19% (p=0.041 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/64/0 [polls/iter:0 ] 8.68MB/s ± 4% 8.98MB/s ± 4% +3.42% (p=0.000 n=20+18)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/0/64 [polls/iter:0 ] 8.95MB/s ± 5% 9.10MB/s ± 1% +1.64% (p=0.041 n=20+17)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/4096/0 [polls/iter:0 ] 482MB/s ± 3% 488MB/s ± 5% +1.29% (p=0.015 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:0 ] 847MB/s ± 4% 860MB/s ± 3% +1.48% (p=0.007 n=20+19)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/0/32768 [polls/iter:0 ] 1.98GB/s ± 2% 1.99GB/s ± 2% +0.64% (p=0.040 n=20+20)
BM_UnaryPingPong<InProcess, NoOpMutator, NoOpMutator>/16777216/16777216 [polls/iter:0 ] 1.23GB/s ± 1% 1.22GB/s ± 2% -0.70% (p=0.005 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/8/8 [polls/iter:0 ] 2.25MB/s ± 3% 2.28MB/s ± 2% +1.04% (p=0.009 n=20+18)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/64/0 [polls/iter:0 ] 9.00MB/s ± 2% 9.16MB/s ± 1% +1.79% (p=0.000 n=19+19)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/512/0 [polls/iter:0 ] 70.9MB/s ± 1% 71.4MB/s ± 2% +0.66% (p=0.008 n=18+18)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/512/512 [polls/iter:0 ] 137MB/s ± 3% 138MB/s ± 1% +1.05% (p=0.000 n=18+16)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/4096/0 [polls/iter:0 ] 491MB/s ± 3% 502MB/s ± 1% +2.20% (p=0.000 n=20+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/4096/4096 [polls/iter:0 ] 869MB/s ± 2% 877MB/s ± 1% +0.99% (p=0.000 n=20+19)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/32768/0 [polls/iter:0 ] 1.98GB/s ± 2% 2.01GB/s ± 1% +1.35% (p=0.000 n=20+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/32768/32768 [polls/iter:0 ] 2.56GB/s ± 1% 2.57GB/s ± 1% +0.23% (p=0.033 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/262144/0 [polls/iter:0 ] 3.24GB/s ± 1% 3.27GB/s ± 2% +0.74% (p=0.038 n=20+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/2097152/0 [polls/iter:0 ] 2.31GB/s ± 1% 2.31GB/s ± 1% -0.28% (p=0.047 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/0/2097152 [polls/iter:0 ] 3.22GB/s ± 1% 3.21GB/s ± 1% -0.24% (p=0.044 n=19+20)
BM_UnaryPingPong<MinInProcess, NoOpMutator, NoOpMutator>/134217728/0 [polls/iter:0 ] 909MB/s ± 3% 895MB/s ± 3% -1.59% (p=0.003 n=19+20)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/1/0 [polls/iter:3.00012 ] 41.0kB/s ± 0% 42.0kB/s ± 0% +2.44% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/1 [polls/iter:3.0001 ] 41.0kB/s ± 0% 42.0kB/s ± 0% +2.44% (p=0.036 n=3+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/512 [polls/iter:3.00009 ] 20.1MB/s ± 1% 20.6MB/s ± 0% +2.11% (p=0.010 n=4+6)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/1/1 [polls/iter:3.0001 ] 84.2kB/s ± 1% 85.5kB/s ± 1% +1.58% (p=0.022 n=6+6)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/64/64 [polls/iter:3.00011 ] 5.12MB/s ± 1% 5.23MB/s ± 1% +2.07% (p=0.029 n=4+4)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/4096/0 [polls/iter:3.00013 ] 155MB/s ± 2% 161MB/s ± 1% +3.54% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/64/64 [polls/iter:3.00011 ] 4.92MB/s ± 3% 5.02MB/s ± 1% +1.95% (p=0.030 n=6+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/8/0 [polls/iter:3.0001 ] 339kB/s ± 1% 347kB/s ± 0% +2.52% (p=0.003 n=7+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/8 [polls/iter:3.00012 ] 340kB/s ± 1% 345kB/s ± 1% +1.57% (p=0.008 n=7+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/32768 [polls/iter:3.0001 ] 899MB/s ± 0% 912MB/s ± 1% +1.45% (p=0.036 n=3+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/512/512 [polls/iter:3.00013 ] 39.3MB/s ± 2% 40.3MB/s ± 1% +2.40% (p=0.004 n=6+6)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/64/64 [polls/iter:3.00013 ] 4.91MB/s ± 1% 5.01MB/s ± 1% +2.06% (p=0.016 n=4+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/64 [polls/iter:3.0001 ] 2.67MB/s ± 1% 2.70MB/s ± 0% +1.22% (p=0.036 n=3+5)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/0/32768 [polls/iter:3.00018 ] 915MB/s ± 1% 937MB/s ± 0% +2.39% (p=0.036 n=5+3)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/32768/32768 [polls/iter:3.00018 ] 1.28GB/s ± 2% 1.30GB/s ± 0% +1.42% (p=0.015 n=6+6)
BM_UnaryPingPong<MinTCP, NoOpMutator, NoOpMutator>/64/0 [polls/iter:3.00012 ] 2.65MB/s ± 1% 2.70MB/s ± 1% +1.68% (p=0.016 n=4+5)
BM_UnaryPingPong<TCP, NoOpMutator, NoOpMutator>/0/64 [polls/iter:3.00009 ] 2.57MB/s ± 1% 2.61MB/s ± 1% +1.60% (p=0.029 n=4+4)

@arjunroy arjunroy force-pushed the slice_eq_static branch 3 times, most recently from ffbf102 to 05ba7f4 Compare May 1, 2019 01:15
src/core/lib/slice/slice.cc Outdated Show resolved Hide resolved
src/core/lib/slice/slice_internal.h Outdated Show resolved Hide resolved
src/core/lib/slice/slice_internal.h Outdated Show resolved Hide resolved
@arjunroy arjunroy force-pushed the slice_eq_static branch from a5a0c71 to 12d52a0 Compare May 7, 2019 20:55
@arjunroy arjunroy requested a review from hcaseyal May 7, 2019 22:21
Copy link
Member

@markdroth markdroth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks pretty good. Just a few comments. Please let me know if you have any questions.

Reviewed 7 of 13 files at r1, 6 of 6 files at r2.
Reviewable status: all files reviewed, 6 unresolved discussions (waiting on @arjunroy, @hcaseyal, and @soheilhy)


src/core/ext/transport/chttp2/transport/parsing.cc, line 521 at r2 (raw file):

    }
  } else if (grpc_slice_eq_static(GRPC_MDKEY(md), GRPC_MDSTR_GRPC_STATUS) &&
             !grpc_mdelem_eq(md, GRPC_MDELEM_GRPC_STATUS_0)) {

Use grpc_mdelem_static_value_eq() here? Would this eliminate the need for the if block above?


src/core/lib/slice/slice_internal.h, line 32 at r2 (raw file):

#include "src/core/lib/transport/static_metadata.h"

int grpc_slice_differs_slowpath(const grpc_slice& a,

The semantics of this function are not obvious from the perspective of the slice API. Why is there a slowpath function? When should it be used instead of the normal grpc_slice_eq() function? And why does it have the opposite boolean semantic (i.e., it returns true if they differ instead of false that they are not equal)?

At minimum, I think this API needs some cleanup and documentation.


src/core/lib/transport/metadata.h, line 139 at r2 (raw file):

 * metadata batch callouts in initial/trailing filters. In this case, fastpath
 * grpc_mdelem_eq and remove unnecessary checks. */
int grpc_slice_differs_slowpath(const grpc_slice& a,

This is declared in slice_internal.h, so we should include that instead of re-declaring it here.

return grpc_slice_eq_static(GRPC_MDVALUE(a), GRPC_MDVALUE(b_static));
const grpc_slice& a_slice = GRPC_MDVALUE(a);
const grpc_slice& b_slice = GRPC_MDVALUE(b_static);
return a_slice.refcount == b_slice.refcount
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could we just call grpc_slice_eq_static here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So this will also tie into a comment that Mark made, regarding why I'm doing a forward declaration as opposed to a an include of slice_internal.h.

Basically, there is a dependency cycle. slice_internal.h includes static_metadata.h which includes metadata.h. So this means we cannot include slice_internal.h here. So we have to forward declare.

Since grpc_slice_eq_static is inlined in its definition in slice_internal.h, just forward declaring means that we'll get a linker error with just a forward declaration.

However, the slow path is not declared inline, so my terrible hack here is to just duplicate a bit of implementation and then call the slow path method which won't throw a linker error.

TLDR: I don't call it because it would fail during the link process, and this is a hack.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there some other way to solve it so we don't have to use the hack? Could we move grpc_slice_eq_static to a different file, then have metadata.h include that file?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That is an option, but it's not clear where it should go. I am open to suggestions, since I am also not a huge fan of what I have done here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe make a new file (or files) called slice_utils.h (and maybe a slice_utils.cc)? And it could live in the same directory as slice_internal.h

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds reasonable - added slice_utils.h and removed the forward declaration.

Copy link
Contributor Author

@arjunroy arjunroy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 7 unresolved discussions (waiting on @hcaseyal, @markdroth, and @soheilhy)


src/core/ext/transport/chttp2/transport/parsing.cc, line 521 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

Use grpc_mdelem_static_value_eq() here? Would this eliminate the need for the if block above?

Nice catch. Using grpc_mdelem_static_value_eq is appropriate here. It is also true that this makes the above if block not needed anymore.

Previously, if the input md was static, it would set s->seen_error to true if it was either GRPC_MDELEM_GRPC_STATUS_1, or GRPC_MDELEM_GRPC_STATUS_2. If not static, it would set s->seen_error to true if it was a GRPC_STATUS and it was not equal to GRPC_MDELEM_GRPC_STATUS_0.

So in any world where:

  1. It is a GRPC_STATUS
  2. That isn't GRPC_MDELEM_GRPC_STATUS_0

We s->set seen_error to true. If we do have a static md and use just the second code branch, assuming GRPC_MDELEM_GRPC_STATUS_0 != [GRPC_MDELEM_GRPC_STATUS_1, GRPC_MDELEM_GRPC_STATUS_2], we will have the same results.

A similar argument applies to the same code in on_initial_header, so I'll change it there too. Will add a comment showing the intent of the code in both places and kill the unnecessary if block.


src/core/lib/slice/slice_internal.h, line 32 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

The semantics of this function are not obvious from the perspective of the slice API. Why is there a slowpath function? When should it be used instead of the normal grpc_slice_eq() function? And why does it have the opposite boolean semantic (i.e., it returns true if they differ instead of false that they are not equal)?

At minimum, I think this API needs some cleanup and documentation.

I'll add the documentation. Also will describe the reasoning here.

Specifically: the fastest and inline-able case is when the slices are literally equal, for the interned and static cases. The slowpath is every other case.

We grpc_slice_eq_static(interned) when we want to compare two slices, and we know the latter one is static(interned). We use grpc_slice_differs_slowpath when we want to compare two slices and we know the latter one is not inlined.

Note grpc_slice_differs_slowpath is a helper method primarily, perhaps we could rename it to: grpc_refcounted_slice_differs.

Now, why are we using differs() for this helper method? For slightly better code generation.

https://godbolt.org/z/1t2UDW

Suppose we have two slices, and if they're identical, we do some followup operation.
Suppose we have as our slowpath method either grpc_slice_differs_slowpath, or grpc_slice_equals_slowpath. Both are represented here.

If we use grpc_slice_differs_slowpath, we do a tailcall to memcp.
If we use grpc_slice_equals_slowpath, we use bcmp, then perform 6 instructions afterwards. Semantically all we're accomplishing is flipping the output. (ie. return memcmp(); or return !memcmp(); ).

Now, take a look at call_with_equals and call_with_differs. In each case, if we were to take the slowpath, and we were to call cont() afterwards, it's 8 instructions. But, in executing the slowpath, the implementation using grpc_slice_differs_slowpath() would not have to perform the 6 instructions that grpc_slice_equals_slowpath uselessly does. So in the case where we're using the output of grpc_slice_eq_static/interned() for control flow, it's faster to use grpc_slice_differs_slowpath instead of grpc_slice_equals_slowpath.

Anyways, will add some docs.


src/core/lib/transport/metadata.h, line 139 at r2 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

This is declared in slice_internal.h, so we should include that instead of re-declaring it here.

Unable - circular dep. See the comment I said to Hope earlier: "Basically, there is a dependency cycle. slice_internal.h includes static_metadata.h which includes metadata.h. So this means we cannot include slice_internal.h here. So we have to forward declare.

Since grpc_slice_eq_static is inlined in its definition in slice_internal.h, just forward declaring means that we'll get a linker error with just a forward declaration.

However, the slow path is not declared inline, so my terrible hack here is to just duplicate a bit of implementation and then call the slow path method which won't throw a linker error.

TLDR: I don't call it because it would fail during the link process, and this is a hack."

Since she already responded - let's continue this discussion there.

@arjunroy arjunroy requested review from hcaseyal and markdroth May 8, 2019 19:17
@arjunroy arjunroy force-pushed the slice_eq_static branch from cdf0c70 to 7f0cb0b Compare May 9, 2019 02:00
Copy link
Contributor Author

@arjunroy arjunroy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: 4 of 23 files reviewed, 7 unresolved discussions (waiting on @hcaseyal, @markdroth, and @soheilhy)


src/core/lib/transport/metadata.h, line 139 at r2 (raw file):

Previously, arjunroy (Arjun Roy) wrote…

Unable - circular dep. See the comment I said to Hope earlier: "Basically, there is a dependency cycle. slice_internal.h includes static_metadata.h which includes metadata.h. So this means we cannot include slice_internal.h here. So we have to forward declare.

Since grpc_slice_eq_static is inlined in its definition in slice_internal.h, just forward declaring means that we'll get a linker error with just a forward declaration.

However, the slow path is not declared inline, so my terrible hack here is to just duplicate a bit of implementation and then call the slow path method which won't throw a linker error.

TLDR: I don't call it because it would fail during the link process, and this is a hack."

Since she already responded - let's continue this discussion there.

Resolved per Hope's suggestion.

@markdroth markdroth requested a review from yashykt May 9, 2019 18:09
Copy link
Member

@markdroth markdroth left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks good. Remaining comments are minor, so I'll go ahead and approve.

Before merging, please have @yashykt look at the chttp2 changes.

Reviewed 1 of 4 files at r3, 19 of 19 files at r4.
Reviewable status: all files reviewed, 6 unresolved discussions (waiting on @arjunroy, @hcaseyal, and @soheilhy)


src/core/lib/slice/slice_internal.h, line 32 at r2 (raw file):

Previously, arjunroy (Arjun Roy) wrote…

I'll add the documentation. Also will describe the reasoning here.

Specifically: the fastest and inline-able case is when the slices are literally equal, for the interned and static cases. The slowpath is every other case.

We grpc_slice_eq_static(interned) when we want to compare two slices, and we know the latter one is static(interned). We use grpc_slice_differs_slowpath when we want to compare two slices and we know the latter one is not inlined.

Note grpc_slice_differs_slowpath is a helper method primarily, perhaps we could rename it to: grpc_refcounted_slice_differs.

Now, why are we using differs() for this helper method? For slightly better code generation.

https://godbolt.org/z/1t2UDW

Suppose we have two slices, and if they're identical, we do some followup operation.
Suppose we have as our slowpath method either grpc_slice_differs_slowpath, or grpc_slice_equals_slowpath. Both are represented here.

If we use grpc_slice_differs_slowpath, we do a tailcall to memcp.
If we use grpc_slice_equals_slowpath, we use bcmp, then perform 6 instructions afterwards. Semantically all we're accomplishing is flipping the output. (ie. return memcmp(); or return !memcmp(); ).

Now, take a look at call_with_equals and call_with_differs. In each case, if we were to take the slowpath, and we were to call cont() afterwards, it's 8 instructions. But, in executing the slowpath, the implementation using grpc_slice_differs_slowpath() would not have to perform the 6 instructions that grpc_slice_equals_slowpath uselessly does. So in the case where we're using the output of grpc_slice_eq_static/interned() for control flow, it's faster to use grpc_slice_differs_slowpath instead of grpc_slice_equals_slowpath.

Anyways, will add some docs.

Wow, that's incredibly counter-intuitive. :(

But I appreciate your documenting it. The performance win probably justifies the counter-intuitivity.


src/core/lib/slice/slice_utils.h, line 37 at r4 (raw file):

// operations to invert the result pointlessly. Concretely, we save 6 ops on
// x86-64/clang with differs().
int grpc_slice_differs_refcounted(const grpc_slice& a,

These functions should all return bool.


src/core/lib/slice/slice_utils.h, line 44 at r4 (raw file):

// b_static(interned); b_static(interned) must be a static(interned) slice,
// while a can be any slice, static or otherwise, inlined or refcounted.
inline int grpc_slice_eq_static(const grpc_slice& a,

These two functions look exactly the same. Maybe just have one copy called something like grpc_slice_refcounted_eq()?

Copy link
Member

@yashykt yashykt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

chttp2 changes look ok

Copy link
Contributor Author

@arjunroy arjunroy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewable status: all files reviewed, 6 unresolved discussions (waiting on @hcaseyal, @markdroth, and @soheilhy)


src/core/lib/slice/slice_utils.h, line 37 at r4 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

These functions should all return bool.

The inline methods should; will change it. For the slowpath method, though, in a similar manner as before, codegen is slightly better to leave it as an int (4 instructions saved; c.f. 6 instructions before was why we had differs rather than equals).


src/core/lib/slice/slice_utils.h, line 44 at r4 (raw file):

Previously, markdroth (Mark D. Roth) wrote…

These two functions look exactly the same. Maybe just have one copy called something like grpc_slice_refcounted_eq()?

I'll change it to grpc_slice_static_interned_eq() since we do not cover the all refcounted slices case.

Copy link
Contributor

@soheilhy soheilhy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Just one nit.

Reviewable status: 15 of 23 files reviewed, 7 unresolved discussions (waiting on @arjunroy, @hcaseyal, and @markdroth)


src/core/lib/slice/slice.cc, line 425 at r5 (raw file):

    a_ptr = &a.data.inlined.bytes[0];
  }
  // Lengths differ => they're different.

nit: I'd remove the obvious comments here and below.

@arjunroy arjunroy force-pushed the slice_eq_static branch from 097d20b to 9ffc4e1 Compare May 9, 2019 20:31
Copy link
Contributor Author

@arjunroy arjunroy left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Since I have accepts from everyone, I have coalesced the commits into one and will submit once all the tests pass. Thanks!

Reviewable status: 15 of 23 files reviewed, 6 unresolved discussions (waiting on @hcaseyal and @markdroth)


src/core/lib/slice/slice.cc, line 425 at r5 (raw file):

Previously, soheilhy (Soheil Hassas Yeganeh) wrote…

nit: I'd remove the obvious comments here and below.

Done.

@arjunroy
Copy link
Contributor Author

The interop tests are broken for everything now, so I'm going to go ahead and push since all other tests pass.

@arjunroy arjunroy merged commit 50e16f6 into grpc:master May 10, 2019
@lock lock bot locked as resolved and limited conversation to collaborators Aug 8, 2019
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area/performance release notes: no Indicates if PR should not be in release notes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants