| // Copyright (c) 2012 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. |
| |
| 'use strict'; |
| |
| /** |
| * @fileoverview Model is a parsed representation of the |
| * TraceEvents obtained from base/trace_event in which the begin-end |
| * tokens are converted into a hierarchy of processes, threads, |
| * subrows, and slices. |
| * |
| * The building block of the model is a slice. A slice is roughly |
| * equivalent to function call executing on a specific thread. As a |
| * result, slices may have one or more subslices. |
| * |
| * A thread contains one or more subrows of slices. Row 0 corresponds to |
| * the "root" slices, e.g. the topmost slices. Row 1 contains slices that |
| * are nested 1 deep in the stack, and so on. We use these subrows to draw |
| * nesting tasks. |
| * |
| */ |
| 'use strict'; |
| base.exportTo('base', function() { |
| |
| function Range() { |
| this.isEmpty_ = true; |
| this.min_ = undefined; |
| this.max_ = undefined; |
| }; |
| |
| Range.prototype = { |
| __proto__: Object.prototype, |
| |
| reset: function() { |
| this.isEmpty_ = true; |
| this.min_ = undefined; |
| this.max_ = undefined; |
| }, |
| |
| get isEmpty() { |
| return this.isEmpty_; |
| }, |
| |
| addRange: function(range) { |
| if (range.isEmpty) |
| return; |
| this.addValue(range.min); |
| this.addValue(range.max); |
| }, |
| |
| addValue: function(value) { |
| if (this.isEmpty_) { |
| this.max_ = value; |
| this.min_ = value; |
| this.isEmpty_ = false; |
| return; |
| } |
| this.max_ = Math.max(this.max_, value); |
| this.min_ = Math.min(this.min_, value); |
| }, |
| |
| get min() { |
| if (this.isEmpty_) |
| return undefined; |
| return this.min_; |
| }, |
| |
| get max() { |
| if (this.isEmpty_) |
| return undefined; |
| return this.max_; |
| }, |
| }; |
| |
| return { |
| Range: Range |
| }; |
| |
| }); |