diff options
Diffstat (limited to 'infra/bots/recipe_modules/flavor')
9 files changed, 625 insertions, 180 deletions
diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-All-Android.json index 29cf14260a..a583f1239f 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-All-Android.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-NexusPlayer-GPU-PowerVR-x86-Debug-All-Android.json @@ -762,9 +762,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/usr/bin/adb.1.0.35", - "2" + "2", + "userspace" ], "env": { "BUILDTYPE": "Debug", @@ -773,7 +774,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 2", + "name": "Set CPU 2's governor to userspace", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -783,6 +784,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -790,12 +792,12 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", - "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", "@@@STEP_LOG_END@python.inline@@@" ] @@ -804,9 +806,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n 'cat %s/scaling_available_frequencies' % root])\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n available_freqs = sorted(\n int(i) for i in available_freqs.strip().split())\nelse:\n raise Exception('Could not get list of available frequencies: %s' %\n available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n if f <= target:\n freq = f\n break\n\nprint 'Setting frequency to %d' % freq\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '%s/scaling_min_freq' % root])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '%s/scaling_cur_freq' % root]).strip()\nif actual_freq != str(freq):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_freq, freq))\n", "/usr/bin/adb.1.0.35", - "3" + "0.6", + "2" ], "env": { "BUILDTYPE": "Debug", @@ -815,7 +818,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 3", + "name": "Scale CPU 2 to 0.600000", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -824,21 +827,54 @@ "@@@STEP_LOG_LINE@python.inline@import sys@@@", "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@target_percent = float(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", "@@@STEP_LOG_LINE@python.inline@print log@@@", "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@root = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# All devices we test on give a list of their available frequencies.@@@", + "@@@STEP_LOG_LINE@python.inline@available_freqs = subprocess.check_output([ADB, 'shell',@@@", + "@@@STEP_LOG_LINE@python.inline@ 'cat %s/scaling_available_frequencies' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# Check for message like '/system/bin/sh: file not found'@@@", + "@@@STEP_LOG_LINE@python.inline@if available_freqs and '/system/bin/sh' not in available_freqs:@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs = sorted(@@@", + "@@@STEP_LOG_LINE@python.inline@ int(i) for i in available_freqs.strip().split())@@@", + "@@@STEP_LOG_LINE@python.inline@else:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('Could not get list of available frequencies: %s' %@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@maxfreq = available_freqs[-1]@@@", + "@@@STEP_LOG_LINE@python.inline@target = int(round(maxfreq * target_percent))@@@", + "@@@STEP_LOG_LINE@python.inline@freq = maxfreq@@@", + "@@@STEP_LOG_LINE@python.inline@for f in reversed(available_freqs):@@@", + "@@@STEP_LOG_LINE@python.inline@ if f <= target:@@@", + "@@@STEP_LOG_LINE@python.inline@ freq = f@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@print 'Setting frequency to %d' % freq@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If scaling_max_freq is lower than our attempted setting, it won't take.@@@", + "@@@STEP_LOG_LINE@python.inline@# We must set min first, because if we try to set max to be less than min@@@", + "@@@STEP_LOG_LINE@python.inline@# (which sometimes happens after certain devices reboot) it returns a@@@", + "@@@STEP_LOG_LINE@python.inline@# perplexing permissions error.@@@", "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_min_freq' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_max_freq' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_setspeed' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@time.sleep(5)@@@", + "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_cur_freq' % root]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_freq != str(freq):@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_freq, freq))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json index 8428bbc0b1..4fd500c396 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Perf-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json @@ -644,7 +644,7 @@ "-u", "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/usr/bin/adb.1.0.35", - "0", + "2", "userspace" ], "env": { @@ -654,7 +654,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Set CPU 0's governor to userspace", + "name": "Set CPU 2's governor to userspace", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -689,7 +689,7 @@ "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n 'cat %s/scaling_available_frequencies' % root])\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n available_freqs = sorted(\n int(i) for i in available_freqs.strip().split())\nelse:\n raise Exception('Could not get list of available frequencies: %s' %\n available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n if f <= target:\n freq = f\n break\n\nprint 'Setting frequency to %d' % freq\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '%s/scaling_min_freq' % root])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '%s/scaling_cur_freq' % root]).strip()\nif actual_freq != str(freq):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_freq, freq))\n", "/usr/bin/adb.1.0.35", "0.6", - "0" + "2" ], "env": { "BUILDTYPE": "Debug", @@ -698,7 +698,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Scale CPU 0 to 0.600000", + "name": "Scale CPU 2 to 0.600000", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -762,9 +762,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", "/usr/bin/adb.1.0.35", - "2" + "0", + "0" ], "env": { "BUILDTYPE": "Debug", @@ -773,7 +774,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 2", + "name": "Disabling CPU 0", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -783,6 +784,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -790,13 +792,21 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, @@ -804,9 +814,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", "/usr/bin/adb.1.0.35", - "3" + "1", + "0" ], "env": { "BUILDTYPE": "Debug", @@ -815,7 +826,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 3", + "name": "Disabling CPU 1", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -825,6 +836,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -832,13 +844,21 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json index 11f0d75ee0..caa17bda53 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Nexus5x-GPU-Adreno418-arm64-Debug-All-Android.json @@ -642,10 +642,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", "/opt/infra-android/tools/adb", - "4", - "ondemand" + "0", + "1" ], "env": { "BUILDTYPE": "Debug", @@ -654,7 +654,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Set CPU 4's governor to ondemand", + "name": "Enabling CPU 0", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -664,7 +664,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", - "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -672,13 +672,177 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", + "/opt/infra-android/tools/adb", + "1", + "1" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[START_DIR]/out" + }, + "infra_step": true, + "name": "Enabling CPU 1", + "timeout": 30, + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", + "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", + "@@@STEP_LOG_LINE@python.inline@print log@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", + "/opt/infra-android/tools/adb", + "2", + "1" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[START_DIR]/out" + }, + "infra_step": true, + "name": "Enabling CPU 2", + "timeout": 30, + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", + "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", + "@@@STEP_LOG_LINE@python.inline@print log@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", + "/opt/infra-android/tools/adb", + "3", + "1" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[START_DIR]/out" + }, + "infra_step": true, + "name": "Enabling CPU 3", + "timeout": 30, + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", + "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", + "@@@STEP_LOG_LINE@python.inline@print log@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, @@ -688,7 +852,7 @@ "-u", "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/opt/infra-android/tools/adb", - "0", + "4", "ondemand" ], "env": { @@ -698,7 +862,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Set CPU 0's governor to ondemand", + "name": "Set CPU 4's governor to ondemand", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json index b09404dfaf..240810d420 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/Test-Android-Clang-Pixel-GPU-Adreno530-arm64-Debug-All-Android.json @@ -642,10 +642,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", "/usr/bin/adb.1.0.35", - "2", - "ondemand" + "0", + "1" ], "env": { "BUILDTYPE": "Debug", @@ -654,7 +654,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Set CPU 2's governor to ondemand", + "name": "Enabling CPU 0", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -664,7 +664,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", - "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -672,13 +672,73 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", - "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", + "@@@STEP_LOG_END@python.inline@@@" + ] + }, + { + "cmd": [ + "python", + "-u", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\nvalue = int(sys.argv[3])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\n# If we try to echo 1 to an already online cpu, adb returns exit code 1.\n# So, check the value before trying to write it.\nprior_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif prior_status == str(value):\n print 'CPU %d online already %d' % (cpu, value)\n sys.exit()\n\nsubprocess.check_output([ADB, 'shell', 'echo %s > '\n '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(value):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_status, value))\n", + "/usr/bin/adb.1.0.35", + "1", + "1" + ], + "env": { + "BUILDTYPE": "Debug", + "CHROME_HEADLESS": "1", + "PATH": "<PATH>:RECIPE_PACKAGE_REPO[depot_tools]", + "SKIA_OUT": "[START_DIR]/out" + }, + "infra_step": true, + "name": "Enabling CPU 1", + "timeout": 30, + "~followup_annotations": [ + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@import os@@@", + "@@@STEP_LOG_LINE@python.inline@import subprocess@@@", + "@@@STEP_LOG_LINE@python.inline@import sys@@@", + "@@@STEP_LOG_LINE@python.inline@import time@@@", + "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@value = int(sys.argv[3])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", + "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", + "@@@STEP_LOG_LINE@python.inline@print log@@@", + "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If we try to echo 1 to an already online cpu, adb returns exit code 1.@@@", + "@@@STEP_LOG_LINE@python.inline@# So, check the value before trying to write it.@@@", + "@@@STEP_LOG_LINE@python.inline@prior_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if prior_status == str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ print 'CPU %d online already %d' % (cpu, value)@@@", + "@@@STEP_LOG_LINE@python.inline@ sys.exit()@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %s > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_status != str(value):@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_status, value))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, @@ -688,7 +748,7 @@ "-u", "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/usr/bin/adb.1.0.35", - "0", + "2", "ondemand" ], "env": { @@ -698,7 +758,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Set CPU 0's governor to ondemand", + "name": "Set CPU 2's governor to ondemand", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json b/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json index 56a8b85170..592125e87d 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/cpu_scale_failed.json @@ -840,9 +840,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/usr/bin/adb.1.0.35", - "2" + "2", + "userspace" ], "env": { "BUILDTYPE": "Debug", @@ -851,7 +852,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 2", + "name": "Set CPU 2's governor to userspace", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -861,6 +862,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -868,12 +870,12 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", - "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", "@@@STEP_LOG_END@python.inline@@@" ] @@ -882,9 +884,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n 'cat %s/scaling_available_frequencies' % root])\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n available_freqs = sorted(\n int(i) for i in available_freqs.strip().split())\nelse:\n raise Exception('Could not get list of available frequencies: %s' %\n available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n if f <= target:\n freq = f\n break\n\nprint 'Setting frequency to %d' % freq\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '%s/scaling_min_freq' % root])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '%s/scaling_cur_freq' % root]).strip()\nif actual_freq != str(freq):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_freq, freq))\n", "/usr/bin/adb.1.0.35", - "3" + "0.6", + "2" ], "env": { "BUILDTYPE": "Debug", @@ -893,7 +896,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 3", + "name": "Scale CPU 2 to 0.600000", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -902,21 +905,54 @@ "@@@STEP_LOG_LINE@python.inline@import sys@@@", "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@target_percent = float(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", "@@@STEP_LOG_LINE@python.inline@print log@@@", "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@root = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# All devices we test on give a list of their available frequencies.@@@", + "@@@STEP_LOG_LINE@python.inline@available_freqs = subprocess.check_output([ADB, 'shell',@@@", + "@@@STEP_LOG_LINE@python.inline@ 'cat %s/scaling_available_frequencies' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# Check for message like '/system/bin/sh: file not found'@@@", + "@@@STEP_LOG_LINE@python.inline@if available_freqs and '/system/bin/sh' not in available_freqs:@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs = sorted(@@@", + "@@@STEP_LOG_LINE@python.inline@ int(i) for i in available_freqs.strip().split())@@@", + "@@@STEP_LOG_LINE@python.inline@else:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('Could not get list of available frequencies: %s' %@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@maxfreq = available_freqs[-1]@@@", + "@@@STEP_LOG_LINE@python.inline@target = int(round(maxfreq * target_percent))@@@", + "@@@STEP_LOG_LINE@python.inline@freq = maxfreq@@@", + "@@@STEP_LOG_LINE@python.inline@for f in reversed(available_freqs):@@@", + "@@@STEP_LOG_LINE@python.inline@ if f <= target:@@@", + "@@@STEP_LOG_LINE@python.inline@ freq = f@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@print 'Setting frequency to %d' % freq@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If scaling_max_freq is lower than our attempted setting, it won't take.@@@", + "@@@STEP_LOG_LINE@python.inline@# We must set min first, because if we try to set max to be less than min@@@", + "@@@STEP_LOG_LINE@python.inline@# (which sometimes happens after certain devices reboot) it returns a@@@", + "@@@STEP_LOG_LINE@python.inline@# perplexing permissions error.@@@", "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_min_freq' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_max_freq' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_setspeed' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@time.sleep(5)@@@", + "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_cur_freq' % root]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_freq != str(freq):@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_freq, freq))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json index 9a8ef6c86e..55ffab776c 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_infra_step.json @@ -762,9 +762,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/usr/bin/adb.1.0.35", - "2" + "2", + "userspace" ], "env": { "BUILDTYPE": "Debug", @@ -773,7 +774,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 2", + "name": "Set CPU 2's governor to userspace", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -783,6 +784,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -790,12 +792,12 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", - "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", "@@@STEP_LOG_END@python.inline@@@" ] @@ -804,9 +806,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n 'cat %s/scaling_available_frequencies' % root])\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n available_freqs = sorted(\n int(i) for i in available_freqs.strip().split())\nelse:\n raise Exception('Could not get list of available frequencies: %s' %\n available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n if f <= target:\n freq = f\n break\n\nprint 'Setting frequency to %d' % freq\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '%s/scaling_min_freq' % root])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '%s/scaling_cur_freq' % root]).strip()\nif actual_freq != str(freq):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_freq, freq))\n", "/usr/bin/adb.1.0.35", - "3" + "0.6", + "2" ], "env": { "BUILDTYPE": "Debug", @@ -815,7 +818,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 3", + "name": "Scale CPU 2 to 0.600000", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -824,21 +827,54 @@ "@@@STEP_LOG_LINE@python.inline@import sys@@@", "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@target_percent = float(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", "@@@STEP_LOG_LINE@python.inline@print log@@@", "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@root = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# All devices we test on give a list of their available frequencies.@@@", + "@@@STEP_LOG_LINE@python.inline@available_freqs = subprocess.check_output([ADB, 'shell',@@@", + "@@@STEP_LOG_LINE@python.inline@ 'cat %s/scaling_available_frequencies' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# Check for message like '/system/bin/sh: file not found'@@@", + "@@@STEP_LOG_LINE@python.inline@if available_freqs and '/system/bin/sh' not in available_freqs:@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs = sorted(@@@", + "@@@STEP_LOG_LINE@python.inline@ int(i) for i in available_freqs.strip().split())@@@", + "@@@STEP_LOG_LINE@python.inline@else:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('Could not get list of available frequencies: %s' %@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@maxfreq = available_freqs[-1]@@@", + "@@@STEP_LOG_LINE@python.inline@target = int(round(maxfreq * target_percent))@@@", + "@@@STEP_LOG_LINE@python.inline@freq = maxfreq@@@", + "@@@STEP_LOG_LINE@python.inline@for f in reversed(available_freqs):@@@", + "@@@STEP_LOG_LINE@python.inline@ if f <= target:@@@", + "@@@STEP_LOG_LINE@python.inline@ freq = f@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@print 'Setting frequency to %d' % freq@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If scaling_max_freq is lower than our attempted setting, it won't take.@@@", + "@@@STEP_LOG_LINE@python.inline@# We must set min first, because if we try to set max to be less than min@@@", + "@@@STEP_LOG_LINE@python.inline@# (which sometimes happens after certain devices reboot) it returns a@@@", + "@@@STEP_LOG_LINE@python.inline@# perplexing permissions error.@@@", "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_min_freq' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_max_freq' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_setspeed' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@time.sleep(5)@@@", + "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_cur_freq' % root]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_freq != str(freq):@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_freq, freq))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json index 6508c98600..d091841ddd 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/failed_read_version.json @@ -816,9 +816,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/usr/bin/adb.1.0.35", - "2" + "2", + "userspace" ], "env": { "BUILDTYPE": "Debug", @@ -827,7 +828,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 2", + "name": "Set CPU 2's governor to userspace", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -837,6 +838,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -844,12 +846,12 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", - "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", "@@@STEP_LOG_END@python.inline@@@" ] @@ -858,9 +860,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n 'cat %s/scaling_available_frequencies' % root])\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n available_freqs = sorted(\n int(i) for i in available_freqs.strip().split())\nelse:\n raise Exception('Could not get list of available frequencies: %s' %\n available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n if f <= target:\n freq = f\n break\n\nprint 'Setting frequency to %d' % freq\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '%s/scaling_min_freq' % root])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '%s/scaling_cur_freq' % root]).strip()\nif actual_freq != str(freq):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_freq, freq))\n", "/usr/bin/adb.1.0.35", - "3" + "0.6", + "2" ], "env": { "BUILDTYPE": "Debug", @@ -869,7 +872,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 3", + "name": "Scale CPU 2 to 0.600000", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -878,21 +881,54 @@ "@@@STEP_LOG_LINE@python.inline@import sys@@@", "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@target_percent = float(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", "@@@STEP_LOG_LINE@python.inline@print log@@@", "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@root = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# All devices we test on give a list of their available frequencies.@@@", + "@@@STEP_LOG_LINE@python.inline@available_freqs = subprocess.check_output([ADB, 'shell',@@@", + "@@@STEP_LOG_LINE@python.inline@ 'cat %s/scaling_available_frequencies' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# Check for message like '/system/bin/sh: file not found'@@@", + "@@@STEP_LOG_LINE@python.inline@if available_freqs and '/system/bin/sh' not in available_freqs:@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs = sorted(@@@", + "@@@STEP_LOG_LINE@python.inline@ int(i) for i in available_freqs.strip().split())@@@", + "@@@STEP_LOG_LINE@python.inline@else:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('Could not get list of available frequencies: %s' %@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@maxfreq = available_freqs[-1]@@@", + "@@@STEP_LOG_LINE@python.inline@target = int(round(maxfreq * target_percent))@@@", + "@@@STEP_LOG_LINE@python.inline@freq = maxfreq@@@", + "@@@STEP_LOG_LINE@python.inline@for f in reversed(available_freqs):@@@", + "@@@STEP_LOG_LINE@python.inline@ if f <= target:@@@", + "@@@STEP_LOG_LINE@python.inline@ freq = f@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@print 'Setting frequency to %d' % freq@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If scaling_max_freq is lower than our attempted setting, it won't take.@@@", + "@@@STEP_LOG_LINE@python.inline@# We must set min first, because if we try to set max to be less than min@@@", + "@@@STEP_LOG_LINE@python.inline@# (which sometimes happens after certain devices reboot) it returns a@@@", + "@@@STEP_LOG_LINE@python.inline@# perplexing permissions error.@@@", "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_min_freq' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_max_freq' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_setspeed' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@time.sleep(5)@@@", + "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_cur_freq' % root]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_freq != str(freq):@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_freq, freq))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, diff --git a/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json b/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json index 83f7dfd673..9e010c6169 100644 --- a/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json +++ b/infra/bots/recipe_modules/flavor/examples/full.expected/retry_adb_command.json @@ -816,9 +816,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\ngov = sys.argv[3]\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo \"%s\" > '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])\nactual_gov = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()\nif actual_gov != gov:\n raise Exception('(actual, expected) (%s, %s)'\n % (actual_gov, gov))\n", "/usr/bin/adb.1.0.35", - "2" + "2", + "userspace" ], "env": { "BUILDTYPE": "Debug", @@ -827,7 +828,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 2", + "name": "Set CPU 2's governor to userspace", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -837,6 +838,7 @@ "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@gov = sys.argv[3]@@@", "@@@STEP_LOG_LINE@python.inline@@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", @@ -844,12 +846,12 @@ "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", - "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", - "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo \"%s\" > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % (gov, cpu)])@@@", + "@@@STEP_LOG_LINE@python.inline@actual_gov = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/cpufreq/scaling_governor' % cpu]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_gov != gov:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %s)'@@@", "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", "@@@STEP_LOG_END@python.inline@@@" ] @@ -858,9 +860,10 @@ "cmd": [ "python", "-u", - "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ncpu = int(sys.argv[2])\n\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '/sys/devices/system/cpu/cpu%d/online' % cpu])\nactual_status = subprocess.check_output([ADB, 'shell', 'cat '\n '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()\nif actual_status != str(0):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_gov, gov))\n", + "\nimport os\nimport subprocess\nimport sys\nimport time\nADB = sys.argv[1]\ntarget_percent = float(sys.argv[2])\ncpu = int(sys.argv[3])\nlog = subprocess.check_output([ADB, 'root'])\n# check for message like 'adbd cannot run as root in production builds'\nprint log\nif 'cannot' in log:\n raise Exception('adb root failed')\n\nroot = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu\n\n# All devices we test on give a list of their available frequencies.\navailable_freqs = subprocess.check_output([ADB, 'shell',\n 'cat %s/scaling_available_frequencies' % root])\n\n# Check for message like '/system/bin/sh: file not found'\nif available_freqs and '/system/bin/sh' not in available_freqs:\n available_freqs = sorted(\n int(i) for i in available_freqs.strip().split())\nelse:\n raise Exception('Could not get list of available frequencies: %s' %\n available_freqs)\n\nmaxfreq = available_freqs[-1]\ntarget = int(round(maxfreq * target_percent))\nfreq = maxfreq\nfor f in reversed(available_freqs):\n if f <= target:\n freq = f\n break\n\nprint 'Setting frequency to %d' % freq\n\n# If scaling_max_freq is lower than our attempted setting, it won't take.\n# We must set min first, because if we try to set max to be less than min\n# (which sometimes happens after certain devices reboot) it returns a\n# perplexing permissions error.\nsubprocess.check_output([ADB, 'shell', 'echo 0 > '\n '%s/scaling_min_freq' % root])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_max_freq' % (freq, root)])\nsubprocess.check_output([ADB, 'shell', 'echo %d > '\n '%s/scaling_setspeed' % (freq, root)])\ntime.sleep(5)\nactual_freq = subprocess.check_output([ADB, 'shell', 'cat '\n '%s/scaling_cur_freq' % root]).strip()\nif actual_freq != str(freq):\n raise Exception('(actual, expected) (%s, %d)'\n % (actual_freq, freq))\n", "/usr/bin/adb.1.0.35", - "3" + "0.6", + "2" ], "env": { "BUILDTYPE": "Debug", @@ -869,7 +872,7 @@ "SKIA_OUT": "[START_DIR]/out" }, "infra_step": true, - "name": "Disabling CPU 3", + "name": "Scale CPU 2 to 0.600000", "timeout": 30, "~followup_annotations": [ "@@@STEP_LOG_LINE@python.inline@@@@", @@ -878,21 +881,54 @@ "@@@STEP_LOG_LINE@python.inline@import sys@@@", "@@@STEP_LOG_LINE@python.inline@import time@@@", "@@@STEP_LOG_LINE@python.inline@ADB = sys.argv[1]@@@", - "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[2])@@@", - "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@target_percent = float(sys.argv[2])@@@", + "@@@STEP_LOG_LINE@python.inline@cpu = int(sys.argv[3])@@@", "@@@STEP_LOG_LINE@python.inline@log = subprocess.check_output([ADB, 'root'])@@@", "@@@STEP_LOG_LINE@python.inline@# check for message like 'adbd cannot run as root in production builds'@@@", "@@@STEP_LOG_LINE@python.inline@print log@@@", "@@@STEP_LOG_LINE@python.inline@if 'cannot' in log:@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('adb root failed')@@@", "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@root = '/sys/devices/system/cpu/cpu%d/cpufreq' %cpu@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# All devices we test on give a list of their available frequencies.@@@", + "@@@STEP_LOG_LINE@python.inline@available_freqs = subprocess.check_output([ADB, 'shell',@@@", + "@@@STEP_LOG_LINE@python.inline@ 'cat %s/scaling_available_frequencies' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# Check for message like '/system/bin/sh: file not found'@@@", + "@@@STEP_LOG_LINE@python.inline@if available_freqs and '/system/bin/sh' not in available_freqs:@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs = sorted(@@@", + "@@@STEP_LOG_LINE@python.inline@ int(i) for i in available_freqs.strip().split())@@@", + "@@@STEP_LOG_LINE@python.inline@else:@@@", + "@@@STEP_LOG_LINE@python.inline@ raise Exception('Could not get list of available frequencies: %s' %@@@", + "@@@STEP_LOG_LINE@python.inline@ available_freqs)@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@maxfreq = available_freqs[-1]@@@", + "@@@STEP_LOG_LINE@python.inline@target = int(round(maxfreq * target_percent))@@@", + "@@@STEP_LOG_LINE@python.inline@freq = maxfreq@@@", + "@@@STEP_LOG_LINE@python.inline@for f in reversed(available_freqs):@@@", + "@@@STEP_LOG_LINE@python.inline@ if f <= target:@@@", + "@@@STEP_LOG_LINE@python.inline@ freq = f@@@", + "@@@STEP_LOG_LINE@python.inline@ break@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@print 'Setting frequency to %d' % freq@@@", + "@@@STEP_LOG_LINE@python.inline@@@@", + "@@@STEP_LOG_LINE@python.inline@# If scaling_max_freq is lower than our attempted setting, it won't take.@@@", + "@@@STEP_LOG_LINE@python.inline@# We must set min first, because if we try to set max to be less than min@@@", + "@@@STEP_LOG_LINE@python.inline@# (which sometimes happens after certain devices reboot) it returns a@@@", + "@@@STEP_LOG_LINE@python.inline@# perplexing permissions error.@@@", "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo 0 > '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu])@@@", - "@@@STEP_LOG_LINE@python.inline@actual_status = subprocess.check_output([ADB, 'shell', 'cat '@@@", - "@@@STEP_LOG_LINE@python.inline@ '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip()@@@", - "@@@STEP_LOG_LINE@python.inline@if actual_status != str(0):@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_min_freq' % root])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_max_freq' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@subprocess.check_output([ADB, 'shell', 'echo %d > '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_setspeed' % (freq, root)])@@@", + "@@@STEP_LOG_LINE@python.inline@time.sleep(5)@@@", + "@@@STEP_LOG_LINE@python.inline@actual_freq = subprocess.check_output([ADB, 'shell', 'cat '@@@", + "@@@STEP_LOG_LINE@python.inline@ '%s/scaling_cur_freq' % root]).strip()@@@", + "@@@STEP_LOG_LINE@python.inline@if actual_freq != str(freq):@@@", "@@@STEP_LOG_LINE@python.inline@ raise Exception('(actual, expected) (%s, %d)'@@@", - "@@@STEP_LOG_LINE@python.inline@ % (actual_gov, gov))@@@", + "@@@STEP_LOG_LINE@python.inline@ % (actual_freq, freq))@@@", "@@@STEP_LOG_END@python.inline@@@" ] }, diff --git a/infra/bots/recipe_modules/flavor/gn_android_flavor.py b/infra/bots/recipe_modules/flavor/gn_android_flavor.py index 6997541c99..1edf011279 100644 --- a/infra/bots/recipe_modules/flavor/gn_android_flavor.py +++ b/infra/bots/recipe_modules/flavor/gn_android_flavor.py @@ -15,8 +15,8 @@ class GNAndroidFlavorUtils(default_flavor.DefaultFlavorUtils): super(GNAndroidFlavorUtils, self).__init__(m) self._ever_ran_adb = False self.ADB_BINARY = '/usr/bin/adb.1.0.35' - golo_devices = ['Nexus5x'] - if self.m.vars.builder_cfg.get('model') in golo_devices: + self._golo_devices = ['Nexus5x'] + if self.m.vars.builder_cfg.get('model') in self._golo_devices: self.ADB_BINARY = '/opt/infra-android/tools/adb' self.device_dirs = default_flavor.DeviceDirs( @@ -73,32 +73,33 @@ class GNAndroidFlavorUtils(default_flavor.DefaultFlavorUtils): rootable_blacklist = ['GalaxyS6', 'GalaxyS7_G930A', 'GalaxyS7_G930FD', 'MotoG4', 'NVIDIA_Shield'] - # Maps device type -> cpu ids that need to be set when scaling, with the - # primary CPU being listed first. CPUs are configured together, - # for example, the Nexus 5x has cpu0-3 and cpu4-5 linked together, each - # group using the same configuration - anything that happens to cpu0, - # happens to cpu1-3. - # cpus at index 1+ will be clocked down to powersave during nanobench. - # TODO(kjlubick): determine this dynamically - should be able to look - # at which cores have the highest frequency and affected_cpus. + # Maps device type -> CPU ids that should be scaled for nanobench. + # Many devices have two (or more) different CPUs (e.g. big.LITTLE + # on Nexus5x). The CPUs listed are the biggest cpus on the device. + # The CPUs are grouped together, so we only need to scale one of them + # (the one listed) in order to scale them all. + # E.g. Nexus5x has cpu0-3 as one chip and cpu4-5 as the other. Thus, + # if one wants to run a single-threaded application (e.g. nanobench), one + # can disable cpu0-3 and scale cpu 4 to have only cpu4 and 5 at the same + # frequency. See also disable_for_nanobench. cpus_to_scale = { - 'Nexus5x': [4, 0], - 'NexusPlayer': [2, 0], - 'Pixel': [2, 0], - 'Pixel2XL': [4, 0] + 'Nexus5x': [4], + 'NexusPlayer': [0, 2], # has 2 identical chips, so scale them both. + 'Pixel': [2], + 'Pixel2XL': [4] } - # Maps device -> number of cores. TODO(kjlubick) if we want to do this - # long term, compute this dynamically. - total_cpus = { - 'AndroidOne': 4, - 'Nexus5': 4, - 'Nexus7': 4, - 'Nexus5x': 6, - 'NexusPlayer': 4, - 'Pixel': 4, - 'Pixel2XL': 8, - 'PixelC': 4, + # Maps device type -> CPU ids that should be turned off when running + # single-threaded applications like nanobench. The devices listed have + # multiple, differnt CPUs. We notice a lot of noise that seems to be + # caused by nanobench running on the slow CPU, then the big CPU. By + # disabling this, we see less of that noise by forcing the same CPU + # to be used for the performance testing every time. + disable_for_nanobench = { + 'Nexus5x': range(0, 4), + 'Pixel': range(0, 2), + 'Pixel2XL': range(0, 4), + 'PixelC': range(0, 2) } def _scale_for_dm(self): @@ -107,6 +108,11 @@ class GNAndroidFlavorUtils(default_flavor.DefaultFlavorUtils): self.m.vars.internal_hardware_label): return + # This is paranoia... any CPUs we disabled while running nanobench + # ought to be back online now that we've restarted the device. + for i in self.disable_for_nanobench.get(device, []): + self._set_cpu_online(i, 1) # enable + for i in self.cpus_to_scale.get(device, [0]): # AndroidOne doesn't support ondemand governor. hotplug is similar. if device == 'AndroidOne': @@ -120,13 +126,12 @@ class GNAndroidFlavorUtils(default_flavor.DefaultFlavorUtils): self.m.vars.internal_hardware_label): return - # Scale just the first two cpus. - self._set_governor(0, 'userspace') - self._scale_cpu(0, 0.6) + for i in self.cpus_to_scale.get(device, [0]): + self._set_governor(i, 'userspace') + self._scale_cpu(i, 0.6) - for i in range(2, self.total_cpus[device]): - # NexusPlayer only has "ondemand userspace interactive performance" - self._disable_cpu(i) + for i in self.disable_for_nanobench.get(device, []): + self._set_cpu_online(i, 0) # disable def _set_governor(self, cpu, gov): @@ -162,10 +167,14 @@ if actual_gov != gov: timeout=30) - def _disable_cpu(self, cpu): + def _set_cpu_online(self, cpu, value): + """Set /sys/devices/system/cpu/cpu{N}/online to value (0 or 1).""" self._ever_ran_adb = True + msg = 'Disabling' + if value: + msg = 'Enabling' self.m.run.with_retry(self.m.python.inline, - 'Disabling CPU %d' % cpu, + '%s CPU %d' % (msg, cpu), 3, # attempts program=""" import os @@ -174,6 +183,7 @@ import sys import time ADB = sys.argv[1] cpu = int(sys.argv[2]) +value = int(sys.argv[3]) log = subprocess.check_output([ADB, 'root']) # check for message like 'adbd cannot run as root in production builds' @@ -181,15 +191,23 @@ print log if 'cannot' in log: raise Exception('adb root failed') -subprocess.check_output([ADB, 'shell', 'echo 0 > ' - '/sys/devices/system/cpu/cpu%d/online' % cpu]) +# If we try to echo 1 to an already online cpu, adb returns exit code 1. +# So, check the value before trying to write it. +prior_status = subprocess.check_output([ADB, 'shell', 'cat ' + '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip() +if prior_status == str(value): + print 'CPU %d online already %d' % (cpu, value) + sys.exit() + +subprocess.check_output([ADB, 'shell', 'echo %s > ' + '/sys/devices/system/cpu/cpu%d/online' % (value, cpu)]) actual_status = subprocess.check_output([ADB, 'shell', 'cat ' '/sys/devices/system/cpu/cpu%d/online' % cpu]).strip() -if actual_status != str(0): +if actual_status != str(value): raise Exception('(actual, expected) (%s, %d)' - % (actual_gov, gov)) + % (actual_status, value)) """, - args = [self.ADB_BINARY, cpu], + args = [self.ADB_BINARY, cpu, value], infra_step=True, timeout=30) @@ -343,8 +361,11 @@ if actual_freq != str(freq): # and the following pull step would also fail "device not found" - causing # us to run the shutdown command when the device was probably not in a # broken state; it was just rebooting. + # Avoid doing this to machines in the Golo because they are harder to fix + # than local devices. if (self.m.run.failed_steps and - isinstance(self.m.run.failed_steps[0], recipe_api.InfraFailure)): + isinstance(self.m.run.failed_steps[0], recipe_api.InfraFailure) and + self.m.vars.builder_cfg.get('model') not in self._golo_devices): self._adb('shut down device to quarantine bot', 'shell', 'reboot', '-p') if self._ever_ran_adb: |