| <!DOCTYPE html> |
| <!-- |
| Copyright (c) 2015 The Chromium Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| --> |
| |
| <link rel="import" href="/tracing/model/event_set.html"> |
| |
| <script> |
| 'use strict'; |
| |
| tr.exportTo('tr.ui.analysis', function() { |
| var FLOW_IN = 0x1; |
| var FLOW_OUT = 0x2; |
| var FLOW_IN_OUT = FLOW_IN | FLOW_OUT; |
| |
| function FlowClassifier() { |
| this.numEvents_ = 0; |
| this.eventsByGUID_ = {}; |
| } |
| |
| FlowClassifier.prototype = { |
| getFS_: function(event) { |
| var fs = this.eventsByGUID_[event.guid]; |
| if (fs === undefined) { |
| this.numEvents_++; |
| fs = { |
| state: 0, |
| event: event |
| }; |
| this.eventsByGUID_[event.guid] = fs; |
| } |
| return fs; |
| }, |
| |
| addInFlow: function(event) { |
| var fs = this.getFS_(event); |
| fs.state |= FLOW_IN; |
| return event; |
| }, |
| |
| addOutFlow: function(event) { |
| var fs = this.getFS_(event); |
| fs.state |= FLOW_OUT; |
| return event; |
| }, |
| |
| hasEvents: function() { |
| return this.numEvents_ > 0; |
| }, |
| |
| get inFlowEvents() { |
| var selection = new tr.model.EventSet(); |
| for (var guid in this.eventsByGUID_) { |
| var fs = this.eventsByGUID_[guid]; |
| if (fs.state === FLOW_IN) |
| selection.push(fs.event); |
| } |
| return selection; |
| }, |
| |
| get outFlowEvents() { |
| var selection = new tr.model.EventSet(); |
| for (var guid in this.eventsByGUID_) { |
| var fs = this.eventsByGUID_[guid]; |
| if (fs.state === FLOW_OUT) |
| selection.push(fs.event); |
| } |
| return selection; |
| }, |
| |
| get internalFlowEvents() { |
| var selection = new tr.model.EventSet(); |
| for (var guid in this.eventsByGUID_) { |
| var fs = this.eventsByGUID_[guid]; |
| if (fs.state === FLOW_IN_OUT) |
| selection.push(fs.event); |
| } |
| return selection; |
| } |
| }; |
| |
| return { |
| FlowClassifier: FlowClassifier |
| }; |
| }); |
| </script> |
| |