summaryrefslogtreecommitdiff
path: root/deps/v8/tools/system-analyzer/view/map-panel.mjs
blob: 7ee2325f34c4a817b0e39f1804e44046579136d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
// Copyright 2020 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import './map-panel/map-details.mjs';
import './map-panel/map-transitions.mjs';

import {MapLogEntry} from '../log/map.mjs';

import {FocusEvent} from './events.mjs';
import {DOM, V8CustomElement} from './helper.mjs';

DOM.defineCustomElement(
    'view/map-panel', (templateText) => class MapPanel extends V8CustomElement {
      _map;
      _timeline;
      _selectedLogEntries = [];
      _displayedLogEntries = [];

      constructor() {
        super(templateText);
        this.searchBarBtn.addEventListener('click', e => this._handleSearch(e));
        this.showAllRadio.onclick = _ => this._showEntries(this._timeline);
        this.showTimerangeRadio.onclick = _ =>
            this._showEntries(this._timeline.selectionOrSelf);
        this.showSelectionRadio.onclick = _ =>
            this._showEntries(this._selectedLogEntries);
      }

      get showAllRadio() {
        return this.$('#show-all');
      }
      get showTimerangeRadio() {
        return this.$('#show-timerange');
      }
      get showSelectionRadio() {
        return this.$('#show-selection');
      }

      get mapTransitionsPanel() {
        return this.$('#map-transitions');
      }

      get mapDetailsTransitionsPanel() {
        return this.$('#map-details-transitions');
      }

      get mapDetailsPanel() {
        return this.$('#map-details');
      }

      get searchBarBtn() {
        return this.$('#searchBarBtn');
      }

      get searchBar() {
        return this.$('#searchBar');
      }

      set timeline(timeline) {
        console.assert(timeline !== undefined, 'timeline undefined!');
        this._timeline = timeline;
        this.$('.panel').style.display =
            timeline.isEmpty() ? 'none' : 'inherit';
        this.mapTransitionsPanel.timeline = timeline;
        this.mapDetailsTransitionsPanel.timeline = timeline;
      }

      set selectedLogEntries(entries) {
        if (entries === this._timeline.selection) {
          this.showTimerangeRadio.click();
        } else if (entries == this._timeline) {
          this.showAllRadio.click();
        } else {
          this._selectedLogEntries = entries;
          this.showSelectionRadio.click();
        }
      }

      set map(map) {
        this._map = map;
        this.mapDetailsTransitionsPanel.selectedLogEntries = [map];
        this.mapDetailsPanel.map = map;
      }

      _showEntries(entries) {
        this._displayedLogEntries = entries;
        this.mapTransitionsPanel.selectedLogEntries = entries;
      }

      update() {
        // nothing to do
      }

      _handleSearch(e) {
        let searchBar = this.$('#searchBarInput');
        let searchBarInput = searchBar.value;
        // access the map from model cache
        let selectedMap = MapLogEntry.get(searchBarInput);
        if (selectedMap) {
          searchBar.className = 'success';
          this.dispatchEvent(new FocusEvent(selectedMap));
        } else {
          searchBar.className = 'failure';
        }
      }
    });