Snap for 14104676 from 98e32fcb1368d3a96ada468db591239b3ef9a8fc to 25Q4-release
Change-Id: I9b63492480ff26b553bb0259cdf6eeee7f4b4b35
diff --git a/simpleperf/scripts/Android.bp b/simpleperf/scripts/Android.bp
index 7e25cf9..2f8275b 100644
--- a/simpleperf/scripts/Android.bp
+++ b/simpleperf/scripts/Android.bp
@@ -50,4 +50,15 @@
include_dirs: ["external/protobuf/src"],
canonical_path_from_root: false,
},
-}
\ No newline at end of file
+}
+
+python_binary_host {
+ name: "pprof_proto_generator",
+ srcs: [
+ "pprof_proto_generator.py",
+ ],
+ libs: [
+ "profile_py_pb2",
+ "simpleperf_report_lib",
+ ],
+}
diff --git a/simpleperf/scripts/simpleperf_utils.py b/simpleperf/scripts/simpleperf_utils.py
index c8f1f29..5d2574f 100644
--- a/simpleperf/scripts/simpleperf_utils.py
+++ b/simpleperf/scripts/simpleperf_utils.py
@@ -83,24 +83,30 @@
def get_host_binary_path(binary_name: str) -> str:
- dirname = os.path.join(get_script_dir(), 'bin')
+ in_dir_path = Path('bin')
if is_windows():
if binary_name.endswith('.so'):
binary_name = binary_name[0:-3] + '.dll'
elif '.' not in binary_name:
binary_name += '.exe'
- dirname = os.path.join(dirname, 'windows')
+ in_dir_path = in_dir_path / 'windows'
elif sys.platform == 'darwin': # OSX
if binary_name.endswith('.so'):
binary_name = binary_name[0:-3] + '.dylib'
- dirname = os.path.join(dirname, 'darwin')
+ in_dir_path = in_dir_path / 'darwin'
else:
- dirname = os.path.join(dirname, 'linux')
- dirname = os.path.join(dirname, 'x86_64' if sys.maxsize > 2 ** 32 else 'x86')
- binary_path = os.path.join(dirname, binary_name)
- if not os.path.isfile(binary_path):
- log_fatal("can't find binary: %s" % binary_path)
- return binary_path
+ in_dir_path = in_dir_path / 'linux'
+ in_dir_path = in_dir_path / ('x86_64' if sys.maxsize > 2 ** 32 else 'x86') / binary_name
+ # First search in <script_dir>/bin directory.
+ path1 = Path(get_script_dir()) / in_dir_path
+ if path1.is_file():
+ return str(path1)
+ # Then check sys.path[0]. When we are built into binaries like pprof_proto_generator,
+ # the bin directory is put in sys.path[0].
+ path2 = Path(sys.path[0]) / in_dir_path
+ if path2.is_file():
+ return str(path2)
+ log_fatal(f"can't find binary: {path1}")
def is_executable_available(executable: str, option='--help') -> bool: