• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<!DOCTYPE html>
2<!--
3Copyright (c) 2014 The Chromium Authors. All rights reserved.
4Use of this source code is governed by a BSD-style license that can be
5found in the LICENSE file.
6-->
7<link rel="import" href="/base/base.html">
8
9<script>
10'use strict';
11
12/**
13 * @fileoverview Utilities for accessing trace data about the Chrome browser.
14 */
15tr.exportTo('tr.e.audits', function() {
16  var MAIN_FRAMETIME_TYPE = 'main_frametime_type';
17  var IMPL_FRAMETIME_TYPE = 'impl_frametime_type';
18
19  var MAIN_RENDERING_STATS =
20      'BenchmarkInstrumentation::MainThreadRenderingStats';
21  var IMPL_RENDERING_STATS =
22      'BenchmarkInstrumentation::ImplThreadRenderingStats';
23
24
25  function getSlicesIntersectingRange(rangeOfInterest, slices) {
26    var slicesInFilterRange = [];
27    for (var i = 0; i < slices.length; i++) {
28      var slice = slices[i];
29      if (rangeOfInterest.intersectsExplicitRange(slice.start, slice.end))
30        slicesInFilterRange.push(slice);
31    }
32    return slicesInFilterRange;
33  }
34
35
36  function ChromeProcessHelper(modelHelper, process) {
37    this.modelHelper = modelHelper;
38    this.process = process;
39  }
40
41  ChromeProcessHelper.prototype = {
42    get pid() {
43      return this.process.pid;
44    },
45
46    getFrameEventsInRange: function(frametimeType, range) {
47      var titleToGet;
48      if (frametimeType == MAIN_FRAMETIME_TYPE)
49        titleToGet = MAIN_RENDERING_STATS;
50      else
51        titleToGet = IMPL_RENDERING_STATS;
52
53      var frameEvents = [];
54      this.process.iterateAllEvents(function(event) {
55        if (event.title !== titleToGet)
56          return;
57        if (range.intersectsExplicitRange(event.start, event.end))
58          frameEvents.push(event);
59      });
60
61      frameEvents.sort(function(a, b) {return a.start - b.start});
62      return frameEvents;
63    }
64  };
65
66  function getFrametimeDataFromEvents(frameEvents) {
67    var frametimeData = [];
68    for (var i = 1; i < frameEvents.length; i++) {
69      var diff = frameEvents[i].start - frameEvents[i - 1].start;
70      frametimeData.push({
71        'x': frameEvents[i].start,
72        'frametime': diff
73      });
74    }
75    return frametimeData;
76  }
77
78  return {
79    ChromeProcessHelper: ChromeProcessHelper,
80
81    MAIN_FRAMETIME_TYPE: MAIN_FRAMETIME_TYPE,
82    IMPL_FRAMETIME_TYPE: IMPL_FRAMETIME_TYPE,
83    MAIN_RENDERING_STATS: MAIN_RENDERING_STATS,
84    IMPL_RENDERING_STATS: IMPL_RENDERING_STATS,
85
86    getSlicesIntersectingRange: getSlicesIntersectingRange,
87    getFrametimeDataFromEvents: getFrametimeDataFromEvents
88  };
89});
90</script>
91