Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(40)

Unified Diff: tools/telemetry/telemetry/core/platform/profiler/vtune_profiler.py

Issue 308123002: Telemetry: Build symfs for Android VTune profiler (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: conditional import of sqlite3 Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/telemetry/core/platform/profiler/vtune_profiler.py
diff --git a/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler.py b/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler.py
index 2bb4720c9acccaf6f8e907ef007625bacc761932..3e146fade13aaa75dec70ca15eb26482d07a2214 100644
--- a/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler.py
+++ b/tools/telemetry/telemetry/core/platform/profiler/vtune_profiler.py
@@ -8,30 +8,24 @@ import subprocess
import sys
import tempfile
-from telemetry.core import util
from telemetry.core.platform import profiler
+from telemetry.core.platform.profiler import android_profiling_helper
class _SingleProcessVTuneProfiler(object):
"""An internal class for using vtune for a given process."""
- def __init__(self, pid, output_file, platform_backend):
+ def __init__(self, pid, output_file, browser_backend, platform_backend):
self._pid = pid
+ self._browser_backend = browser_backend
self._platform_backend = platform_backend
self._output_file = output_file
self._tmp_output_file = tempfile.NamedTemporaryFile('w', 0)
cmd = ['amplxe-cl', '-collect', 'hotspots',
'-target-pid', str(pid), '-r', self._output_file]
- if platform_backend.GetOSName() == 'android':
+ self._is_android = platform_backend.GetOSName() == 'android'
+ if self._is_android:
cmd += ['-target-system', 'android']
- print 'On Android, assuming $CHROMIUM_OUT_DIR/Release/lib has a fresh'
- print 'symbolized library matching the one on device.'
- search_dir = os.path.join(util.GetChromiumSrcDir(),
- os.environ.get('CHROMIUM_OUT_DIR', 'out'),
- os.environ.get('BUILDTYPE', 'Release'),
- 'lib')
- cmd += ['-search-dir', search_dir]
-
self._proc = subprocess.Popen(
cmd, stdout=self._tmp_output_file, stderr=subprocess.STDOUT)
@@ -54,9 +48,29 @@ class _SingleProcessVTuneProfiler(object):
finally:
self._tmp_output_file.close()
- if not exit_code:
- print 'To view the profile, run:'
- print ' amplxe-gui %s' % self._output_file
+ if exit_code:
+ # The renderer process was swapped out. Now that we made sure VTune has
+ # stopped, return without further processing the invalid profile.
+ return self._output_file
+
+ if self._is_android:
+ required_libs = \
+ android_profiling_helper.GetRequiredLibrariesForVTuneProfile(
+ self._output_file)
+
+ device = self._browser_backend.adb.device()
+ symfs_root = os.path.dirname(self._output_file)
+ android_profiling_helper.CreateSymFs(device,
+ symfs_root,
+ required_libs,
+ use_symlinks=True)
+ logging.info('Resolving symbols in profile.')
+ subprocess.call(['amplxe-cl', '-finalize', '-r', self._output_file,
+ '-search-dir', symfs_root])
+
+ print 'To view the profile, run:'
+ print ' amplxe-gui %s' % self._output_file
+
return self._output_file
def _GetStdOut(self):
@@ -90,7 +104,8 @@ class VTuneProfiler(profiler.Profiler):
continue
self._process_profilers.append(
- _SingleProcessVTuneProfiler(pid, output_file, platform_backend))
+ _SingleProcessVTuneProfiler(pid, output_file, browser_backend,
+ platform_backend))
@classmethod
def name(cls):

Powered by Google App Engine
This is Rietveld 408576698