mirror of
https://github.com/openfaas/faas.git
synced 2025-06-19 12:36:40 +00:00
Merge master into breakout_swarm
Signed-off-by: Alex Ellis <alexellis2@gmail.com>
This commit is contained in:
contrib
docker-compose.armhf.ymldocker-compose.ymlgateway
DockerfileGopkg.lockGopkg.toml
handlers
alerthandler.gocreate_handler.godeletehandler.goproxy.goqueueproxy.goreader.goservice_query.goupdate_handler.go
metrics
server.gotests
vendor.confvendor
github.com
Azure
go-ansiterm
Microsoft
go-winio
Nvveen
Sirupsen
logrus
beorn7
perks
docker
cli
LICENSENOTICEREADME.md
opts
env.gohosts.gohosts_unix.gohosts_windows.goip.gomount.goopts.goopts_unix.goopts_windows.goport.goquotedstring.goruntime.gosecret.gothrottledevice.goulimit.goweightdevice.go
vendor.confdistribution
.gitignore.mailmapAUTHORSBUILDING.mdCHANGELOG.mdCONTRIBUTING.mdDockerfilecoverpkg.sh
Godeps
MAINTAINERSMakefileREADME.mdRELEASE-CHECKLIST.mdROADMAP.mdblobs.gocircle.ymlcmd
digest
registry-api-descriptor-template
registry
configuration
context
contrib
apache
compose
docker-integration
DockerfileREADME.mddocker-compose.ymlgolem.confhelpers.bashinstall_certs.sh
malevolent-certs
malevolent.batsnginx
Dockerfiledocker-registry-v2.confnginx.confregistry-basic.confregistry-noauth.confregistry.conftest.passwd
run_multiversion.shtls.batstoken.batsv1
tokenserver-oauth
.htpasswdDockerfile
certs
auth.localregistry.certauth.localregistry.keylocalregistry.certlocalregistry.keysigning.certsigning.key
registry-config-notls.ymlregistry-config.ymltokenserver
token-server
digest
digest.godigest_test.godigester.godigester_resumable_test.godoc.goset.goset_test.goverifiers.goverifiers_test.go
docs
errors.gohealth
manifest
doc.go
manifests.gomanifestlist
schema1
config_builder.goconfig_builder_test.gomanifest.gomanifest_test.goreference_builder.goreference_builder_test.gosign.goverify.go
schema2
versioned.gonotifications
bridge.gobridge_test.goendpoint.goevent.goevent_test.gohttp.gohttp_test.golistener.golistener_test.gometrics.gosinks.gosinks_test.go
project
reference
registry.goregistry
api
auth
client
doc.gohandlers
api_test.goapp.goapp_test.gobasicauth.gobasicauth_prego14.goblob.goblobupload.gocatalog.gocontext.gohealth_test.gohelpers.gohmac.gohmac_test.gohooks.goimages.gomail.gotags.go
listener
middleware
proxy
proxyauth.goproxyblobstore.goproxyblobstore_test.goproxymanifeststore.goproxymanifeststore_test.goproxymetrics.goproxyregistry.goproxytagservice.goproxytagservice_test.go
registry.goregistry_test.goroot.goscheduler
storage
blob_test.goblobcachemetrics.goblobserver.goblobstore.goblobwriter.goblobwriter_nonresumable.goblobwriter_resumable.gofilereader.gofilereader_test.gogarbagecollect.gogarbagecollect_test.goio.golinkedblobstore.golinkedblobstore_test.gomanifestlisthandler.gomanifeststore.gomanifeststore_test.gopaths.gopaths_test.gopurgeuploads.gopurgeuploads_test.goregistry.goschema2manifesthandler.goschema2manifesthandler_test.gosignedmanifesthandler.gotagstore.gotagstore_test.goutil.govacuum.gowalk.gowalk_test.go
cache
catalog.gocatalog_test.godoc.godriver
azure
base
factory
fileinfo.gofilesystem
gcs
inmemory
middleware
oss
s3-aws
s3-goamz
storagedriver.goswift
testdriver
testsuites
testutil
uuid
vendor.confversion
docker
LICENSENOTICEREADME.md
api
README.mdcommon.gocommon_unix.gocommon_windows.gonames.go
types
auth.go
blkiodev
client.goconfigs.gocontainer
config.gocontainer_changes.gocontainer_create.gocontainer_top.gocontainer_update.gocontainer_wait.gohost_config.gohostconfig_unix.gohostconfig_windows.go
error_response.goevents
filters
graph_driver_data.goid_response.goimage
image_delete_response_item.goimage_summary.gomount
network
plugin.goplugin_device.goplugin_env.goplugin_interface_type.goplugin_mount.goplugin_responses.goport.goregistry
seccomp.goservice_update_response.gostats.gostrslice
swarm
time
types.goversions
volume.govolume
client
README.mdcheckpoint_create.gocheckpoint_delete.gocheckpoint_list.goclient.goclient_unix.goclient_windows.gocontainer_attach.gocontainer_commit.gocontainer_copy.gocontainer_create.gocontainer_diff.gocontainer_exec.gocontainer_export.gocontainer_inspect.gocontainer_kill.gocontainer_list.gocontainer_logs.gocontainer_pause.gocontainer_prune.gocontainer_remove.gocontainer_rename.gocontainer_resize.gocontainer_restart.gocontainer_start.gocontainer_stats.gocontainer_stop.gocontainer_top.gocontainer_unpause.gocontainer_update.gocontainer_wait.godisk_usage.goerrors.goevents.gohijack.goimage_build.goimage_create.goimage_history.goimage_import.goimage_inspect.goimage_list.goimage_load.goimage_prune.goimage_pull.goimage_push.goimage_remove.goimage_save.goimage_search.goimage_tag.goinfo.gointerface.gointerface_experimental.gointerface_stable.gologin.gonetwork_connect.gonetwork_create.gonetwork_disconnect.gonetwork_inspect.gonetwork_list.gonetwork_prune.gonetwork_remove.gonode_inspect.gonode_list.gonode_remove.gonode_update.goping.goplugin_create.goplugin_disable.goplugin_enable.goplugin_inspect.goplugin_install.goplugin_list.goplugin_push.goplugin_remove.goplugin_set.goplugin_upgrade.gorequest.gosecret_create.gosecret_inspect.gosecret_list.gosecret_remove.gosecret_update.goservice_create.goservice_inspect.goservice_list.goservice_logs.goservice_remove.goservice_update.goswarm_get_unlock_key.goswarm_init.goswarm_inspect.goswarm_join.goswarm_leave.goswarm_unlock.goswarm_update.gotask_inspect.gotask_list.gotask_logs.gotransport.goutils.goversion.govolume_create.govolume_inspect.govolume_list.govolume_prune.govolume_remove.go
opts
env.gohosts.gohosts_unix.gohosts_windows.goip.gomount.goopts.goopts_unix.goopts_windows.goport.goquotedstring.goruntime.gosecret.gothrottledevice.goulimit.goweightdevice.go
pkg
README.md
httputils
ioutils
buffer.gobytespipe.gofmt.gofswriters.gomultireader.goreaders.gotemp_unix.gotemp_windows.gowriteflusher.gowriters.go
jsonlog
jsonmessage
longpath
random
stringid
system
chtimes.gochtimes_unix.gochtimes_windows.goerrors.goevents_windows.goexitcode.gofilesys.gofilesys_windows.golstat_unix.golstat_windows.gomeminfo.gomeminfo_linux.gomeminfo_solaris.gomeminfo_unsupported.gomeminfo_windows.gomknod.gomknod_windows.gopath_unix.gopath_windows.goprocess_unix.gostat_darwin.gostat_freebsd.gostat_linux.gostat_openbsd.gostat_solaris.gostat_unix.gostat_windows.gosyscall_unix.gosyscall_windows.goumask.goumask_windows.goutimes_freebsd.goutimes_linux.goutimes_unsupported.goxattrs_linux.goxattrs_unsupported.go
tarsum
term
ascii.gotc_linux_cgo.gotc_other.gotc_solaris_cgo.goterm.goterm_solaris.goterm_unix.goterm_windows.gotermios_darwin.gotermios_freebsd.gotermios_linux.gotermios_openbsd.go
windows
tlsconfig
registry
auth.goconfig.goconfig_unix.goconfig_windows.goendpoint_v1.goregistry.goservice.goservice_v1.goservice_v2.gosession.gotypes.go
vendor.confgo-connections
go-units
libtrust
gogo
protobuf
.gitignore.mailmap.travis.ymlAUTHORSCONTRIBUTORSGOLANG_CONTRIBUTORSMakefileREADMEReadme.md
_conformance
bench.mdcodec
custom_types.mdextensions.mdgogoproto
gogoreplace
install-protobuf.shio
jsonpb
plugin
compare
defaultcheck
description
embedcheck
enumstringer
equal
face
gostring
marshalto
oneofcheck
populate
size
stringer
testgen
union
unmarshal
proto
Makefileall_test.goany_test.goclone_test.godecode_test.goencode.goencode_test.goequal_test.goextensions_test.golib.gomap_test.gomessage_set_test.goproperties.go
proto3_proto
proto3_test.gosize2_test.gosize_test.gotestdata
text.gotext_parser.gotext_parser_test.gotext_test.goprotobuf
protoc-gen-combo
protoc-gen-gofast
protoc-gen-gogo
protoc-gen-gogofast
protoc-gen-gogofaster
protoc-gen-gogoslick
protoc-gen-gogotypes
protoc-gen-gostring
protoc-min-version
sortkeys
test
.gitignoreMakefile
asymetric-issue125
bug_test.gocasttype
castvalue
combos
both
marshaler
unmarshaler
custom-dash-type
custom
custombytesnonstruct
dashfilename
data
defaultconflict
embedconflict
empty-issue70
enumcustomname
enumdecl
enumdecl_all
enumprefix
enumstringer
example
extension_test.gofiledotname
fuzztests
group
importdedup
indeximport-issue72
int64support
issue260
issue261
issue262
issue312
issue322
issue330
issue34
issue42order
issue8
jsonpb-gogo
mapdefaults
mapsproto2
Makefiledoc.goheader.protomapsproto2.protomapsproto2_test.go.in
combos
both
marshaler
neither
unmarshaler
mixbench
.gitignoremarshal.txtmarshaler.txtmixbench.gooldmarshaler.txtoldunmarshaler.txtunmarshal.txtunmarshaler.txtunsafe_marshaler.txtunsafe_unmarshaler.txt
moredefaults
nopackage
oneof
oneof3
oneofembed
packed
proto3extension
protosize
registration
required
sizerconflict
sizeunderscore
stdtypes
t.gotags
theproto3
Makefiledoc.gofooter.protoheader.protomaps.protoproto3_test.go.intheproto3.proto
thetest.pb.gothetest.protothetestpb_test.gocombos
both
marshaler
neither
unmarshaler
typedecl
typedecl_all
typedeclimport
types
unmarshalmerge
unrecognized
unrecognizedgroup
uuid.gouuid_test.gotypes
Makefileany.goany.pb.goany_test.godoc.goduration.goduration.pb.goduration_gogo.goduration_test.goempty.pb.gofield_mask.pb.gostruct.pb.gotimestamp.gotimestamp.pb.gotimestamp_gogo.gotimestamp_test.gowrappers.pb.go
vanity
version
golang
protobuf
.gitignore.travis.ymlAUTHORSCONTRIBUTORSMake.protobufMakefileREADME.md
_conformance
descriptor
jsonpb
proto
Makefileall_test.goany_test.goclone_test.godecode_test.goencode_test.goequal_test.goextensions_test.gomap_test.gomessage_set_test.go
proto3_proto
proto3_test.gosize2_test.gosize_test.gotestdata
text_parser_test.gotext_test.goprotoc-gen-go
ptypes
gorilla
context
mux
matttproud
golang_protobuf_extensions
nats-io
go-nats-streaming
go-nats
.gitignore.travis.ymlLICENSETODO.mdexample_test.go
bench
enc_test.goencoders
protobuf
examples
nats.gonats_test.goscripts
staticcheck.ignoretest
auth_test.gobasic_test.gobench_test.gocluster_test.go
timer_test.goconfigs
conn_test.gocontext_test.goenc_test.gogob_test.gohelper_test.gojson_test.gomain.gonetchan_test.goprotobuf_test.goreconnect_test.gosub_test.goutil
nuid
opencontainers
openfaas
nats-queue-worker
pkg
prometheus
client_golang
.gitignore.travis.ymlAUTHORS.mdCHANGELOG.mdCONTRIBUTING.mdREADME.mdVERSION
api
prometheus
examples
prometheus
.gitignorebenchmark_test.gocounter.gocounter_test.godesc.godoc.goexample_clustermanager_test.goexamples_test.goexpvar_collector_test.gogauge.gogauge_test.gogo_collector.gogo_collector_test.gohistogram.gohistogram_test.gohttp.gohttp_test.gometric_test.goobserver.goprocess_collector.goprocess_collector_test.go
promhttp
push
registry.goregistry_test.gosummary.gosummary_test.gotimer.gountyped.govalue.govec.govec_test.goclient_model
.gitignoreCONTRIBUTING.mdMAINTAINERS.mdMakefile
cpp
metrics.protopom.xmlpython
prometheus
ruby
setup.pysrc
main
java
io
prometheus
client
common
.travis.ymlCONTRIBUTING.mdMAINTAINERS.md
config
config.gohttp_config.gohttp_config_test.go
testdata
http.conf.bearer-token-and-file-set.bad.ymlhttp.conf.empty.bad.ymlhttp.conf.good.ymlhttp.conf.invalid-bearer-token-file.bad.ymltls_config.cert_no_key.bad.ymltls_config.empty.good.ymltls_config.insecure.good.ymltls_config.invalid_field.bad.ymltls_config.key_no_cert.bad.yml
tls_config_test.goexpfmt
bench_test.godecode_test.go
fuzz
corpus
from_test_parse_0from_test_parse_1from_test_parse_2from_test_parse_3from_test_parse_4from_test_parse_error_0from_test_parse_error_1from_test_parse_error_10from_test_parse_error_11from_test_parse_error_12from_test_parse_error_13from_test_parse_error_14from_test_parse_error_15from_test_parse_error_16from_test_parse_error_17from_test_parse_error_18from_test_parse_error_19from_test_parse_error_2from_test_parse_error_3from_test_parse_error_4from_test_parse_error_5from_test_parse_error_6from_test_parse_error_7from_test_parse_error_8from_test_parse_error_9minimal
testdata
text_create_test.gotext_parse_test.gointernal
bitbucket.org
ww
goautoneg
log
model
alert_test.golabels_test.gometric_test.gosignature_test.gosilence_test.gotime.gotime_test.govalue_test.go
promlog
route
version
procfs
.travis.ymlCONTRIBUTING.mdMAINTAINERS.mdMakefile
bcache
buddyinfo.gobuddyinfo_test.gofixtures
fs_test.goipvs.goipvs_test.gomdstat_test.gomountstats_test.gonet_dev.gonet_dev_test.goproc_io.goproc_io_test.goproc_limits.goproc_limits_test.goproc_ns.goproc_ns_test.goproc_stat_test.goproc_test.gostat_test.gosysfs
ttarxfrm_test.goxfs
spf13
golang.org
x
net
sys
LICENSEPATENTSREADME
unix
README.mdasm_darwin_386.sasm_darwin_amd64.sasm_darwin_arm.sasm_darwin_arm64.sasm_dragonfly_amd64.sasm_freebsd_386.sasm_freebsd_amd64.sasm_freebsd_arm.sasm_linux_386.sasm_linux_amd64.sasm_linux_arm.sasm_linux_arm64.sasm_linux_mips64x.sasm_linux_mipsx.sasm_linux_ppc64x.sasm_linux_s390x.sasm_netbsd_386.sasm_netbsd_amd64.sasm_netbsd_arm.sasm_openbsd_386.sasm_openbsd_amd64.sasm_solaris_amd64.sbluetooth_linux.goconstants.godirent.goendian_big.goendian_little.goenv_unix.goenv_unset.goflock.goflock_linux_32bit.gogccgo.gogccgo_c.cgccgo_linux_amd64.gogccgo_linux_sparc64.goopenbsd_pledge.gorace.gorace0.gosockcmsg_linux.gosockcmsg_unix.gostr.gosyscall.gosyscall_bsd.gosyscall_darwin.gosyscall_darwin_386.gosyscall_darwin_amd64.gosyscall_darwin_arm.gosyscall_darwin_arm64.gosyscall_dragonfly.gosyscall_dragonfly_amd64.gosyscall_freebsd.gosyscall_freebsd_386.gosyscall_freebsd_amd64.gosyscall_freebsd_arm.gosyscall_linux.gosyscall_linux_386.gosyscall_linux_amd64.gosyscall_linux_amd64_gc.gosyscall_linux_arm.gosyscall_linux_arm64.gosyscall_linux_mips64x.gosyscall_linux_mipsx.gosyscall_linux_ppc64x.gosyscall_linux_s390x.gosyscall_linux_sparc64.gosyscall_netbsd.gosyscall_netbsd_386.gosyscall_netbsd_amd64.gosyscall_netbsd_arm.gosyscall_no_getwd.gosyscall_openbsd.gosyscall_openbsd_386.gosyscall_openbsd_amd64.gosyscall_solaris.gosyscall_solaris_amd64.gosyscall_unix.gosyscall_unix_gc.gozerrors_darwin_386.gozerrors_darwin_amd64.gozerrors_darwin_arm.gozerrors_darwin_arm64.gozerrors_dragonfly_amd64.gozerrors_freebsd_386.gozerrors_freebsd_amd64.gozerrors_freebsd_arm.gozerrors_linux_386.gozerrors_linux_amd64.gozerrors_linux_arm.gozerrors_linux_arm64.gozerrors_linux_mips.gozerrors_linux_mips64.gozerrors_linux_mips64le.gozerrors_linux_mipsle.gozerrors_linux_ppc64.gozerrors_linux_ppc64le.gozerrors_linux_s390x.gozerrors_linux_sparc64.gozerrors_netbsd_386.gozerrors_netbsd_amd64.gozerrors_netbsd_arm.gozerrors_openbsd_386.gozerrors_openbsd_amd64.gozerrors_solaris_amd64.gozsyscall_darwin_386.gozsyscall_darwin_amd64.gozsyscall_darwin_arm.gozsyscall_darwin_arm64.gozsyscall_dragonfly_amd64.gozsyscall_freebsd_386.gozsyscall_freebsd_amd64.gozsyscall_freebsd_arm.gozsyscall_linux_386.gozsyscall_linux_amd64.gozsyscall_linux_arm.gozsyscall_linux_arm64.gozsyscall_linux_mips.gozsyscall_linux_mips64.gozsyscall_linux_mips64le.gozsyscall_linux_mipsle.gozsyscall_linux_ppc64.gozsyscall_linux_ppc64le.gozsyscall_linux_s390x.gozsyscall_linux_sparc64.gozsyscall_netbsd_386.gozsyscall_netbsd_amd64.gozsyscall_netbsd_arm.gozsyscall_openbsd_386.gozsyscall_openbsd_amd64.gozsyscall_solaris_amd64.gozsysctl_openbsd.gozsysnum_darwin_386.gozsysnum_darwin_amd64.gozsysnum_darwin_arm.gozsysnum_darwin_arm64.gozsysnum_dragonfly_amd64.gozsysnum_freebsd_386.gozsysnum_freebsd_amd64.gozsysnum_freebsd_arm.gozsysnum_linux_386.gozsysnum_linux_amd64.gozsysnum_linux_arm.gozsysnum_linux_arm64.gozsysnum_linux_mips.gozsysnum_linux_mips64.gozsysnum_linux_mips64le.gozsysnum_linux_mipsle.gozsysnum_linux_ppc64.gozsysnum_linux_ppc64le.gozsysnum_linux_s390x.gozsysnum_linux_sparc64.gozsysnum_netbsd_386.gozsysnum_netbsd_amd64.gozsysnum_netbsd_arm.gozsysnum_openbsd_386.gozsysnum_openbsd_amd64.gozsysnum_solaris_amd64.goztypes_darwin_386.goztypes_darwin_amd64.goztypes_darwin_arm.goztypes_darwin_arm64.goztypes_dragonfly_amd64.goztypes_freebsd_386.goztypes_freebsd_amd64.goztypes_freebsd_arm.goztypes_linux_386.goztypes_linux_amd64.goztypes_linux_arm.goztypes_linux_arm64.goztypes_linux_mips.goztypes_linux_mips64.goztypes_linux_mips64le.goztypes_linux_mipsle.goztypes_linux_ppc64.goztypes_linux_ppc64le.goztypes_linux_s390x.goztypes_linux_sparc64.goztypes_netbsd_386.goztypes_netbsd_amd64.goztypes_netbsd_arm.goztypes_openbsd_386.goztypes_openbsd_amd64.goztypes_solaris_amd64.go
windows
prometheus
258
gateway/vendor/github.com/golang/protobuf/proto/decode_test.go
generated
vendored
Normal file
258
gateway/vendor/github.com/golang/protobuf/proto/decode_test.go
generated
vendored
Normal file
@ -0,0 +1,258 @@
|
||||
// Go support for Protocol Buffers - Google's data interchange format
|
||||
//
|
||||
// Copyright 2010 The Go Authors. All rights reserved.
|
||||
// https://github.com/golang/protobuf
|
||||
//
|
||||
// Redistribution and use in source and binary forms, with or without
|
||||
// modification, are permitted provided that the following conditions are
|
||||
// met:
|
||||
//
|
||||
// * Redistributions of source code must retain the above copyright
|
||||
// notice, this list of conditions and the following disclaimer.
|
||||
// * Redistributions in binary form must reproduce the above
|
||||
// copyright notice, this list of conditions and the following disclaimer
|
||||
// in the documentation and/or other materials provided with the
|
||||
// distribution.
|
||||
// * Neither the name of Google Inc. nor the names of its
|
||||
// contributors may be used to endorse or promote products derived from
|
||||
// this software without specific prior written permission.
|
||||
//
|
||||
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
// +build go1.7
|
||||
|
||||
package proto_test
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/golang/protobuf/proto"
|
||||
tpb "github.com/golang/protobuf/proto/proto3_proto"
|
||||
)
|
||||
|
||||
var (
|
||||
bytesBlackhole []byte
|
||||
msgBlackhole = new(tpb.Message)
|
||||
)
|
||||
|
||||
// BenchmarkVarint32ArraySmall shows the performance on an array of small int32 fields (1 and
|
||||
// 2 bytes long).
|
||||
func BenchmarkVarint32ArraySmall(b *testing.B) {
|
||||
for i := uint(1); i <= 10; i++ {
|
||||
dist := genInt32Dist([7]int{0, 3, 1}, 1<<i)
|
||||
raw, err := proto.Marshal(&tpb.Message{
|
||||
ShortKey: dist,
|
||||
})
|
||||
if err != nil {
|
||||
b.Error("wrong encode", err)
|
||||
}
|
||||
b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
|
||||
scratchBuf := proto.NewBuffer(nil)
|
||||
b.ResetTimer()
|
||||
for k := 0; k < b.N; k++ {
|
||||
scratchBuf.SetBuf(raw)
|
||||
msgBlackhole.Reset()
|
||||
if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
|
||||
b.Error("wrong decode", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkVarint32ArrayLarge shows the performance on an array of large int32 fields (3 and
|
||||
// 4 bytes long, with a small number of 1, 2, 5 and 10 byte long versions).
|
||||
func BenchmarkVarint32ArrayLarge(b *testing.B) {
|
||||
for i := uint(1); i <= 10; i++ {
|
||||
dist := genInt32Dist([7]int{0, 1, 2, 4, 8, 1, 1}, 1<<i)
|
||||
raw, err := proto.Marshal(&tpb.Message{
|
||||
ShortKey: dist,
|
||||
})
|
||||
if err != nil {
|
||||
b.Error("wrong encode", err)
|
||||
}
|
||||
b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
|
||||
scratchBuf := proto.NewBuffer(nil)
|
||||
b.ResetTimer()
|
||||
for k := 0; k < b.N; k++ {
|
||||
scratchBuf.SetBuf(raw)
|
||||
msgBlackhole.Reset()
|
||||
if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
|
||||
b.Error("wrong decode", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkVarint64ArraySmall shows the performance on an array of small int64 fields (1 and
|
||||
// 2 bytes long).
|
||||
func BenchmarkVarint64ArraySmall(b *testing.B) {
|
||||
for i := uint(1); i <= 10; i++ {
|
||||
dist := genUint64Dist([11]int{0, 3, 1}, 1<<i)
|
||||
raw, err := proto.Marshal(&tpb.Message{
|
||||
Key: dist,
|
||||
})
|
||||
if err != nil {
|
||||
b.Error("wrong encode", err)
|
||||
}
|
||||
b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
|
||||
scratchBuf := proto.NewBuffer(nil)
|
||||
b.ResetTimer()
|
||||
for k := 0; k < b.N; k++ {
|
||||
scratchBuf.SetBuf(raw)
|
||||
msgBlackhole.Reset()
|
||||
if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
|
||||
b.Error("wrong decode", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkVarint64ArrayLarge shows the performance on an array of large int64 fields (6, 7,
|
||||
// and 8 bytes long with a small number of the other sizes).
|
||||
func BenchmarkVarint64ArrayLarge(b *testing.B) {
|
||||
for i := uint(1); i <= 10; i++ {
|
||||
dist := genUint64Dist([11]int{0, 1, 1, 2, 4, 8, 16, 32, 16, 1, 1}, 1<<i)
|
||||
raw, err := proto.Marshal(&tpb.Message{
|
||||
Key: dist,
|
||||
})
|
||||
if err != nil {
|
||||
b.Error("wrong encode", err)
|
||||
}
|
||||
b.Run(fmt.Sprintf("Len%v", len(dist)), func(b *testing.B) {
|
||||
scratchBuf := proto.NewBuffer(nil)
|
||||
b.ResetTimer()
|
||||
for k := 0; k < b.N; k++ {
|
||||
scratchBuf.SetBuf(raw)
|
||||
msgBlackhole.Reset()
|
||||
if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
|
||||
b.Error("wrong decode", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// BenchmarkVarint64ArrayMixed shows the performance of lots of small messages, each
|
||||
// containing a small number of large (3, 4, and 5 byte) repeated int64s.
|
||||
func BenchmarkVarint64ArrayMixed(b *testing.B) {
|
||||
for i := uint(1); i <= 1<<5; i <<= 1 {
|
||||
dist := genUint64Dist([11]int{0, 0, 0, 4, 6, 4, 0, 0, 0, 0, 0}, int(i))
|
||||
// number of sub fields
|
||||
for k := uint(1); k <= 1<<10; k <<= 2 {
|
||||
msg := &tpb.Message{}
|
||||
for m := uint(0); m < k; m++ {
|
||||
msg.Children = append(msg.Children, &tpb.Message{
|
||||
Key: dist,
|
||||
})
|
||||
}
|
||||
raw, err := proto.Marshal(msg)
|
||||
if err != nil {
|
||||
b.Error("wrong encode", err)
|
||||
}
|
||||
b.Run(fmt.Sprintf("Fields%vLen%v", k, i), func(b *testing.B) {
|
||||
scratchBuf := proto.NewBuffer(nil)
|
||||
b.ResetTimer()
|
||||
for k := 0; k < b.N; k++ {
|
||||
scratchBuf.SetBuf(raw)
|
||||
msgBlackhole.Reset()
|
||||
if err := scratchBuf.Unmarshal(msgBlackhole); err != nil {
|
||||
b.Error("wrong decode", err)
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// genInt32Dist generates a slice of ints that will match the size distribution of dist.
|
||||
// A size of 6 corresponds to a max length varint32, which is 10 bytes. The distribution
|
||||
// is 1-indexed. (i.e. the value at index 1 is how many 1 byte ints to create).
|
||||
func genInt32Dist(dist [7]int, count int) (dest []int32) {
|
||||
for i := 0; i < count; i++ {
|
||||
for k := 0; k < len(dist); k++ {
|
||||
var num int32
|
||||
switch k {
|
||||
case 1:
|
||||
num = 1<<7 - 1
|
||||
case 2:
|
||||
num = 1<<14 - 1
|
||||
case 3:
|
||||
num = 1<<21 - 1
|
||||
case 4:
|
||||
num = 1<<28 - 1
|
||||
case 5:
|
||||
num = 1<<29 - 1
|
||||
case 6:
|
||||
num = -1
|
||||
}
|
||||
for m := 0; m < dist[k]; m++ {
|
||||
dest = append(dest, num)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// genUint64Dist generates a slice of ints that will match the size distribution of dist.
|
||||
// The distribution is 1-indexed. (i.e. the value at index 1 is how many 1 byte ints to create).
|
||||
func genUint64Dist(dist [11]int, count int) (dest []uint64) {
|
||||
for i := 0; i < count; i++ {
|
||||
for k := 0; k < len(dist); k++ {
|
||||
var num uint64
|
||||
switch k {
|
||||
case 1:
|
||||
num = 1<<7 - 1
|
||||
case 2:
|
||||
num = 1<<14 - 1
|
||||
case 3:
|
||||
num = 1<<21 - 1
|
||||
case 4:
|
||||
num = 1<<28 - 1
|
||||
case 5:
|
||||
num = 1<<35 - 1
|
||||
case 6:
|
||||
num = 1<<42 - 1
|
||||
case 7:
|
||||
num = 1<<49 - 1
|
||||
case 8:
|
||||
num = 1<<56 - 1
|
||||
case 9:
|
||||
num = 1<<63 - 1
|
||||
case 10:
|
||||
num = 1<<64 - 1
|
||||
}
|
||||
for m := 0; m < dist[k]; m++ {
|
||||
dest = append(dest, num)
|
||||
}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// BenchmarkDecodeEmpty measures the overhead of doing the minimal possible decode.
|
||||
func BenchmarkDecodeEmpty(b *testing.B) {
|
||||
raw, err := proto.Marshal(&tpb.Message{})
|
||||
if err != nil {
|
||||
b.Error("wrong encode", err)
|
||||
}
|
||||
b.ResetTimer()
|
||||
for i := 0; i < b.N; i++ {
|
||||
if err := proto.Unmarshal(raw, msgBlackhole); err != nil {
|
||||
b.Error("wrong decode", err)
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user