• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1// Copyright (C) 2019 The Android Open Source Project
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7//      http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15.details-panel {
16  @include bottom-panel-font;
17
18  // This is required to position locally-scoped (i.e. non-full-screen) modal
19  // dialogs within the panel, as they use position: absolute.
20  position: relative;
21
22  .material-icons {
23    @include transition(0.3s);
24    font-size: 16px;
25    margin-left: 5px;
26    &:hover {
27      cursor: pointer;
28    }
29    &.grey {
30      border-radius: 3px;
31      border: 1px solid transparent;
32      background-color: #e8e8e8;
33      &:hover {
34        border: #475566 solid 1px;
35      }
36    }
37  }
38
39  .details-panel-heading {
40    padding: 10px 0 5px 0;
41    position: sticky;
42    top: 0;
43
44    // Relative/absolute/etc.. (non static) elements stack on top of this sticky
45    // header, so setting the z-index here to 1 forces this header to render
46    // over the top of other elements in the underlying panels.
47    z-index: 1;
48
49    display: flex;
50    background: white;
51    &.aggregation {
52      padding-top: 5px;
53      display: grid;
54      grid-template-areas:
55        "description range"
56        "heading heading";
57      grid-template-columns: 1fr auto;
58      .states {
59        font-size: 11px;
60        margin: 0 10px 2px 10px;
61        display: flex;
62        overflow: hidden;
63        .state {
64          height: 20px;
65          line-height: 20px;
66          padding-left: 3px;
67          padding-right: 3px;
68          border-left: white 1px solid;
69          &:hover {
70            min-width: fit-content;
71          }
72        }
73      }
74      .time-range {
75        text-align: right;
76        font-size: 11px;
77        font-weight: 400;
78        margin-right: 5px;
79      }
80      table {
81        grid-area: heading;
82      }
83      th {
84        cursor: pointer;
85        .material-icons {
86          margin-left: 2px;
87          font-size: 18px;
88        }
89      }
90    }
91    h2 {
92      font-size: 16px;
93      font-weight: 400;
94      padding: 0 10px;
95      &.split {
96        width: 50%;
97      }
98    }
99  }
100
101  table {
102    @include transition(0.1s);
103    @include table-font-size;
104    width: 100%;
105    // Aggregation panel uses multiple table elements that need to be aligned,
106    // which is done by using fixed table layout.
107    table-layout: fixed;
108    word-wrap: break-word;
109    padding: 0 10px;
110    tr:hover {
111      td,
112      th {
113        background-color: $table-hover-color;
114
115        &.no-highlight {
116          background-color: white;
117        }
118      }
119    }
120    th {
121      text-align: left;
122      width: 30%;
123      font-weight: normal;
124      vertical-align: top;
125    }
126    td.value {
127      white-space: pre-wrap;
128    }
129    td.padding {
130      min-width: 10px;
131    }
132    .array-index {
133      text-align: right;
134    }
135  }
136
137  .auto-layout {
138    table-layout: auto;
139  }
140}
141
142.slice-details-latency-panel {
143  // This panel is set to relative to make this panel a positioned element
144  // This is to allow the absolute text panels below to be positioned relative
145  // to this panel and not our parent.
146  position: relative;
147  user-select: text;
148
149  .text-detail {
150    font-size: smaller;
151  }
152
153  .slice-details-wakeup-text {
154    position: absolute;
155    left: 40px;
156    top: 20px;
157  }
158
159  .slice-details-latency-text {
160    position: absolute;
161    left: 106px;
162    top: 90px;
163  }
164
165  .slice-details-image {
166    user-select: none;
167    width: 180px;
168    height: 150px;
169  }
170}
171
172.details-table-multicolumn {
173  display: flex;
174  user-select: "text";
175}
176
177.flow-link:hover {
178  cursor: pointer;
179  text-decoration: underline;
180}
181
182.flow-info i.material-icons {
183  color: rgb(60, 86, 136);
184}
185
186.warning {
187  position: relative;
188  font-size: 13px;
189  color: hsl(45, 100%, 48%);
190}
191
192.warning i.material-icons {
193  font-size: 13px;
194}
195
196.warning .tooltip {
197  visibility: hidden;
198
199  background-color: white;
200  color: #3f4040;
201  box-shadow: 1px 3px 15px rgba(23, 32, 44, 0.3);
202
203  padding: 4px;
204  border-radius: 4px;
205
206  text-align: center;
207  white-space: nowrap;
208
209  position: absolute;
210  z-index: 1;
211  top: -5px;
212  left: 105%;
213}
214
215.warning:hover .tooltip {
216  visibility: visible;
217}
218
219.flow-button {
220  color: rgb(60, 86, 136);
221}
222
223.half-width-panel {
224  max-width: 50%;
225  flex-grow: 1;
226  height: fit-content;
227}
228
229.notes-editor-panel {
230  padding: 10px;
231  display: flex;
232  flex-direction: column;
233  height: 100%;
234  font-family: "Roboto Condensed", sans-serif;
235  font-weight: 300;
236  color: #3c4b5d;
237
238  .notes-editor-panel-heading-bar {
239    display: flex;
240    padding-bottom: 8px;
241    font-size: 14px;
242    .notes-editor-panel-heading {
243      padding-top: 3px;
244    }
245    input {
246      vertical-align: middle;
247    }
248  }
249
250  input[type="text"] {
251    flex-grow: 1;
252    border-radius: 4px;
253    border: 1px solid #dcdcdc;
254    padding: 3px;
255    margin: 0 10px;
256    &:focus {
257      outline: none;
258      box-shadow: 1px 1px 1px rgba(23, 32, 44, 0.3);
259    }
260  }
261}
262
263.sum {
264  font-weight: bolder;
265  font-size: 12px;
266  .sum-data {
267    border-bottom: 1px solid $table-border-color;
268  }
269}
270
271.log-panel {
272  display: contents;
273
274  header {
275    position: sticky;
276    top: 0;
277    left: 0;
278    z-index: 1;
279    background-color: white;
280    color: #3c4b5d;
281    padding: 5px;
282    display: grid;
283    grid-template-columns: auto auto;
284    justify-content: space-between;
285  }
286
287  .log-rows-label {
288    display: flex;
289    align-items: center;
290  }
291
292  .log-filters {
293    display: flex;
294    margin-right: 5px;
295    align-items: center;
296
297    .log-label {
298      padding-right: 0.35rem;
299    }
300
301    .tag-container {
302      height: auto;
303      min-height: 34px;
304      padding: 2px;
305      margin: 2px;
306      cursor: text;
307      border-radius: 3px;
308      display: flex;
309      align-items: center;
310
311      .chips .chip {
312        display: inline-block;
313        width: auto;
314        float: left;
315
316        background-color: #0878b2;
317        color: #fff;
318        border-radius: 3px;
319        margin: 2px;
320        overflow: hidden;
321
322        .chip-button {
323          padding: 4px;
324          cursor: pointer;
325          background-color: #054570;
326          display: inline-block;
327        }
328
329        .chip-text {
330          padding: 4px;
331          display: inline-block;
332          pointer-events: none;
333        }
334      }
335
336      .chip-input {
337        margin-left: 5px;
338      }
339    }
340
341    .filter-widget {
342      user-select: none;
343      cursor: pointer;
344      position: relative;
345      display: inline-block;
346    }
347
348    .filter-widget .tooltip {
349      visibility: hidden;
350      width: 120px;
351      background-color: black;
352      color: #fff;
353      text-align: center;
354      border-radius: 6px;
355      padding: 5px 0;
356
357      /* Position the tooltip */
358      position: absolute;
359      z-index: 1;
360      top: 130%;
361      right: 50%;
362    }
363
364    .filter-widget:hover .tooltip {
365      visibility: visible;
366    }
367  }
368
369  header.stale {
370    color: grey;
371  }
372}
373
374.pf-ftrace-explorer {
375  height: 100%;
376  font-size: 11px;
377  font-family: var(--monospace-font);
378
379  .pf-ftrace-namebox {
380    display: flex;
381    align-items: center;
382
383    .pf-ftrace-colorbox {
384      display: inline-block;
385      height: 10px;
386      width: 10px;
387      margin-right: 4px;
388    }
389  }
390}
391
392.pf-android-logs-table {
393  height: 100%;
394  font-size: 11px;
395  font-family: var(--monospace-font);
396
397  .D {
398    color: hsl(122, 20%, 40%);
399  }
400  .V {
401    color: hsl(122, 20%, 30%);
402  }
403  .I {
404    color: hsl(0, 0%, 20%);
405  }
406  .W {
407    color: hsl(45, 60%, 45%);
408  }
409  .E {
410    color: hsl(4, 90%, 58%);
411  }
412  .F {
413    color: hsl(291, 64%, 42%);
414  }
415  .pf-highlighted {
416    background: #d2efe0;
417  }
418}
419
420.pf-details-table {
421  margin: 10px;
422}
423
424.screenshot-panel {
425  height: 100%;
426  img {
427    max-height: 100%;
428  }
429}
430
431.pf-noselection {
432  height: 100%;
433}
434
435.flamegraph-profile {
436  height: 100%;
437  // This is required to position locally-scoped (i.e. non-full-screen) modal
438  // dialogs within the panel, as they use position: absolute.
439  position: relative;
440
441  .time {
442    justify-self: end;
443    margin-right: 10px;
444  }
445  .selected {
446    justify-self: end;
447    margin-right: 10px;
448    white-space: nowrap;
449    overflow: hidden;
450    text-overflow: ellipsis;
451    width: 200px;
452  }
453}
454