| // Copyright 2017 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. |
| |
| (async function() { |
| TestRunner.addResult(`Tests that search works for large bottom-up view of CPU profile.\n`); |
| await TestRunner.loadModule('cpu_profiler_test_runner'); |
| |
| var nodesCount = 200; |
| function buildTree(startId, count) { |
| // Build a call tree of a chain form: foo1 -> foo2 -> foo3 -> ... |
| // This should give a O(n^2) nodes in bottom-up tree. |
| var nodes = []; |
| for (var i = 1; i <= count; ++i) { |
| nodes.push({ |
| 'id': startId + i - 1, |
| 'callFrame': {'functionName': 'foo' + i, 'scriptId': '0', 'url': 'a.js', 'lineNumber': i, 'columnNumber': 0}, |
| 'hitCount': 10, |
| 'children': i < count ? [startId + i] : [] |
| }); |
| } |
| return nodes; |
| } |
| var profileAndExpectations = { |
| 'title': 'profile1', |
| 'target': function() { |
| return SDK.targetManager.targets()[0]; |
| }, |
| 'profileModel': () => new SDK.CPUProfileDataModel({ |
| 'nodes': [ |
| { |
| 'id': 0, |
| 'callFrame': { |
| 'functionName': '(root)', |
| 'scriptId': '0', |
| 'url': 'a.js', |
| 'lineNumber': 0, |
| 'columnNumber': 0, |
| }, |
| 'hitCount': 1, |
| 'children': [1, 2] |
| }, |
| { |
| 'id': 1, |
| 'callFrame': {'functionName': '(idle)', 'scriptId': '0', 'url': 'a.js', 'lineNumber': 1, 'columnNumber': 1}, |
| 'hitCount': 2, |
| 'children': [] |
| } |
| ].concat(buildTree(2, nodesCount)), |
| 'startTime': 0, |
| 'endTime': nodesCount * 10e3 + 3e3 |
| }) |
| }; |
| var view = new Profiler.CPUProfileView(profileAndExpectations); |
| view.viewSelectComboBox.setSelectedIndex(1); |
| view._changeView(); |
| var tree = view.profileDataGridTree; |
| if (!tree) |
| TestRunner.addResult('no tree'); |
| tree.performSearch(new UI.SearchableView.SearchConfig('foo12', true, false), false); |
| for (var item of tree._searchResults) { |
| var node = item.profileNode; |
| TestRunner.addResult(`${node.callUID}: ${node.functionName} ${node.self} ${node.total}`); |
| } |
| CPUProfilerTestRunner.completeProfilerTest(); |
| })(); |