diff options
author | sleffler@chromium.org <sleffler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-11 20:59:40 +0000 |
---|---|---|
committer | sleffler@chromium.org <sleffler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-11 20:59:40 +0000 |
commit | 7d4368c56830969fc50d6d9a8eca90fd85974107 (patch) | |
tree | 1e5619646296426ad6b4ee012bcbb1a0ec8a1e0f /chrome | |
parent | b48f3e0db7016ef56bbb35f905ef455586fddaab (diff) | |
download | chromium_src-7d4368c56830969fc50d6d9a8eca90fd85974107.zip chromium_src-7d4368c56830969fc50d6d9a8eca90fd85974107.tar.gz chromium_src-7d4368c56830969fc50d6d9a8eca90fd85974107.tar.bz2 |
Parse cpu_idle and cpu_frequency events
Handle power:cpu_idle and power:cpu_frequency events (the power_* events
are still parsed but are deprecated). This gives us C-state data again.
BUG=chromium-os:27809
TEST=unit tests + collect trace w/ updated debugd systrace.sh on cros and hand-check displayed data
Change-Id: Idc29eb729a11d0ef406d8bb2c0a2f71843fae8f3
Review URL: http://codereview.chromium.org/10024042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@131833 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r-- | chrome/browser/resources/tracing/linux_perf_importer.js | 43 | ||||
-rw-r--r-- | chrome/browser/resources/tracing/linux_perf_importer_test.html | 66 |
2 files changed, 101 insertions, 8 deletions
diff --git a/chrome/browser/resources/tracing/linux_perf_importer.js b/chrome/browser/resources/tracing/linux_perf_importer.js index ef70dba..9841172 100644 --- a/chrome/browser/resources/tracing/linux_perf_importer.js +++ b/chrome/browser/resources/tracing/linux_perf_importer.js @@ -473,6 +473,49 @@ cr.define('tracing', function() { powerCounter.timestamps.push(ts); powerCounter.samples.push(powerState); break; + case 'cpu_frequency': + var event = /state=(\d+) cpu_id=(\d)+/.exec(eventBase[5]); + if (!event) { + this.malformedEvent(eventName); + continue; + } + + var targetCpuNumber = parseInt(event[2]); + var targetCpu = this.getOrCreateCpuState(targetCpuNumber); + var powerCounter = + targetCpu.cpu.getOrCreateCounter('', 'Clock Frequency'); + if (powerCounter.numSeries == 0) { + powerCounter.seriesNames.push('state'); + powerCounter.seriesColors.push( + tracing.getStringColorId(powerCounter.name + '.' + 'state')); + } + var powerState = parseInt(event[1]); + powerCounter.timestamps.push(ts); + powerCounter.samples.push(powerState); + break; + case 'cpu_idle': + var event = /state=(\d+) cpu_id=(\d)+/.exec(eventBase[5]); + if (!event) { + this.malformedEvent(eventName); + continue; + } + + var targetCpuNumber = parseInt(event[2]); + var targetCpu = this.getOrCreateCpuState(targetCpuNumber); + var powerCounter = targetCpu.cpu.getOrCreateCounter('', 'C-State'); + if (powerCounter.numSeries == 0) { + powerCounter.seriesNames.push('state'); + powerCounter.seriesColors.push( + tracing.getStringColorId(powerCounter.name)); + } + var powerState = parseInt(event[1]); + // NB: 4294967295/-1 means an exit from the current state + if (powerState != 4294967295) + powerCounter.samples.push(powerState); + else + powerCounter.samples.push(0); + powerCounter.timestamps.push(ts); + break; case 'workqueue_execute_start': var event = workqueueExecuteStartRE.exec(eventBase[5]); if (!event) { diff --git a/chrome/browser/resources/tracing/linux_perf_importer_test.html b/chrome/browser/resources/tracing/linux_perf_importer_test.html index b9b5b8b..2d0c6b7 100644 --- a/chrome/browser/resources/tracing/linux_perf_importer_test.html +++ b/chrome/browser/resources/tracing/linux_perf_importer_test.html @@ -233,13 +233,13 @@ function testImportWithoutClockSyncDeletesEverything() { function testWorkQueueImport() { var lines = [ - 'kworker/0:3-6880 [000] 2784.771958: workqueue_execute_start: ' + + ' kworker/0:3-6880 [000] 2784.771958: workqueue_execute_start: ' + 'work struct ffff8800a5083a20: function intel_unpin_work_fn', - 'kworker/0:3-6880 [000] 2784.771966: workqueue_execute_end: ' + + ' kworker/0:3-6880 [000] 2784.771966: workqueue_execute_end: ' + 'work struct ffff8800a5083a20', - 'kworker/1:2-7269 [001] 2784.805966: workqueue_execute_start: ' + + ' kworker/1:2-7269 [001] 2784.805966: workqueue_execute_start: ' + 'work struct ffff88014fb0f158: function do_dbs_timer', - 'kworker/1:2-7269 [001] 2784.805975: workqueue_execute_end: ' + + ' kworker/1:2-7269 [001] 2784.805975: workqueue_execute_end: ' + 'work struct ffff88014fb0f158' ]; var m = new tracing.TimelineModel(lines.join('\n'), false); @@ -252,13 +252,13 @@ function testWorkQueueImport() { function testPowerStartImport() { } -function testCpuFrequencyImport() { +function testPowerFrequencyImport() { var lines = [ - 'kworker/0:3-6880 [000] 2784.783015: power_frequency: ' + + ' kworker/0:3-6880 [000] 2784.783015: power_frequency: ' + 'type=2 state=1000000 cpu_id=0', - 'kworker/1:2-7269 [001] 2784.788993: power_frequency: ' + + ' kworker/1:2-7269 [001] 2784.788993: power_frequency: ' + 'type=2 state=800000 cpu_id=1', - 'kworker/1:2-7269 [001] 2784.993120: power_frequency: ' + + ' kworker/1:2-7269 [001] 2784.993120: power_frequency: ' + 'type=2 state=1300000 cpu_id=1' ]; var m = new tracing.TimelineModel(lines.join('\n'), false); @@ -273,6 +273,56 @@ function testCpuFrequencyImport() { assertEquals(2, c1.counters['Power Frequency'].samples.length); } +function testCpuFrequencyImport() { + var lines = [ + ' kworker/1:0-9665 [001] 15051.007301: cpu_frequency: ' + + 'state=800000 cpu_id=1', + ' kworker/1:0-9665 [001] 15051.010278: cpu_frequency: ' + + 'state=1300000 cpu_id=1', + ' kworker/0:2-7972 [000] 15051.010278: cpu_frequency: ' + + 'state=1000000 cpu_id=0', + ' kworker/0:2-7972 [000] 15051.020304: cpu_frequency: ' + + 'state=800000 cpu_id=0' + ]; + var m = new tracing.TimelineModel(lines.join('\n'), false); + assertEquals(0, m.importErrors.length); + + var c0 = m.cpus[0]; + assertEquals(0, c0.slices.length); + assertEquals(2, c0.counters['Clock Frequency'].samples.length); + + var c1 = m.cpus[1]; + assertEquals(0, c1.slices.length); + assertEquals(2, c1.counters['Clock Frequency'].samples.length); +} + +function testCpuIdleImport() { + var lines = [ + ' <idle>-0 [000] 15050.992883: cpu_idle: ' + + 'state=1 cpu_id=0', + ' <idle>-0 [000] 15050.993027: cpu_idle: ' + + 'state=4294967295 cpu_id=0', + ' <idle>-0 [001] 15050.993132: cpu_idle: ' + + 'state=1 cpu_id=1', + ' <idle>-0 [001] 15050.993276: cpu_idle: ' + + 'state=4294967295 cpu_id=1', + ' <idle>-0 [001] 15050.993279: cpu_idle: ' + + 'state=3 cpu_id=1', + ' <idle>-0 [001] 15050.993457: cpu_idle: ' + + 'state=4294967295 cpu_id=1', + ]; + var m = new tracing.TimelineModel(lines.join('\n'), false); + assertEquals(0, m.importErrors.length); + + var c0 = m.cpus[0]; + assertEquals(0, c0.slices.length); + assertEquals(2, c0.counters['C-State'].samples.length); + + var c1 = m.cpus[1]; + assertEquals(0, c1.slices.length); + assertEquals(4, c1.counters['C-State'].samples.length); +} + function testi915Import() { var lines = [ ' chrome-1223 [000] 2784.773556: i915_gem_object_pwrite: ' + |