blob: 9efeb4dd47dfe18a3f7dca4becb95f8b2a552095 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
// This file was auto-generated by the vanadium vdl tool.
// Package: pprof
// Package pprof defines an interface for accessing runtime profiling data in
// the format expected by the pprof visualization tool. For more information
// about pprof, see http://code.google.com/p/google-perftools/.
package pprof
import (
"io"
"v.io/v23"
"v.io/v23/context"
"v.io/v23/rpc"
"v.io/v23/security/access"
"v.io/v23/vdl"
)
var _ = __VDLInit() // Must be first; see __VDLInit comments for details.
//////////////////////////////////////////////////
// Interface definitions
// PProfClientMethods is the client interface
// containing PProf methods.
type PProfClientMethods interface {
// CmdLine returns the command-line arguments of the server, including
// the name of the executable.
CmdLine(*context.T, ...rpc.CallOpt) ([]string, error)
// Profiles returns the list of available profiles.
Profiles(*context.T, ...rpc.CallOpt) ([]string, error)
// Profile streams the requested profile. The debug parameter enables
// additional output. Passing debug=0 includes only the hexadecimal
// addresses that pprof needs. Passing debug=1 adds comments translating
// addresses to function names and line numbers, so that a programmer
// can read the profile without tools.
Profile(_ *context.T, name string, debug int32, _ ...rpc.CallOpt) (PProfProfileClientCall, error)
// CpuProfile enables CPU profiling for the requested duration and
// streams the profile data.
CpuProfile(_ *context.T, seconds int32, _ ...rpc.CallOpt) (PProfCpuProfileClientCall, error)
// Symbol looks up the program counters and returns their respective
// function names.
Symbol(_ *context.T, programCounters []uint64, _ ...rpc.CallOpt) ([]string, error)
}
// PProfClientStub adds universal methods to PProfClientMethods.
type PProfClientStub interface {
PProfClientMethods
rpc.UniversalServiceMethods
}
// PProfClient returns a client stub for PProf.
func PProfClient(name string) PProfClientStub {
return implPProfClientStub{name}
}
type implPProfClientStub struct {
name string
}
func (c implPProfClientStub) CmdLine(ctx *context.T, opts ...rpc.CallOpt) (o0 []string, err error) {
err = v23.GetClient(ctx).Call(ctx, c.name, "CmdLine", nil, []interface{}{&o0}, opts...)
return
}
func (c implPProfClientStub) Profiles(ctx *context.T, opts ...rpc.CallOpt) (o0 []string, err error) {
err = v23.GetClient(ctx).Call(ctx, c.name, "Profiles", nil, []interface{}{&o0}, opts...)
return
}
func (c implPProfClientStub) Profile(ctx *context.T, i0 string, i1 int32, opts ...rpc.CallOpt) (ocall PProfProfileClientCall, err error) {
var call rpc.ClientCall
if call, err = v23.GetClient(ctx).StartCall(ctx, c.name, "Profile", []interface{}{i0, i1}, opts...); err != nil {
return
}
ocall = &implPProfProfileClientCall{ClientCall: call}
return
}
func (c implPProfClientStub) CpuProfile(ctx *context.T, i0 int32, opts ...rpc.CallOpt) (ocall PProfCpuProfileClientCall, err error) {
var call rpc.ClientCall
if call, err = v23.GetClient(ctx).StartCall(ctx, c.name, "CpuProfile", []interface{}{i0}, opts...); err != nil {
return
}
ocall = &implPProfCpuProfileClientCall{ClientCall: call}
return
}
func (c implPProfClientStub) Symbol(ctx *context.T, i0 []uint64, opts ...rpc.CallOpt) (o0 []string, err error) {
err = v23.GetClient(ctx).Call(ctx, c.name, "Symbol", []interface{}{i0}, []interface{}{&o0}, opts...)
return
}
// PProfProfileClientStream is the client stream for PProf.Profile.
type PProfProfileClientStream interface {
// RecvStream returns the receiver side of the PProf.Profile client stream.
RecvStream() interface {
// Advance stages an item so that it may be retrieved via Value. Returns
// true iff there is an item to retrieve. Advance must be called before
// Value is called. May block if an item is not available.
Advance() bool
// Value returns the item that was staged by Advance. May panic if Advance
// returned false or was not called. Never blocks.
Value() []byte
// Err returns any error encountered by Advance. Never blocks.
Err() error
}
}
// PProfProfileClientCall represents the call returned from PProf.Profile.
type PProfProfileClientCall interface {
PProfProfileClientStream
// Finish blocks until the server is done, and returns the positional return
// values for call.
//
// Finish returns immediately if the call has been canceled; depending on the
// timing the output could either be an error signaling cancelation, or the
// valid positional return values from the server.
//
// Calling Finish is mandatory for releasing stream resources, unless the call
// has been canceled or any of the other methods return an error. Finish should
// be called at most once.
Finish() error
}
type implPProfProfileClientCall struct {
rpc.ClientCall
valRecv []byte
errRecv error
}
func (c *implPProfProfileClientCall) RecvStream() interface {
Advance() bool
Value() []byte
Err() error
} {
return implPProfProfileClientCallRecv{c}
}
type implPProfProfileClientCallRecv struct {
c *implPProfProfileClientCall
}
func (c implPProfProfileClientCallRecv) Advance() bool {
c.c.errRecv = c.c.Recv(&c.c.valRecv)
return c.c.errRecv == nil
}
func (c implPProfProfileClientCallRecv) Value() []byte {
return c.c.valRecv
}
func (c implPProfProfileClientCallRecv) Err() error {
if c.c.errRecv == io.EOF {
return nil
}
return c.c.errRecv
}
func (c *implPProfProfileClientCall) Finish() (err error) {
err = c.ClientCall.Finish()
return
}
// PProfCpuProfileClientStream is the client stream for PProf.CpuProfile.
type PProfCpuProfileClientStream interface {
// RecvStream returns the receiver side of the PProf.CpuProfile client stream.
RecvStream() interface {
// Advance stages an item so that it may be retrieved via Value. Returns
// true iff there is an item to retrieve. Advance must be called before
// Value is called. May block if an item is not available.
Advance() bool
// Value returns the item that was staged by Advance. May panic if Advance
// returned false or was not called. Never blocks.
Value() []byte
// Err returns any error encountered by Advance. Never blocks.
Err() error
}
}
// PProfCpuProfileClientCall represents the call returned from PProf.CpuProfile.
type PProfCpuProfileClientCall interface {
PProfCpuProfileClientStream
// Finish blocks until the server is done, and returns the positional return
// values for call.
//
// Finish returns immediately if the call has been canceled; depending on the
// timing the output could either be an error signaling cancelation, or the
// valid positional return values from the server.
//
// Calling Finish is mandatory for releasing stream resources, unless the call
// has been canceled or any of the other methods return an error. Finish should
// be called at most once.
Finish() error
}
type implPProfCpuProfileClientCall struct {
rpc.ClientCall
valRecv []byte
errRecv error
}
func (c *implPProfCpuProfileClientCall) RecvStream() interface {
Advance() bool
Value() []byte
Err() error
} {
return implPProfCpuProfileClientCallRecv{c}
}
type implPProfCpuProfileClientCallRecv struct {
c *implPProfCpuProfileClientCall
}
func (c implPProfCpuProfileClientCallRecv) Advance() bool {
c.c.errRecv = c.c.Recv(&c.c.valRecv)
return c.c.errRecv == nil
}
func (c implPProfCpuProfileClientCallRecv) Value() []byte {
return c.c.valRecv
}
func (c implPProfCpuProfileClientCallRecv) Err() error {
if c.c.errRecv == io.EOF {
return nil
}
return c.c.errRecv
}
func (c *implPProfCpuProfileClientCall) Finish() (err error) {
err = c.ClientCall.Finish()
return
}
// PProfServerMethods is the interface a server writer
// implements for PProf.
type PProfServerMethods interface {
// CmdLine returns the command-line arguments of the server, including
// the name of the executable.
CmdLine(*context.T, rpc.ServerCall) ([]string, error)
// Profiles returns the list of available profiles.
Profiles(*context.T, rpc.ServerCall) ([]string, error)
// Profile streams the requested profile. The debug parameter enables
// additional output. Passing debug=0 includes only the hexadecimal
// addresses that pprof needs. Passing debug=1 adds comments translating
// addresses to function names and line numbers, so that a programmer
// can read the profile without tools.
Profile(_ *context.T, _ PProfProfileServerCall, name string, debug int32) error
// CpuProfile enables CPU profiling for the requested duration and
// streams the profile data.
CpuProfile(_ *context.T, _ PProfCpuProfileServerCall, seconds int32) error
// Symbol looks up the program counters and returns their respective
// function names.
Symbol(_ *context.T, _ rpc.ServerCall, programCounters []uint64) ([]string, error)
}
// PProfServerStubMethods is the server interface containing
// PProf methods, as expected by rpc.Server.
// The only difference between this interface and PProfServerMethods
// is the streaming methods.
type PProfServerStubMethods interface {
// CmdLine returns the command-line arguments of the server, including
// the name of the executable.
CmdLine(*context.T, rpc.ServerCall) ([]string, error)
// Profiles returns the list of available profiles.
Profiles(*context.T, rpc.ServerCall) ([]string, error)
// Profile streams the requested profile. The debug parameter enables
// additional output. Passing debug=0 includes only the hexadecimal
// addresses that pprof needs. Passing debug=1 adds comments translating
// addresses to function names and line numbers, so that a programmer
// can read the profile without tools.
Profile(_ *context.T, _ *PProfProfileServerCallStub, name string, debug int32) error
// CpuProfile enables CPU profiling for the requested duration and
// streams the profile data.
CpuProfile(_ *context.T, _ *PProfCpuProfileServerCallStub, seconds int32) error
// Symbol looks up the program counters and returns their respective
// function names.
Symbol(_ *context.T, _ rpc.ServerCall, programCounters []uint64) ([]string, error)
}
// PProfServerStub adds universal methods to PProfServerStubMethods.
type PProfServerStub interface {
PProfServerStubMethods
// Describe the PProf interfaces.
Describe__() []rpc.InterfaceDesc
}
// PProfServer returns a server stub for PProf.
// It converts an implementation of PProfServerMethods into
// an object that may be used by rpc.Server.
func PProfServer(impl PProfServerMethods) PProfServerStub {
stub := implPProfServerStub{
impl: impl,
}
// Initialize GlobState; always check the stub itself first, to handle the
// case where the user has the Glob method defined in their VDL source.
if gs := rpc.NewGlobState(stub); gs != nil {
stub.gs = gs
} else if gs := rpc.NewGlobState(impl); gs != nil {
stub.gs = gs
}
return stub
}
type implPProfServerStub struct {
impl PProfServerMethods
gs *rpc.GlobState
}
func (s implPProfServerStub) CmdLine(ctx *context.T, call rpc.ServerCall) ([]string, error) {
return s.impl.CmdLine(ctx, call)
}
func (s implPProfServerStub) Profiles(ctx *context.T, call rpc.ServerCall) ([]string, error) {
return s.impl.Profiles(ctx, call)
}
func (s implPProfServerStub) Profile(ctx *context.T, call *PProfProfileServerCallStub, i0 string, i1 int32) error {
return s.impl.Profile(ctx, call, i0, i1)
}
func (s implPProfServerStub) CpuProfile(ctx *context.T, call *PProfCpuProfileServerCallStub, i0 int32) error {
return s.impl.CpuProfile(ctx, call, i0)
}
func (s implPProfServerStub) Symbol(ctx *context.T, call rpc.ServerCall, i0 []uint64) ([]string, error) {
return s.impl.Symbol(ctx, call, i0)
}
func (s implPProfServerStub) Globber() *rpc.GlobState {
return s.gs
}
func (s implPProfServerStub) Describe__() []rpc.InterfaceDesc {
return []rpc.InterfaceDesc{PProfDesc}
}
// PProfDesc describes the PProf interface.
var PProfDesc rpc.InterfaceDesc = descPProf
// descPProf hides the desc to keep godoc clean.
var descPProf = rpc.InterfaceDesc{
Name: "PProf",
PkgPath: "v.io/v23/services/pprof",
Methods: []rpc.MethodDesc{
{
Name: "CmdLine",
Doc: "// CmdLine returns the command-line arguments of the server, including\n// the name of the executable.",
OutArgs: []rpc.ArgDesc{
{"", ``}, // []string
},
Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Debug"))},
},
{
Name: "Profiles",
Doc: "// Profiles returns the list of available profiles.",
OutArgs: []rpc.ArgDesc{
{"", ``}, // []string
},
Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Debug"))},
},
{
Name: "Profile",
Doc: "// Profile streams the requested profile. The debug parameter enables\n// additional output. Passing debug=0 includes only the hexadecimal\n// addresses that pprof needs. Passing debug=1 adds comments translating\n// addresses to function names and line numbers, so that a programmer\n// can read the profile without tools.",
InArgs: []rpc.ArgDesc{
{"name", ``}, // string
{"debug", ``}, // int32
},
Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Debug"))},
},
{
Name: "CpuProfile",
Doc: "// CpuProfile enables CPU profiling for the requested duration and\n// streams the profile data.",
InArgs: []rpc.ArgDesc{
{"seconds", ``}, // int32
},
Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Debug"))},
},
{
Name: "Symbol",
Doc: "// Symbol looks up the program counters and returns their respective\n// function names.",
InArgs: []rpc.ArgDesc{
{"programCounters", ``}, // []uint64
},
OutArgs: []rpc.ArgDesc{
{"", ``}, // []string
},
Tags: []*vdl.Value{vdl.ValueOf(access.Tag("Debug"))},
},
},
}
// PProfProfileServerStream is the server stream for PProf.Profile.
type PProfProfileServerStream interface {
// SendStream returns the send side of the PProf.Profile server stream.
SendStream() interface {
// Send places the item onto the output stream. Returns errors encountered
// while sending. Blocks if there is no buffer space; will unblock when
// buffer space is available.
Send(item []byte) error
}
}
// PProfProfileServerCall represents the context passed to PProf.Profile.
type PProfProfileServerCall interface {
rpc.ServerCall
PProfProfileServerStream
}
// PProfProfileServerCallStub is a wrapper that converts rpc.StreamServerCall into
// a typesafe stub that implements PProfProfileServerCall.
type PProfProfileServerCallStub struct {
rpc.StreamServerCall
}
// Init initializes PProfProfileServerCallStub from rpc.StreamServerCall.
func (s *PProfProfileServerCallStub) Init(call rpc.StreamServerCall) {
s.StreamServerCall = call
}
// SendStream returns the send side of the PProf.Profile server stream.
func (s *PProfProfileServerCallStub) SendStream() interface {
Send(item []byte) error
} {
return implPProfProfileServerCallSend{s}
}
type implPProfProfileServerCallSend struct {
s *PProfProfileServerCallStub
}
func (s implPProfProfileServerCallSend) Send(item []byte) error {
return s.s.Send(item)
}
// PProfCpuProfileServerStream is the server stream for PProf.CpuProfile.
type PProfCpuProfileServerStream interface {
// SendStream returns the send side of the PProf.CpuProfile server stream.
SendStream() interface {
// Send places the item onto the output stream. Returns errors encountered
// while sending. Blocks if there is no buffer space; will unblock when
// buffer space is available.
Send(item []byte) error
}
}
// PProfCpuProfileServerCall represents the context passed to PProf.CpuProfile.
type PProfCpuProfileServerCall interface {
rpc.ServerCall
PProfCpuProfileServerStream
}
// PProfCpuProfileServerCallStub is a wrapper that converts rpc.StreamServerCall into
// a typesafe stub that implements PProfCpuProfileServerCall.
type PProfCpuProfileServerCallStub struct {
rpc.StreamServerCall
}
// Init initializes PProfCpuProfileServerCallStub from rpc.StreamServerCall.
func (s *PProfCpuProfileServerCallStub) Init(call rpc.StreamServerCall) {
s.StreamServerCall = call
}
// SendStream returns the send side of the PProf.CpuProfile server stream.
func (s *PProfCpuProfileServerCallStub) SendStream() interface {
Send(item []byte) error
} {
return implPProfCpuProfileServerCallSend{s}
}
type implPProfCpuProfileServerCallSend struct {
s *PProfCpuProfileServerCallStub
}
func (s implPProfCpuProfileServerCallSend) Send(item []byte) error {
return s.s.Send(item)
}
var __VDLInitCalled bool
// __VDLInit performs vdl initialization. It is safe to call multiple times.
// If you have an init ordering issue, just insert the following line verbatim
// into your source files in this package, right after the "package foo" clause:
//
// var _ = __VDLInit()
//
// The purpose of this function is to ensure that vdl initialization occurs in
// the right order, and very early in the init sequence. In particular, vdl
// registration and package variable initialization needs to occur before
// functions like vdl.TypeOf will work properly.
//
// This function returns a dummy value, so that it can be used to initialize the
// first var in the file, to take advantage of Go's defined init order.
func __VDLInit() struct{} {
if __VDLInitCalled {
return struct{}{}
}
__VDLInitCalled = true
return struct{}{}
}