blob: f94b7f4762bced08f41e051dfa2e324855557da6 [file] [log] [blame]
<!DOCTYPE html>
<!--
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.
-->
<link rel="import" href="/base/base.html">
<script>
'use strict';
tv.exportTo('tv.c', function() {
function matchLower(value, pattern) {
return value.toLowerCase().indexOf(pattern) !== -1;
}
/**
* @constructor The generic base class for filtering a TraceModel based on
* various rules. The base class returns true for everything.
*/
function Filter() { }
Filter.prototype = {
__proto__: Object.prototype,
matchCounter: function(counter) {
return true;
},
matchCpu: function(cpu) {
return true;
},
matchProcess: function(process) {
return true;
},
matchSlice: function(slice) {
return true;
},
matchThread: function(thread) {
return true;
}
};
/**
* @constructor A filter that matches objects by their name or category
* case insensitive.
* .findAllObjectsMatchingFilter
*/
function TitleOrCategoryFilter(text) {
Filter.call(this);
this.text_ = text.toLowerCase();
if (!text.length)
throw new Error('Filter text is empty.');
}
TitleOrCategoryFilter.prototype = {
__proto__: Filter.prototype,
matchSlice: function(slice) {
if (slice.title === undefined && slice.category === undefined)
return false;
return matchLower(slice.title, this.text_) ||
(!!slice.category && matchLower(slice.category, this.text_));
}
};
/**
* @constructor A filter that matches objects with the exact given title.
*/
function ExactTitleFilter(text) {
Filter.call(this);
this.text_ = text;
if (!text.length)
throw new Error('Filter text is empty.');
}
ExactTitleFilter.prototype = {
__proto__: Filter.prototype,
matchSlice: function(slice) {
return slice.title === this.text_;
}
};
return {
Filter: Filter,
TitleOrCategoryFilter: TitleOrCategoryFilter,
ExactTitleFilter: ExactTitleFilter
};
});
</script>