90 lines
3.2 KiB
HTML
90 lines
3.2 KiB
HTML
<!DOCTYPE html>
|
|
|
|
<script>
|
|
'use strict';
|
|
|
|
const RENDER_THREAD_NAME = "RenderThread";
|
|
const UI_THREAD_NAME = "UI Thread";
|
|
const DRAW_FRAME_SLICE_TITLE = "DrawFrame";
|
|
const BINDER_SLICE_TITLE = "binder transaction";
|
|
const RECORD_SLICE_TITLE = "Record View#draw()";
|
|
const DEQUEUE_BUFFER_SLICE_TITLE = "dequeueBuffer";
|
|
|
|
function getTimeInBinder(slice) {
|
|
if (slice.title === BINDER_SLICE_TITLE) {
|
|
return slice.duration;
|
|
}
|
|
let result = 0.0;
|
|
for (let subslice of slice.subSlices) {
|
|
result += getTimeInBinder(subslice);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function getTimeInDequeueBuffer(slice) {
|
|
if (slice.title === DEQUEUE_BUFFER_SLICE_TITLE) {
|
|
return slice.duration;
|
|
}
|
|
let result = 0.0;
|
|
for (let subslice of slice.subSlices) {
|
|
result += getTimeInDequeueBuffer(subslice);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
tr.mre.FunctionRegistry.register(
|
|
function AvgDrawFrame(result, model) {
|
|
let canonicalUrl = model.canonicalUrl;
|
|
|
|
for (let p of model.getAllProcesses()) {
|
|
//calc stats for processes that have UI and render threads and at least 10 frames
|
|
let renderThread = p.findAtMostOneThreadNamed(RENDER_THREAD_NAME);
|
|
let UIThread = p.findAtMostOneThreadNamed(UI_THREAD_NAME);
|
|
if (renderThread && UIThread)
|
|
{
|
|
let numDrawFrames = 0;
|
|
let drawFramesWallDuration = 0.0;
|
|
let binderDuration = 0.0;
|
|
let dequeueBufferDuration = 0.0;
|
|
|
|
let numRecordViewDraw = 0;
|
|
let recordViewDrawWallDuration = 0.0;
|
|
|
|
renderThread.sliceGroup.slices.forEach(function(slice) {
|
|
if (slice.title === DRAW_FRAME_SLICE_TITLE) {
|
|
drawFramesWallDuration += slice.duration;
|
|
numDrawFrames++;
|
|
binderDuration += getTimeInBinder(slice);
|
|
dequeueBufferDuration += getTimeInDequeueBuffer(slice);
|
|
}
|
|
});
|
|
if (numDrawFrames < 10) continue;
|
|
UIThread.sliceGroup.slices.forEach(function(slice) {
|
|
if (slice.title === RECORD_SLICE_TITLE) {
|
|
recordViewDrawWallDuration += slice.duration;
|
|
numRecordViewDraw++;
|
|
}
|
|
});
|
|
|
|
let avgDrawFrameDuration = undefined;
|
|
if (numDrawFrames > 0) {
|
|
avgDrawFrameDuration = (drawFramesWallDuration-dequeueBufferDuration)/numDrawFrames;
|
|
}
|
|
let avgRecordViewDrawDuration = undefined;
|
|
if (numRecordViewDraw > 0) {
|
|
avgRecordViewDrawDuration = recordViewDrawWallDuration/numRecordViewDraw;
|
|
}
|
|
|
|
result.addPair('result', {
|
|
canonicalUrl: canonicalUrl,
|
|
processName: p.name,
|
|
avgDrawFrameDuration: Number(avgDrawFrameDuration).toFixed(3),
|
|
avgRecordViewDrawDuration: Number(avgRecordViewDrawDuration).toFixed(3),
|
|
avgRecordAndPlay: Number(avgDrawFrameDuration+avgRecordViewDrawDuration).toFixed(3)
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
</script>
|