1 /* 2 * Copyright (C) 2013 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 11 * 2. Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following disclaimer 13 * in the documentation and/or other materials provided with the 14 * distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. AND ITS CONTRIBUTORS 17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. 20 * OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 /** 30 * @constructor 31 * @extends {WebInspector.PanelDescriptor} 32 */ 33 WebInspector.ProfilesPanelDescriptor = function() 34 { 35 WebInspector.PanelDescriptor.call(this, "profiles", WebInspector.UIString("Profiles"), "ProfilesPanel", "ProfilesPanel.js"); 36 } 37 38 WebInspector.ProfilesPanelDescriptor.prototype = { 39 registerShortcuts: function() 40 { 41 var section = WebInspector.shortcutsScreen.section(WebInspector.UIString("Profiles Panel")); 42 section.addAlternateKeys(WebInspector.ProfilesPanelDescriptor.ShortcutKeys.StartStopRecording, WebInspector.UIString("Start/stop recording")); 43 }, 44 45 __proto__: WebInspector.PanelDescriptor.prototype 46 } 47 48 WebInspector.ProfilesPanelDescriptor.ShortcutKeys = { 49 StartStopRecording: [ 50 WebInspector.KeyboardShortcut.makeDescriptor("e", WebInspector.KeyboardShortcut.Modifiers.CtrlOrMeta) 51 ] 52 } 53 54 WebInspector.ProfilesPanelDescriptor.ProfileURLRegExp = /webkit-profile:\/\/(.+)\/(.+)/; 55 56 WebInspector.ProfilesPanelDescriptor.UserInitiatedProfileName = "org.webkit.profiles.user-initiated"; 57 58 /** 59 * @param {string} title 60 * @return {boolean} 61 */ 62 WebInspector.ProfilesPanelDescriptor.isUserInitiatedProfile = function(title) 63 { 64 return title.startsWith(WebInspector.ProfilesPanelDescriptor.UserInitiatedProfileName); 65 } 66 67 /** 68 * @param {string} title 69 * @return {number} 70 * @throws {string} 71 */ 72 WebInspector.ProfilesPanelDescriptor.userInitiatedProfileIndex = function(title) 73 { 74 if (!WebInspector.ProfilesPanelDescriptor.isUserInitiatedProfile(title)) 75 throw "Not user-initiated profile title."; 76 var suffix = title.substring(WebInspector.ProfilesPanelDescriptor.UserInitiatedProfileName.length + 1); 77 return parseInt(suffix, 10); 78 } 79 80 /** 81 * @param {string} title 82 * @return {string} 83 */ 84 WebInspector.ProfilesPanelDescriptor.resolveProfileTitle = function(title) 85 { 86 if (!WebInspector.ProfilesPanelDescriptor.isUserInitiatedProfile(title)) 87 return title; 88 return WebInspector.UIString("Profile %d", WebInspector.ProfilesPanelDescriptor.userInitiatedProfileIndex(title)); 89 } 90 91 /** 92 * @param {Event} event 93 */ 94 WebInspector.ProfilesPanelDescriptor._openCPUProfile = function(event) 95 { 96 event.preventDefault(); 97 var panel = WebInspector.showPanel("profiles"); 98 var link = /** @type {!Element} */ (event.target); 99 var view = /** @type {WebInspector.CPUProfileView} */ (panel.showProfile("CPU", link.profileUID)); 100 if (!view) 101 return; 102 if (typeof link.timeLeft === "number" && typeof link.timeRight === "number") 103 view.selectRange(link.timeLeft, link.timeRight); 104 } 105 106 /** 107 * @param {number} uid 108 * @param {string} linkText 109 * @param {number=} timeLeft 110 * @param {number=} timeRight 111 * @param {string=} tooltipText 112 * @return {!Element} 113 */ 114 WebInspector.ProfilesPanelDescriptor.linkifyCPUProfile = function(uid, linkText, timeLeft, timeRight, tooltipText) 115 { 116 var link = document.createElement("a"); 117 link.innerText = linkText; 118 link.href = WebInspector.UIString("show CPU profile"); 119 link.target = "_blank"; 120 if (tooltipText) 121 link.title = tooltipText; 122 link.timeLeft = timeLeft; 123 link.timeRight = timeRight; 124 link.profileUID = uid; 125 link.addEventListener("click", WebInspector.ProfilesPanelDescriptor._openCPUProfile, true); 126 return link; 127 } 128