github.com/llvm-mirror/llgo@v0.0.0-20190322182713-bf6f0a60fce1/third_party/gofrontend/libgo/go/runtime/debug.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package runtime 6 7 // Breakpoint executes a breakpoint trap. 8 func Breakpoint() 9 10 // LockOSThread wires the calling goroutine to its current operating system thread. 11 // Until the calling goroutine exits or calls UnlockOSThread, it will always 12 // execute in that thread, and no other goroutine can. 13 func LockOSThread() 14 15 // UnlockOSThread unwires the calling goroutine from its fixed operating system thread. 16 // If the calling goroutine has not called LockOSThread, UnlockOSThread is a no-op. 17 func UnlockOSThread() 18 19 // GOMAXPROCS sets the maximum number of CPUs that can be executing 20 // simultaneously and returns the previous setting. If n < 1, it does not 21 // change the current setting. 22 // The number of logical CPUs on the local machine can be queried with NumCPU. 23 // This call will go away when the scheduler improves. 24 func GOMAXPROCS(n int) int 25 26 // NumCPU returns the number of logical CPUs on the local machine. 27 func NumCPU() int 28 29 // NumCgoCall returns the number of cgo calls made by the current process. 30 func NumCgoCall() int64 31 32 // NumGoroutine returns the number of goroutines that currently exist. 33 func NumGoroutine() int 34 35 // MemProfileRate controls the fraction of memory allocations 36 // that are recorded and reported in the memory profile. 37 // The profiler aims to sample an average of 38 // one allocation per MemProfileRate bytes allocated. 39 // 40 // To include every allocated block in the profile, set MemProfileRate to 1. 41 // To turn off profiling entirely, set MemProfileRate to 0. 42 // 43 // The tools that process the memory profiles assume that the 44 // profile rate is constant across the lifetime of the program 45 // and equal to the current value. Programs that change the 46 // memory profiling rate should do so just once, as early as 47 // possible in the execution of the program (for example, 48 // at the beginning of main). 49 var MemProfileRate int = 512 * 1024 50 51 // A MemProfileRecord describes the live objects allocated 52 // by a particular call sequence (stack trace). 53 type MemProfileRecord struct { 54 AllocBytes, FreeBytes int64 // number of bytes allocated, freed 55 AllocObjects, FreeObjects int64 // number of objects allocated, freed 56 Stack0 [32]uintptr // stack trace for this record; ends at first 0 entry 57 } 58 59 // InUseBytes returns the number of bytes in use (AllocBytes - FreeBytes). 60 func (r *MemProfileRecord) InUseBytes() int64 { return r.AllocBytes - r.FreeBytes } 61 62 // InUseObjects returns the number of objects in use (AllocObjects - FreeObjects). 63 func (r *MemProfileRecord) InUseObjects() int64 { 64 return r.AllocObjects - r.FreeObjects 65 } 66 67 // Stack returns the stack trace associated with the record, 68 // a prefix of r.Stack0. 69 func (r *MemProfileRecord) Stack() []uintptr { 70 for i, v := range r.Stack0 { 71 if v == 0 { 72 return r.Stack0[0:i] 73 } 74 } 75 return r.Stack0[0:] 76 } 77 78 // MemProfile returns n, the number of records in the current memory profile. 79 // If len(p) >= n, MemProfile copies the profile into p and returns n, true. 80 // If len(p) < n, MemProfile does not change p and returns n, false. 81 // 82 // If inuseZero is true, the profile includes allocation records 83 // where r.AllocBytes > 0 but r.AllocBytes == r.FreeBytes. 84 // These are sites where memory was allocated, but it has all 85 // been released back to the runtime. 86 // 87 // Most clients should use the runtime/pprof package or 88 // the testing package's -test.memprofile flag instead 89 // of calling MemProfile directly. 90 func MemProfile(p []MemProfileRecord, inuseZero bool) (n int, ok bool) 91 92 // A StackRecord describes a single execution stack. 93 type StackRecord struct { 94 Stack0 [32]uintptr // stack trace for this record; ends at first 0 entry 95 } 96 97 // Stack returns the stack trace associated with the record, 98 // a prefix of r.Stack0. 99 func (r *StackRecord) Stack() []uintptr { 100 for i, v := range r.Stack0 { 101 if v == 0 { 102 return r.Stack0[0:i] 103 } 104 } 105 return r.Stack0[0:] 106 } 107 108 // ThreadCreateProfile returns n, the number of records in the thread creation profile. 109 // If len(p) >= n, ThreadCreateProfile copies the profile into p and returns n, true. 110 // If len(p) < n, ThreadCreateProfile does not change p and returns n, false. 111 // 112 // Most clients should use the runtime/pprof package instead 113 // of calling ThreadCreateProfile directly. 114 func ThreadCreateProfile(p []StackRecord) (n int, ok bool) 115 116 // GoroutineProfile returns n, the number of records in the active goroutine stack profile. 117 // If len(p) >= n, GoroutineProfile copies the profile into p and returns n, true. 118 // If len(p) < n, GoroutineProfile does not change p and returns n, false. 119 // 120 // Most clients should use the runtime/pprof package instead 121 // of calling GoroutineProfile directly. 122 func GoroutineProfile(p []StackRecord) (n int, ok bool) 123 124 // CPUProfile returns the next chunk of binary CPU profiling stack trace data, 125 // blocking until data is available. If profiling is turned off and all the profile 126 // data accumulated while it was on has been returned, CPUProfile returns nil. 127 // The caller must save the returned data before calling CPUProfile again. 128 // 129 // Most clients should use the runtime/pprof package or 130 // the testing package's -test.cpuprofile flag instead of calling 131 // CPUProfile directly. 132 func CPUProfile() []byte 133 134 // SetCPUProfileRate sets the CPU profiling rate to hz samples per second. 135 // If hz <= 0, SetCPUProfileRate turns off profiling. 136 // If the profiler is on, the rate cannot be changed without first turning it off. 137 // 138 // Most clients should use the runtime/pprof package or 139 // the testing package's -test.cpuprofile flag instead of calling 140 // SetCPUProfileRate directly. 141 func SetCPUProfileRate(hz int) 142 143 // SetBlockProfileRate controls the fraction of goroutine blocking events 144 // that are reported in the blocking profile. The profiler aims to sample 145 // an average of one blocking event per rate nanoseconds spent blocked. 146 // 147 // To include every blocking event in the profile, pass rate = 1. 148 // To turn off profiling entirely, pass rate <= 0. 149 func SetBlockProfileRate(rate int) 150 151 // BlockProfileRecord describes blocking events originated 152 // at a particular call sequence (stack trace). 153 type BlockProfileRecord struct { 154 Count int64 155 Cycles int64 156 StackRecord 157 } 158 159 // BlockProfile returns n, the number of records in the current blocking profile. 160 // If len(p) >= n, BlockProfile copies the profile into p and returns n, true. 161 // If len(p) < n, BlockProfile does not change p and returns n, false. 162 // 163 // Most clients should use the runtime/pprof package or 164 // the testing package's -test.blockprofile flag instead 165 // of calling BlockProfile directly. 166 func BlockProfile(p []BlockProfileRecord) (n int, ok bool) 167 168 // Stack formats a stack trace of the calling goroutine into buf 169 // and returns the number of bytes written to buf. 170 // If all is true, Stack formats stack traces of all other goroutines 171 // into buf after the trace for the current goroutine. 172 func Stack(buf []byte, all bool) int 173 174 // Get field tracking information. Only fields with a tag go:"track" 175 // are tracked. This function will add every such field that is 176 // referenced to the map. The keys in the map will be 177 // PkgPath.Name.FieldName. The value will be true for each field 178 // added. 179 func Fieldtrack(map[string]bool)