blob: 0f391e6af1acfec07446a3032691a0e31615b465 [file] [log] [blame]
// build -gcflags=-l=4
// Copyright 2023 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
package p
type Interface interface {
MonitoredResource() (resType string, labels map[string]string)
Done()
}
func Autodetect() Interface {
return func() Interface {
Do(func() {
var ad, gd Interface
go func() {
defer gd.Done()
ad = aad()
}()
go func() {
defer ad.Done()
gd = aad()
defer func() { recover() }()
}()
autoDetected = ad
if gd != nil {
autoDetected = gd
}
})
return autoDetected
}()
}
var autoDetected Interface
var G int
type If int
func (x If) MonitoredResource() (resType string, labels map[string]string) {
return "", nil
}
//go:noinline
func (x If) Done() {
G++
}
//go:noinline
func Do(fn func()) {
fn()
}
//go:noinline
func aad() Interface {
var x If
return x
}