]> Cypherpunks repositories - gostls13.git/commitdiff
runtime/pprof: fix TestCPUProfileWithFork for GOOS=android.
authorHyang-Ah Hana Kim <hyangah@gmail.com>
Fri, 27 Mar 2015 00:02:50 +0000 (20:02 -0400)
committerHyang-Ah Hana Kim <hyangah@gmail.com>
Fri, 27 Mar 2015 18:07:06 +0000 (18:07 +0000)
1) Large allocation in this test caused crash. This was not
detected by builder because builder runs tests with -test.short.

2) The command "go" for forking doesn't exist in some platforms
including android. This change uses the test binary itself which
is guaranteed to exist.

This change also adds logging of the total samples collected in
TestCPUProfileMultithreaded test that is flaky in android-arm
builder.

Change-Id: I225c6b7877d811edef8b25e7eb00559450640c42
Reviewed-on: https://go-review.googlesource.com/8131
Reviewed-by: David Crawshaw <crawshaw@golang.org>
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>

src/runtime/pprof/pprof_test.go

index eeb6d109dd44c64dca5db2e94ae281e853a467db..65d0a0aa8ef87dbd8561d8f2b53ec131120043ef 100644 (file)
@@ -143,7 +143,9 @@ func testCPUProfile(t *testing.T, need []string, f func()) {
 
        // Check that profile is well formed and contains need.
        have := make([]uintptr, len(need))
+       var samples uintptr
        parseProfile(t, prof.Bytes(), func(count uintptr, stk []uintptr) {
+               samples += count
                for _, pc := range stk {
                        f := runtime.FuncForPC(pc)
                        if f == nil {
@@ -156,6 +158,7 @@ func testCPUProfile(t *testing.T, need []string, f func()) {
                        }
                }
        })
+       t.Logf("total %d CPU profile samples collected", samples)
 
        if len(need) == 0 {
                return
@@ -200,6 +203,8 @@ func testCPUProfile(t *testing.T, need []string, f func()) {
        }
 }
 
+// Fork can hang if preempted with signals frequently enough (see issue 5517).
+// Ensure that we do not do this.
 func TestCPUProfileWithFork(t *testing.T) {
        if runtime.GOOS == "darwin" {
                if runtime.GOARCH == "arm" {
@@ -207,9 +212,11 @@ func TestCPUProfileWithFork(t *testing.T) {
                }
        }
 
-       // Fork can hang if preempted with signals frequently enough (see issue 5517).
-       // Ensure that we do not do this.
        heap := 1 << 30
+       if runtime.GOOS == "android" {
+               // Use smaller size for Android to avoid crash.
+               heap = 100 << 20
+       }
        if testing.Short() {
                heap = 100 << 20
        }
@@ -232,7 +239,7 @@ func TestCPUProfileWithFork(t *testing.T) {
        defer StopCPUProfile()
 
        for i := 0; i < 10; i++ {
-               exec.Command("go").CombinedOutput()
+               exec.Command(os.Args[0], "-h").CombinedOutput()
        }
 }