aboutsummaryrefslogtreecommitdiff
path: root/ui/src/tracks/gpu_freq/controller.ts
diff options
context:
space:
mode:
Diffstat (limited to 'ui/src/tracks/gpu_freq/controller.ts')
-rw-r--r--ui/src/tracks/gpu_freq/controller.ts150
1 files changed, 0 insertions, 150 deletions
diff --git a/ui/src/tracks/gpu_freq/controller.ts b/ui/src/tracks/gpu_freq/controller.ts
deleted file mode 100644
index 6fa2e398a..000000000
--- a/ui/src/tracks/gpu_freq/controller.ts
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (C) 2019 The Android Open Source Project
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-import {fromNs, toNs} from '../../common/time';
-import {LIMIT} from '../../common/track_data';
-import {
- TrackController,
- trackControllerRegistry
-} from '../../controller/track_controller';
-
-import {
- Config,
- Data,
- GPU_FREQ_TRACK_KIND,
-} from './common';
-
-class GpuFreqTrackController extends TrackController<Config, Data> {
- static readonly kind = GPU_FREQ_TRACK_KIND;
- private setup = false;
- private maximumValueSeen = 0;
-
- async onBoundsChange(start: number, end: number, resolution: number):
- Promise<Data> {
- const startNs = toNs(start);
- const endNs = toNs(end);
-
- if (!this.setup) {
- const result = await this.query(`
- select max(value) from
- counters where name = 'gpufreq'
- and ref = ${this.config.gpu}`);
- this.maximumValueSeen = +result.columns[0].doubleValues![0];
-
- await this.query(
- `create virtual table ${this.tableName('window')} using window;`);
-
- await this.query(`create view ${this.tableName('freq')}
- as select
- ts,
- lead(ts) over (order by ts) - ts as dur,
- ref as gpu,
- name as freq_name,
- value as freq_value
- from counters
- where name = 'gpufreq'
- and ref = ${this.config.gpu}
- and ref_type = 'gpu';
- `);
-
- await this.query(`create virtual table ${this.tableName('span_activity')}
- using span_join(${this.tableName('freq')} PARTITIONED gpu,
- ${this.tableName('window')});`);
-
- await this.query(`create view ${this.tableName('activity')}
- as select
- ts,
- dur,
- quantum_ts,
- freq_value as freq
- from ${this.tableName('span_activity')};
- `);
-
- this.setup = true;
- }
-
- this.query(`update ${this.tableName('window')} set
- window_start = ${startNs},
- window_dur = ${Math.max(1, endNs - startNs)},
- quantum = 0`);
-
- const result = await this.engine.queryOneRow(`select count(*)
- from ${this.tableName('activity')}`);
- const isQuantized = result[0] > LIMIT;
-
- // Cast as double to avoid problem where values are sometimes
- // doubles, sometimes longs.
- let query = `select ts, dur, freq
- from ${this.tableName('activity')} limit ${LIMIT}`;
-
- if (isQuantized) {
- // |resolution| is in s/px we want # ns for 10px window:
- const bucketSizeNs = Math.round(resolution * 10 * 1e9);
- const windowStartNs = Math.floor(startNs / bucketSizeNs) * bucketSizeNs;
- const windowDurNs = Math.max(1, endNs - windowStartNs);
-
- this.query(`update ${this.tableName('window')} set
- window_start = ${startNs},
- window_dur = ${windowDurNs},
- quantum = ${isQuantized ? bucketSizeNs : 0}`);
-
- query = `select
- min(ts) as ts,
- sum(dur) as dur,
- sum(weighted_freq)/sum(dur) as freq_avg,
- quantum_ts
- from (
- select
- ts,
- dur,
- quantum_ts,
- freq*dur as weighted_freq
- from ${this.tableName('activity')})
- group by quantum_ts limit ${LIMIT}`;
- }
-
- const freqResult = await this.query(query);
-
- const numRows = +freqResult.numRecords;
- const data: Data = {
- start,
- end,
- resolution,
- length: numRows,
- maximumValue: this.maximumValue(),
- isQuantized,
- tsStarts: new Float64Array(numRows),
- tsEnds: new Float64Array(numRows),
- freqKHz: new Uint32Array(numRows),
- };
-
- const cols = freqResult.columns;
- for (let row = 0; row < numRows; row++) {
- const startSec = fromNs(+cols[0].longValues![row]);
- data.tsStarts[row] = startSec;
- data.tsEnds[row] = startSec + fromNs(+cols[1].longValues![row]);
- data.freqKHz[row] = +cols[2].doubleValues![row];
- }
-
- return data;
- }
-
- private maximumValue() {
- return Math.max(this.config.maximumValue || 0, this.maximumValueSeen);
- }
-
-}
-
-
-trackControllerRegistry.register(GpuFreqTrackController);