Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(420)

Unified Diff: Source/devtools/front_end/profiler/CPUProfileDataGrid.js

Issue 696703003: DevTools: implement search for CPUProfiler FlameChart view (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: comments addressed Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/devtools/front_end/profiler/CPUProfileDataGrid.js
diff --git a/Source/devtools/front_end/profiler/CPUProfileDataGrid.js b/Source/devtools/front_end/profiler/CPUProfileDataGrid.js
index 869bd6f480bd7c96187c64b9ce91ed76cb558cc7..e2d8676bdc8b2a4363214b371f3cbee5b3665377 100644
--- a/Source/devtools/front_end/profiler/CPUProfileDataGrid.js
+++ b/Source/devtools/front_end/profiler/CPUProfileDataGrid.js
@@ -363,6 +363,7 @@ WebInspector.ProfileDataGridNode.populate = function(container)
/**
* @constructor
+ * @implements {WebInspector.CPUProfileView.Searchable}
* @param {!WebInspector.CPUProfileView} profileView
* @param {!ProfilerAgent.CPUProfileNode} rootProfileNode
*/
@@ -436,6 +437,163 @@ WebInspector.ProfileDataGridTree.prototype = {
children[index].restore();
this._savedChildren = null;
+ },
+
+ /**
+ * @param {!WebInspector.SearchableView.SearchConfig} searchConfig
+ * @param {boolean} shouldJump
+ * @param {boolean=} jumpBackwards
+ * @return {number}
+ */
+ performSearch: function(searchConfig, shouldJump, jumpBackwards)
+ {
+ this.searchCanceled();
+ var query = searchConfig.query.trim();
+ if (!query.length)
+ return 0;
+
+ var greaterThan = (query.startsWith(">"));
+ var lessThan = (query.startsWith("<"));
+ var equalTo = (query.startsWith("=") || ((greaterThan || lessThan) && query.indexOf("=") === 1));
+ var percentUnits = (query.endsWith("%"));
+ var millisecondsUnits = (query.length > 2 && query.endsWith("ms"));
+ var secondsUnits = (!millisecondsUnits && query.endsWith("s"));
+
+ var queryNumber = parseFloat(query);
+ if (greaterThan || lessThan || equalTo) {
+ if (equalTo && (greaterThan || lessThan))
+ queryNumber = parseFloat(query.substring(2));
+ else
+ queryNumber = parseFloat(query.substring(1));
+ }
+
+ var queryNumberMilliseconds = (secondsUnits ? (queryNumber * 1000) : queryNumber);
+
+ // Make equalTo implicitly true if it wasn't specified there is no other operator.
+ if (!isNaN(queryNumber) && !(greaterThan || lessThan))
+ equalTo = true;
+
+ var matcher = createPlainTextSearchRegex(query, "i");
+
+ function matchesQuery(/*ProfileDataGridNode*/ profileDataGridNode)
+ {
+ delete profileDataGridNode._searchMatchedSelfColumn;
+ delete profileDataGridNode._searchMatchedTotalColumn;
+ delete profileDataGridNode._searchMatchedFunctionColumn;
+
+ if (percentUnits) {
+ if (lessThan) {
+ if (profileDataGridNode.selfPercent < queryNumber)
+ profileDataGridNode._searchMatchedSelfColumn = true;
+ if (profileDataGridNode.totalPercent < queryNumber)
+ profileDataGridNode._searchMatchedTotalColumn = true;
+ } else if (greaterThan) {
+ if (profileDataGridNode.selfPercent > queryNumber)
+ profileDataGridNode._searchMatchedSelfColumn = true;
+ if (profileDataGridNode.totalPercent > queryNumber)
+ profileDataGridNode._searchMatchedTotalColumn = true;
+ }
+
+ if (equalTo) {
+ if (profileDataGridNode.selfPercent == queryNumber)
+ profileDataGridNode._searchMatchedSelfColumn = true;
+ if (profileDataGridNode.totalPercent == queryNumber)
+ profileDataGridNode._searchMatchedTotalColumn = true;
+ }
+ } else if (millisecondsUnits || secondsUnits) {
+ if (lessThan) {
+ if (profileDataGridNode.selfTime < queryNumberMilliseconds)
+ profileDataGridNode._searchMatchedSelfColumn = true;
+ if (profileDataGridNode.totalTime < queryNumberMilliseconds)
+ profileDataGridNode._searchMatchedTotalColumn = true;
+ } else if (greaterThan) {
+ if (profileDataGridNode.selfTime > queryNumberMilliseconds)
+ profileDataGridNode._searchMatchedSelfColumn = true;
+ if (profileDataGridNode.totalTime > queryNumberMilliseconds)
+ profileDataGridNode._searchMatchedTotalColumn = true;
+ }
+
+ if (equalTo) {
+ if (profileDataGridNode.selfTime == queryNumberMilliseconds)
+ profileDataGridNode._searchMatchedSelfColumn = true;
+ if (profileDataGridNode.totalTime == queryNumberMilliseconds)
+ profileDataGridNode._searchMatchedTotalColumn = true;
+ }
+ }
+
+ if (profileDataGridNode.functionName.match(matcher) || (profileDataGridNode.url && profileDataGridNode.url.match(matcher)))
+ profileDataGridNode._searchMatchedFunctionColumn = true;
+
+ if (profileDataGridNode._searchMatchedSelfColumn ||
+ profileDataGridNode._searchMatchedTotalColumn ||
+ profileDataGridNode._searchMatchedFunctionColumn) {
+ profileDataGridNode.refresh();
+ return true;
+ }
+
+ return false;
+ }
+
+ var current = this.children[0];
+ this._searchResults = [];
+ while (current) {
+ if (matchesQuery(current))
+ this._searchResults.push({ profileNode: current });
+
+ current = current.traverseNextNode(false, null, false);
+ }
+ this._searchResultIndex = jumpBackwards ? 0 : this._searchResults.length - 1;
+ return this._searchResults.length;
+ },
+
+ searchCanceled: function()
+ {
+ if (this._searchResults) {
+ for (var i = 0; i < this._searchResults.length; ++i) {
+ var profileNode = this._searchResults[i].profileNode;
+ delete profileNode._searchMatchedSelfColumn;
+ delete profileNode._searchMatchedTotalColumn;
+ delete profileNode._searchMatchedFunctionColumn;
+ profileNode.refresh();
+ }
+ }
+
+ this._searchResults = [];
+ this._searchResultIndex = -1;
+ },
+
+ jumpToNextSearchResult: function()
+ {
+ if (!this._searchResults || !this._searchResults.length)
+ return;
+ this._searchResultIndex = (this._searchResultIndex + 1) % this._searchResults.length;
+ this._jumpToSearchResult(this._searchResultIndex);
+ },
+
+ jumpToPreviousSearchResult: function()
+ {
+ if (!this._searchResults || !this._searchResults.length)
+ return;
+ this._searchResultIndex = (this._searchResultIndex - 1 + this._searchResults.length) % this._searchResults.length;
+ this._jumpToSearchResult(this._searchResultIndex);
+ },
+
+ /**
+ * @return {number}
+ */
+ currentSearchResultIndex: function()
+ {
+ return this._searchResultIndex;
+ },
+
+ _jumpToSearchResult: function(index)
+ {
+ var searchResult = this._searchResults[index];
+ if (!searchResult)
+ return;
+
+ var profileNode = searchResult.profileNode;
+ profileNode.revealAndSelect();
}
}
« no previous file with comments | « Source/devtools/front_end/components/SearchableView.js ('k') | Source/devtools/front_end/profiler/CPUProfileFlameChart.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698