1b122baf563564a1d478804fb882fcba242a9949eChris Craik<!DOCTYPE html>
2b122baf563564a1d478804fb882fcba242a9949eChris Craik<!--
3b122baf563564a1d478804fb882fcba242a9949eChris CraikCopyright (c) 2013 The Chromium Authors. All rights reserved.
4b122baf563564a1d478804fb882fcba242a9949eChris CraikUse of this source code is governed by a BSD-style license that can be
5b122baf563564a1d478804fb882fcba242a9949eChris Craikfound in the LICENSE file.
6b122baf563564a1d478804fb882fcba242a9949eChris Craik-->
7b122baf563564a1d478804fb882fcba242a9949eChris Craik
88d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi<link rel="import" href="/tracing/base/color_scheme.html">
94a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair<link rel="import" href="/tracing/base/sorted_array_utils.html">
104a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair<link rel="import" href="/tracing/base/utils.html">
114a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair<link rel="import" href="/tracing/model/event_set.html">
124a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair<link rel="import" href="/tracing/model/model.html">
134a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair<link rel="import" href="/tracing/ui/analysis/analysis_link.html">
144a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair<link rel="import" href="/tracing/ui/analysis/analysis_sub_view.html">
154a4f2fe02baf385f6c24fc98c6e17bf6ac5e0724Dan Sinclair<link rel="import" href="/tracing/ui/analysis/generic_object_view.html">
16cef7893435aa41160dd1255c43cb8498279738ccChris Craik<link rel="import" href="/tracing/value/ui/scalar_span.html">
17cef7893435aa41160dd1255c43cb8498279738ccChris Craik<link rel="import" href="/tracing/value/unit.html">
18ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik
19ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik<polymer-element name="tr-ui-a-single-thread-time-slice-sub-view"
20ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik    extends="tr-ui-a-sub-view">
21b122baf563564a1d478804fb882fcba242a9949eChris Craik  <template>
22b122baf563564a1d478804fb882fcba242a9949eChris Craik    <style>
23b122baf563564a1d478804fb882fcba242a9949eChris Craik    table {
24b122baf563564a1d478804fb882fcba242a9949eChris Craik      border-collapse: collapse;
25b122baf563564a1d478804fb882fcba242a9949eChris Craik      border-width: 0;
26b122baf563564a1d478804fb882fcba242a9949eChris Craik      margin-bottom: 25px;
27b122baf563564a1d478804fb882fcba242a9949eChris Craik      width: 100%;
28b122baf563564a1d478804fb882fcba242a9949eChris Craik    }
29b122baf563564a1d478804fb882fcba242a9949eChris Craik
30b122baf563564a1d478804fb882fcba242a9949eChris Craik    table tr > td:first-child {
31b122baf563564a1d478804fb882fcba242a9949eChris Craik      padding-left: 2px;
32b122baf563564a1d478804fb882fcba242a9949eChris Craik    }
33b122baf563564a1d478804fb882fcba242a9949eChris Craik
34b122baf563564a1d478804fb882fcba242a9949eChris Craik    table tr > td {
35b122baf563564a1d478804fb882fcba242a9949eChris Craik      padding: 2px 4px 2px 4px;
36b122baf563564a1d478804fb882fcba242a9949eChris Craik      vertical-align: text-top;
37b122baf563564a1d478804fb882fcba242a9949eChris Craik      width: 150px;
38b122baf563564a1d478804fb882fcba242a9949eChris Craik    }
39b122baf563564a1d478804fb882fcba242a9949eChris Craik
40b122baf563564a1d478804fb882fcba242a9949eChris Craik    table td td {
41b122baf563564a1d478804fb882fcba242a9949eChris Craik      padding: 0 0 0 0;
42b122baf563564a1d478804fb882fcba242a9949eChris Craik      width: auto;
43b122baf563564a1d478804fb882fcba242a9949eChris Craik    }
44b122baf563564a1d478804fb882fcba242a9949eChris Craik    tr {
45b122baf563564a1d478804fb882fcba242a9949eChris Craik      vertical-align: top;
46b122baf563564a1d478804fb882fcba242a9949eChris Craik    }
47b122baf563564a1d478804fb882fcba242a9949eChris Craik
48b122baf563564a1d478804fb882fcba242a9949eChris Craik    tr:nth-child(2n+0) {
49b122baf563564a1d478804fb882fcba242a9949eChris Craik      background-color: #e2e2e2;
50b122baf563564a1d478804fb882fcba242a9949eChris Craik    }
51b122baf563564a1d478804fb882fcba242a9949eChris Craik    </style>
52b122baf563564a1d478804fb882fcba242a9949eChris Craik    <table>
53b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
54b122baf563564a1d478804fb882fcba242a9949eChris Craik        <td>Running process:</td><td id="process-name"></td>
55b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
56b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
57b122baf563564a1d478804fb882fcba242a9949eChris Craik        <td>Running thread:</td><td id="thread-name"></td>
58b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
59b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
60b122baf563564a1d478804fb882fcba242a9949eChris Craik        <td>State:</td>
61b122baf563564a1d478804fb882fcba242a9949eChris Craik        <td><b><span id="state"></span></b></td>
62b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
63b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
64ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        <td>Start:</td>
65ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        <td>
66cef7893435aa41160dd1255c43cb8498279738ccChris Craik          <tr-v-ui-scalar-span id="start">
67cef7893435aa41160dd1255c43cb8498279738ccChris Craik          </tr-v-ui-scalar-span>
68ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        </td>
69b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
70b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
71ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        <td>Duration:</td>
72ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        <td>
73cef7893435aa41160dd1255c43cb8498279738ccChris Craik          <tr-v-ui-scalar-span id="duration">
74cef7893435aa41160dd1255c43cb8498279738ccChris Craik          </tr-v-ui-scalar-span>
75ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        </td>
76b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
77b122baf563564a1d478804fb882fcba242a9949eChris Craik
78b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
79b122baf563564a1d478804fb882fcba242a9949eChris Craik        <td>On CPU:</td><td id="on-cpu"></td>
80b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
81b122baf563564a1d478804fb882fcba242a9949eChris Craik
82b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
83b122baf563564a1d478804fb882fcba242a9949eChris Craik        <td>Running instead:</td><td id="running-instead"></td>
84b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
85b122baf563564a1d478804fb882fcba242a9949eChris Craik
86b122baf563564a1d478804fb882fcba242a9949eChris Craik      <tr>
87b122baf563564a1d478804fb882fcba242a9949eChris Craik        <td>Args:</td><td id="args"></td>
88b122baf563564a1d478804fb882fcba242a9949eChris Craik      </tr>
89b122baf563564a1d478804fb882fcba242a9949eChris Craik    </table>
90b122baf563564a1d478804fb882fcba242a9949eChris Craik  </template>
91b122baf563564a1d478804fb882fcba242a9949eChris Craik
92b122baf563564a1d478804fb882fcba242a9949eChris Craik  <script>
93b122baf563564a1d478804fb882fcba242a9949eChris Craik  'use strict';
94b122baf563564a1d478804fb882fcba242a9949eChris Craik
95b122baf563564a1d478804fb882fcba242a9949eChris Craik  Polymer({
96b122baf563564a1d478804fb882fcba242a9949eChris Craik    created: function() {
97b122baf563564a1d478804fb882fcba242a9949eChris Craik      this.currentSelection_ = undefined;
98b122baf563564a1d478804fb882fcba242a9949eChris Craik    },
99b122baf563564a1d478804fb882fcba242a9949eChris Craik
100b122baf563564a1d478804fb882fcba242a9949eChris Craik    get selection() {
101b122baf563564a1d478804fb882fcba242a9949eChris Craik      return this.currentSelection_;
102b122baf563564a1d478804fb882fcba242a9949eChris Craik    },
103b122baf563564a1d478804fb882fcba242a9949eChris Craik
104b122baf563564a1d478804fb882fcba242a9949eChris Craik    set selection(selection) {
105b122baf563564a1d478804fb882fcba242a9949eChris Craik      if (selection.length !== 1)
106b122baf563564a1d478804fb882fcba242a9949eChris Craik        throw new Error('Only supports single slices');
10740f8da8088c9cd699f672242d0cdc3d677353bf8Chris Craik      if (!(selection[0] instanceof tr.model.ThreadTimeSlice))
108b122baf563564a1d478804fb882fcba242a9949eChris Craik        throw new Error('Only supports thread time slices');
109b122baf563564a1d478804fb882fcba242a9949eChris Craik
110b122baf563564a1d478804fb882fcba242a9949eChris Craik      this.currentSelection_ = selection;
111b122baf563564a1d478804fb882fcba242a9949eChris Craik
112b122baf563564a1d478804fb882fcba242a9949eChris Craik      var timeSlice = selection[0];
113b122baf563564a1d478804fb882fcba242a9949eChris Craik      var thread = timeSlice.thread;
114b122baf563564a1d478804fb882fcba242a9949eChris Craik
115b122baf563564a1d478804fb882fcba242a9949eChris Craik      var shadowRoot = this.shadowRoot;
116b122baf563564a1d478804fb882fcba242a9949eChris Craik      shadowRoot.querySelector('#state').textContent = timeSlice.title;
1178d2b206a675ec20ea07100c35df34e65ee1e45e8Ruchi Kandoi      var stateColor = tr.b.ColorScheme.colorsAsStrings[timeSlice.colorId];
118b122baf563564a1d478804fb882fcba242a9949eChris Craik      shadowRoot.querySelector('#state').style.backgroundColor = stateColor;
119b122baf563564a1d478804fb882fcba242a9949eChris Craik
120b122baf563564a1d478804fb882fcba242a9949eChris Craik      shadowRoot.querySelector('#process-name').textContent =
121b122baf563564a1d478804fb882fcba242a9949eChris Craik          thread.parent.userFriendlyName;
122b122baf563564a1d478804fb882fcba242a9949eChris Craik      shadowRoot.querySelector('#thread-name').textContent =
123b122baf563564a1d478804fb882fcba242a9949eChris Craik          thread.userFriendlyName;
124b122baf563564a1d478804fb882fcba242a9949eChris Craik
125cef7893435aa41160dd1255c43cb8498279738ccChris Craik      shadowRoot.querySelector('#start').setValueAndUnit(
126cef7893435aa41160dd1255c43cb8498279738ccChris Craik          timeSlice.start, tr.v.Unit.byName.timeStampInMs);
127cef7893435aa41160dd1255c43cb8498279738ccChris Craik      shadowRoot.querySelector('#duration').setValueAndUnit(
128cef7893435aa41160dd1255c43cb8498279738ccChris Craik          timeSlice.duration, tr.v.Unit.byName.timeDurationInMs);
129cef7893435aa41160dd1255c43cb8498279738ccChris Craik
130b122baf563564a1d478804fb882fcba242a9949eChris Craik      var onCpuEl = shadowRoot.querySelector('#on-cpu');
131b122baf563564a1d478804fb882fcba242a9949eChris Craik      onCpuEl.textContent = '';
132b122baf563564a1d478804fb882fcba242a9949eChris Craik      var runningInsteadEl = shadowRoot.querySelector('#running-instead');
133b122baf563564a1d478804fb882fcba242a9949eChris Craik      if (timeSlice.cpuOnWhichThreadWasRunning) {
134b122baf563564a1d478804fb882fcba242a9949eChris Craik        runningInsteadEl.parentElement.removeChild(runningInsteadEl);
135b122baf563564a1d478804fb882fcba242a9949eChris Craik
136ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        var cpuLink = document.createElement('tr-ui-a-analysis-link');
137ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik        cpuLink.selection = new tr.model.EventSet(
138b122baf563564a1d478804fb882fcba242a9949eChris Craik            timeSlice.getAssociatedCpuSlice());
139b122baf563564a1d478804fb882fcba242a9949eChris Craik        cpuLink.textContent =
140b122baf563564a1d478804fb882fcba242a9949eChris Craik            timeSlice.cpuOnWhichThreadWasRunning.userFriendlyName;
141b122baf563564a1d478804fb882fcba242a9949eChris Craik        onCpuEl.appendChild(cpuLink);
142b122baf563564a1d478804fb882fcba242a9949eChris Craik      } else {
143b122baf563564a1d478804fb882fcba242a9949eChris Craik        onCpuEl.parentElement.removeChild(onCpuEl);
144b122baf563564a1d478804fb882fcba242a9949eChris Craik
145b122baf563564a1d478804fb882fcba242a9949eChris Craik        var cpuSliceThatTookCpu = timeSlice.getCpuSliceThatTookCpu();
146b122baf563564a1d478804fb882fcba242a9949eChris Craik        if (cpuSliceThatTookCpu) {
147ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik          var cpuLink = document.createElement('tr-ui-a-analysis-link');
148ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik          cpuLink.selection = new tr.model.EventSet(cpuSliceThatTookCpu);
149b122baf563564a1d478804fb882fcba242a9949eChris Craik          if (cpuSliceThatTookCpu.thread)
150b122baf563564a1d478804fb882fcba242a9949eChris Craik            cpuLink.textContent = cpuSliceThatTookCpu.thread.userFriendlyName;
151b122baf563564a1d478804fb882fcba242a9949eChris Craik          else
152b122baf563564a1d478804fb882fcba242a9949eChris Craik            cpuLink.textContent = cpuSliceThatTookCpu.title;
153b122baf563564a1d478804fb882fcba242a9949eChris Craik          runningInsteadEl.appendChild(cpuLink);
154b122baf563564a1d478804fb882fcba242a9949eChris Craik        } else {
155b122baf563564a1d478804fb882fcba242a9949eChris Craik          runningInsteadEl.parentElement.removeChild(runningInsteadEl);
156b122baf563564a1d478804fb882fcba242a9949eChris Craik        }
157b122baf563564a1d478804fb882fcba242a9949eChris Craik      }
158b122baf563564a1d478804fb882fcba242a9949eChris Craik
159b122baf563564a1d478804fb882fcba242a9949eChris Craik      var argsEl = shadowRoot.querySelector('#args');
16040f8da8088c9cd699f672242d0cdc3d677353bf8Chris Craik      if (tr.b.dictionaryKeys(timeSlice.args).length > 0) {
161b122baf563564a1d478804fb882fcba242a9949eChris Craik        var argsView =
162ced05db70069f9d84c4b0dd9b3b26b94e3482336Chris Craik            document.createElement('tr-ui-a-generic-object-view');
163b122baf563564a1d478804fb882fcba242a9949eChris Craik        argsView.object = timeSlice.args;
164b122baf563564a1d478804fb882fcba242a9949eChris Craik
165b122baf563564a1d478804fb882fcba242a9949eChris Craik        argsEl.parentElement.style.display = '';
166b122baf563564a1d478804fb882fcba242a9949eChris Craik        argsEl.textContent = '';
167b122baf563564a1d478804fb882fcba242a9949eChris Craik        argsEl.appendChild(argsView);
168b122baf563564a1d478804fb882fcba242a9949eChris Craik      } else {
169b122baf563564a1d478804fb882fcba242a9949eChris Craik        argsEl.parentElement.style.display = 'none';
170b122baf563564a1d478804fb882fcba242a9949eChris Craik      }
171b122baf563564a1d478804fb882fcba242a9949eChris Craik    }
172b122baf563564a1d478804fb882fcba242a9949eChris Craik  });
173b122baf563564a1d478804fb882fcba242a9949eChris Craik  </script>
17426c92f4cb78a275f1ebb94dd976f37bdd7d53ce7Chris Craik</polymer-element>
175