Loading tools/perf/benchmarks +149 −21 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import datetime import json import os import pathlib import random import re import shutil import subprocess import time import uuid import pretty import utils Loading Loading @@ -137,9 +140,23 @@ def NoChange(): return Change(label="No change", change=lambda: None, undo=lambda: None) def Create(filename): "Create an action to create `filename`. The parent directory must exist." def create(): with open(filename, "w") as f: pass def delete(): os.remove(filename) return Change( label=f"Create {filename}", change=create, undo=delete, ) def Modify(filename, contents, before=None): """Create an action to modify `filename` by appending `contents` before the last instances of `before` in the file. """Create an action to modify `filename` by appending the result of `contents` before the last instances of `before` in the file. Raises an error if `before` doesn't appear in the file. """ Loading @@ -151,13 +168,29 @@ def Modify(filename, contents, before=None): raise FatalError() else: index = len(orig.contents) modified = FileSnapshot(filename, orig.contents[:index] + contents + orig.contents[index:]) modified = FileSnapshot(filename, orig.contents[:index] + contents() + orig.contents[index:]) if False: print(f"Modify: {filename}") x = orig.contents.replace("\n", "\n ORIG") print(f" ORIG {x}") x = modified.contents.replace("\n", "\n MODIFIED") print(f" MODIFIED {x}") return Change( label="Modify " + filename, change=lambda: modified.write(), undo=lambda: orig.write() ) def AddJavaField(filename, prefix): return Modify(filename, lambda: f"{prefix} static final int BENCHMARK = {random.randint(0, 1000000)};\n", before="}") def Comment(prefix, suffix=""): return lambda: prefix + " " + str(uuid.uuid4()) + suffix class BenchmarkReport(): "Information about a run of the benchmark" Loading Loading @@ -510,21 +543,116 @@ benchmarks: change=Clean(), modules=["droid"], preroll=0, postroll=3 postroll=3, ), Benchmark(id="nochange", title="No change", change=NoChange(), modules=["droid"], preroll=2, postroll=3 postroll=3, ), Benchmark(id="unreferenced", title="Create unreferenced file", change=Create("bionic/unreferenced.txt"), modules=["droid"], preroll=1, postroll=2, ), Benchmark(id="modify_bp", title="Modify Android.bp", change=Modify("bionic/libc/Android.bp", "// Comment"), change=Modify("bionic/libc/Android.bp", Comment("//")), modules=["droid"], preroll=1, postroll=3 postroll=3, ), Benchmark(id="modify_stdio", title="Modify stdio.cpp", change=Modify("bionic/libc/stdio/stdio.cpp", Comment("//")), modules=["libc"], preroll=1, postroll=2, ), Benchmark(id="modify_adbd", title="Modify adbd", change=Modify("packages/modules/adb/daemon/main.cpp", Comment("//")), modules=["adbd"], preroll=1, postroll=2, ), Benchmark(id="services_private_field", title="Add private field to ActivityManagerService.java", change=AddJavaField("frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java", "private"), modules=["services"], preroll=1, postroll=2, ), Benchmark(id="services_public_field", title="Add public field to ActivityManagerService.java", change=AddJavaField("frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java", "/** @hide */ public"), modules=["services"], preroll=1, postroll=2, ), Benchmark(id="services_api", title="Add API to ActivityManagerService.javaa", change=AddJavaField("frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java", "@android.annotation.SuppressLint(\"UnflaggedApi\") public"), modules=["services"], preroll=1, postroll=2, ), Benchmark(id="framework_private_field", title="Add private field to Settings.java", change=AddJavaField("frameworks/base/core/java/android/provider/Settings.java", "private"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="framework_public_field", title="Add public field to Settings.java", change=AddJavaField("frameworks/base/core/java/android/provider/Settings.java", "/** @hide */ public"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="framework_api", title="Add API to Settings.java", change=AddJavaField("frameworks/base/core/java/android/provider/Settings.java", "@android.annotation.SuppressLint(\"UnflaggedApi\") public"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="modify_framework_resource", title="Modify framework resource", change=Modify("frameworks/base/core/res/res/values/config.xml", lambda: str(uuid.uuid4()), before="</string>"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="add_framework_resource", title="Add framework resource", change=Modify("frameworks/base/core/res/res/values/config.xml", lambda: f"<string name=\"BENCHMARK\">{uuid.uuid4()}</string>", before="</resources>"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="add_systemui_field", title="Add SystemUI field", change=AddJavaField("frameworks/base/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java", "public"), modules=["SystemUI"], preroll=1, postroll=2, ), ] Loading Loading
tools/perf/benchmarks +149 −21 Original line number Diff line number Diff line Loading @@ -23,9 +23,12 @@ import datetime import json import os import pathlib import random import re import shutil import subprocess import time import uuid import pretty import utils Loading Loading @@ -137,9 +140,23 @@ def NoChange(): return Change(label="No change", change=lambda: None, undo=lambda: None) def Create(filename): "Create an action to create `filename`. The parent directory must exist." def create(): with open(filename, "w") as f: pass def delete(): os.remove(filename) return Change( label=f"Create {filename}", change=create, undo=delete, ) def Modify(filename, contents, before=None): """Create an action to modify `filename` by appending `contents` before the last instances of `before` in the file. """Create an action to modify `filename` by appending the result of `contents` before the last instances of `before` in the file. Raises an error if `before` doesn't appear in the file. """ Loading @@ -151,13 +168,29 @@ def Modify(filename, contents, before=None): raise FatalError() else: index = len(orig.contents) modified = FileSnapshot(filename, orig.contents[:index] + contents + orig.contents[index:]) modified = FileSnapshot(filename, orig.contents[:index] + contents() + orig.contents[index:]) if False: print(f"Modify: {filename}") x = orig.contents.replace("\n", "\n ORIG") print(f" ORIG {x}") x = modified.contents.replace("\n", "\n MODIFIED") print(f" MODIFIED {x}") return Change( label="Modify " + filename, change=lambda: modified.write(), undo=lambda: orig.write() ) def AddJavaField(filename, prefix): return Modify(filename, lambda: f"{prefix} static final int BENCHMARK = {random.randint(0, 1000000)};\n", before="}") def Comment(prefix, suffix=""): return lambda: prefix + " " + str(uuid.uuid4()) + suffix class BenchmarkReport(): "Information about a run of the benchmark" Loading Loading @@ -510,21 +543,116 @@ benchmarks: change=Clean(), modules=["droid"], preroll=0, postroll=3 postroll=3, ), Benchmark(id="nochange", title="No change", change=NoChange(), modules=["droid"], preroll=2, postroll=3 postroll=3, ), Benchmark(id="unreferenced", title="Create unreferenced file", change=Create("bionic/unreferenced.txt"), modules=["droid"], preroll=1, postroll=2, ), Benchmark(id="modify_bp", title="Modify Android.bp", change=Modify("bionic/libc/Android.bp", "// Comment"), change=Modify("bionic/libc/Android.bp", Comment("//")), modules=["droid"], preroll=1, postroll=3 postroll=3, ), Benchmark(id="modify_stdio", title="Modify stdio.cpp", change=Modify("bionic/libc/stdio/stdio.cpp", Comment("//")), modules=["libc"], preroll=1, postroll=2, ), Benchmark(id="modify_adbd", title="Modify adbd", change=Modify("packages/modules/adb/daemon/main.cpp", Comment("//")), modules=["adbd"], preroll=1, postroll=2, ), Benchmark(id="services_private_field", title="Add private field to ActivityManagerService.java", change=AddJavaField("frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java", "private"), modules=["services"], preroll=1, postroll=2, ), Benchmark(id="services_public_field", title="Add public field to ActivityManagerService.java", change=AddJavaField("frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java", "/** @hide */ public"), modules=["services"], preroll=1, postroll=2, ), Benchmark(id="services_api", title="Add API to ActivityManagerService.javaa", change=AddJavaField("frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java", "@android.annotation.SuppressLint(\"UnflaggedApi\") public"), modules=["services"], preroll=1, postroll=2, ), Benchmark(id="framework_private_field", title="Add private field to Settings.java", change=AddJavaField("frameworks/base/core/java/android/provider/Settings.java", "private"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="framework_public_field", title="Add public field to Settings.java", change=AddJavaField("frameworks/base/core/java/android/provider/Settings.java", "/** @hide */ public"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="framework_api", title="Add API to Settings.java", change=AddJavaField("frameworks/base/core/java/android/provider/Settings.java", "@android.annotation.SuppressLint(\"UnflaggedApi\") public"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="modify_framework_resource", title="Modify framework resource", change=Modify("frameworks/base/core/res/res/values/config.xml", lambda: str(uuid.uuid4()), before="</string>"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="add_framework_resource", title="Add framework resource", change=Modify("frameworks/base/core/res/res/values/config.xml", lambda: f"<string name=\"BENCHMARK\">{uuid.uuid4()}</string>", before="</resources>"), modules=["framework-minus-apex"], preroll=1, postroll=2, ), Benchmark(id="add_systemui_field", title="Add SystemUI field", change=AddJavaField("frameworks/base/packages/SystemUI/src/com/android/systemui/wmshell/WMShell.java", "public"), modules=["SystemUI"], preroll=1, postroll=2, ), ] Loading