Use a single chromium build for Perf runs if no patches are specified
BUG=skia:6681
Change-Id: I0bc3b6b7f9ca1693d539410c2bf1012d74a7c113
Reviewed-on: https://skia-review.googlesource.com/18031
Reviewed-by: Ravi Mistry <rmistry@google.com>
diff --git a/ct/go/master_scripts/run_chromium_perf_on_workers/main.go b/ct/go/master_scripts/run_chromium_perf_on_workers/main.go
index f336634..680f66a 100644
--- a/ct/go/master_scripts/run_chromium_perf_on_workers/main.go
+++ b/ct/go/master_scripts/run_chromium_perf_on_workers/main.go
@@ -171,21 +171,42 @@
benchmarkPatchLink = util.GCS_HTTP_LINK + filepath.Join(util.GCSBucketName, remoteOutputDir, benchmarkPatchName)
customWebpagesLink = util.GCS_HTTP_LINK + filepath.Join(util.GCSBucketName, remoteOutputDir, customWebpagesName)
- // Create the two required chromium builds (with patch and without the patch).
- chromiumBuilds, err := util.TriggerBuildRepoSwarmingTask(
- "build_chromium", *runID, "chromium", *targetPlatform, []string{},
- []string{filepath.Join(remoteOutputDir, chromiumPatchName), filepath.Join(remoteOutputDir, skiaPatchName)},
- /*singlebuild*/ false, 3*time.Hour, 1*time.Hour)
- if err != nil {
- sklog.Errorf("Error encountered when swarming build repo task: %s", err)
- return
+ // Check if the patches have any content to decide if we need one or two chromium builds.
+ localPatches := []string{filepath.Join(os.TempDir(), chromiumPatchName), filepath.Join(os.TempDir(), skiaPatchName)}
+ remotePatches := []string{filepath.Join(remoteOutputDir, chromiumPatchName), filepath.Join(remoteOutputDir, skiaPatchName)}
+ var chromiumBuildNoPatch, chromiumBuildWithPatch string
+ if util.PatchesAreEmpty(localPatches) {
+ // Create only one chromium build.
+ chromiumBuilds, err := util.TriggerBuildRepoSwarmingTask(
+ "build_chromium", *runID, "chromium", *targetPlatform, []string{}, remotePatches,
+ /*singlebuild*/ true, 3*time.Hour, 1*time.Hour)
+ if err != nil {
+ sklog.Errorf("Error encountered when swarming build repo task: %s", err)
+ return
+ }
+ if len(chromiumBuilds) != 1 {
+ sklog.Errorf("Expected 1 build but instead got %d: %v.", len(chromiumBuilds), chromiumBuilds)
+ return
+ }
+ chromiumBuildNoPatch = chromiumBuilds[0]
+ chromiumBuildWithPatch = chromiumBuilds[0]
+
+ } else {
+ // Create the two required chromium builds (with patch and without the patch).
+ chromiumBuilds, err := util.TriggerBuildRepoSwarmingTask(
+ "build_chromium", *runID, "chromium", *targetPlatform, []string{}, remotePatches,
+ /*singlebuild*/ false, 3*time.Hour, 1*time.Hour)
+ if err != nil {
+ sklog.Errorf("Error encountered when swarming build repo task: %s", err)
+ return
+ }
+ if len(chromiumBuilds) != 2 {
+ sklog.Errorf("Expected 2 builds but instead got %d: %v.", len(chromiumBuilds), chromiumBuilds)
+ return
+ }
+ chromiumBuildNoPatch = chromiumBuilds[0]
+ chromiumBuildWithPatch = chromiumBuilds[1]
}
- if len(chromiumBuilds) != 2 {
- sklog.Errorf("Expected 2 builds but instead got %d: %v.", len(chromiumBuilds), chromiumBuilds)
- return
- }
- chromiumBuildNoPatch := chromiumBuilds[0]
- chromiumBuildWithPatch := chromiumBuilds[1]
// Parse out the Chromium and Skia hashes.
chromiumHash, skiaHash := util.GetHashesFromBuild(chromiumBuildNoPatch)
diff --git a/ct/go/util/chromium_builds.go b/ct/go/util/chromium_builds.go
index fa2e1ef..0f81e9e 100644
--- a/ct/go/util/chromium_builds.go
+++ b/ct/go/util/chromium_builds.go
@@ -298,3 +298,13 @@
}
return nil
}
+
+func PatchesAreEmpty(patches []string) bool {
+ for _, p := range patches {
+ fInfo, err := os.Stat(p)
+ if err == nil && fInfo.Size() > 10 {
+ return false
+ }
+ }
+ return true
+}
diff --git a/ct/go/util/util.go b/ct/go/util/util.go
index 31706ec..68f4ded 100644
--- a/ct/go/util/util.go
+++ b/ct/go/util/util.go
@@ -383,6 +383,10 @@
}
s, err := swarming.NewSwarmingClient(workDir, swarming.SWARMING_SERVER_PRIVATE, isolate.ISOLATE_SERVER_URL_PRIVATE)
if err != nil {
+ // Cleanup workdir.
+ if err := os.RemoveAll(workDir); err != nil {
+ sklog.Errorf("Could not cleanup swarming work dir: %s", err)
+ }
return 0, fmt.Errorf("Could not instantiate swarming client: %s", err)
}
defer s.Cleanup()
@@ -730,6 +734,10 @@
}
s, err := swarming.NewSwarmingClient(workDir, swarming.SWARMING_SERVER_PRIVATE, isolate.ISOLATE_SERVER_URL_PRIVATE)
if err != nil {
+ // Cleanup workdir.
+ if err := os.RemoveAll(workDir); err != nil {
+ sklog.Errorf("Could not cleanup swarming work dir: %s", err)
+ }
return nil, fmt.Errorf("Could not instantiate swarming client: %s", err)
}
defer s.Cleanup()
diff --git a/ct/go/worker_scripts/run_chromium_perf/main.go b/ct/go/worker_scripts/run_chromium_perf/main.go
index b74de41..14bc9b9 100644
--- a/ct/go/worker_scripts/run_chromium_perf/main.go
+++ b/ct/go/worker_scripts/run_chromium_perf/main.go
@@ -134,8 +134,13 @@
customWebpages = customWebpages[startIndex:endIndex]
}
+ chromiumBuilds := []string{*chromiumBuildNoPatch}
+ // No point downloading the same build twice. Download only if builds are different.
+ if *chromiumBuildNoPatch != *chromiumBuildWithPatch {
+ chromiumBuilds = append(chromiumBuilds, *chromiumBuildWithPatch)
+ }
// Download the specified chromium builds.
- for _, chromiumBuild := range []string{*chromiumBuildNoPatch, *chromiumBuildWithPatch} {
+ for _, chromiumBuild := range chromiumBuilds {
if err := gs.DownloadChromiumBuild(chromiumBuild); err != nil {
return err
}