From 39bc78845bba57db02a88b52a47fcd8dba109c3d Mon Sep 17 00:00:00 2001 From: Hyang-Ah Hana Kim Date: Thu, 26 Mar 2015 20:02:50 -0400 Subject: [PATCH] runtime/pprof: fix TestCPUProfileWithFork for GOOS=android. 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 Run-TryBot: Hyang-Ah Hana Kim TryBot-Result: Gobot Gobot --- src/runtime/pprof/pprof_test.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/runtime/pprof/pprof_test.go b/src/runtime/pprof/pprof_test.go index eeb6d109dd..65d0a0aa8e 100644 --- a/src/runtime/pprof/pprof_test.go +++ b/src/runtime/pprof/pprof_test.go @@ -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() } } -- 2.48.1