mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1131397 - Add missing functionality to the profiler actor. r=vporof
--HG-- rename : toolkit/devtools/server/tests/unit/test_profiler_close.js => toolkit/devtools/server/tests/unit/test_profiler_getfeatures.js rename : toolkit/devtools/server/tests/unit/test_profiler_close.js => toolkit/devtools/server/tests/unit/test_profiler_getsharedlibraryinformation.js
This commit is contained in:
parent
95dad56d90
commit
9c91e5412d
@ -379,7 +379,8 @@ PerformanceFront.prototype = {
|
|||||||
_customProfilerOptions: {
|
_customProfilerOptions: {
|
||||||
entries: 1000000,
|
entries: 1000000,
|
||||||
interval: 1,
|
interval: 1,
|
||||||
features: ["js"]
|
features: ["js"],
|
||||||
|
threadFilters: ["GeckoMain"]
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -431,7 +431,8 @@ ProfilerFront.prototype = {
|
|||||||
_customProfilerOptions: {
|
_customProfilerOptions: {
|
||||||
entries: 1000000,
|
entries: 1000000,
|
||||||
interval: 1,
|
interval: 1,
|
||||||
features: ["js"]
|
features: ["js"],
|
||||||
|
threadFilters: ["GeckoMain"]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ const DevToolsUtils = require("devtools/toolkit/DevToolsUtils.js");
|
|||||||
let DEFAULT_PROFILER_ENTRIES = 1000000;
|
let DEFAULT_PROFILER_ENTRIES = 1000000;
|
||||||
let DEFAULT_PROFILER_INTERVAL = 1;
|
let DEFAULT_PROFILER_INTERVAL = 1;
|
||||||
let DEFAULT_PROFILER_FEATURES = ["js"];
|
let DEFAULT_PROFILER_FEATURES = ["js"];
|
||||||
|
let DEFAULT_PROFILER_THREADFILTERS = ["GeckoMain"];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The nsIProfiler is target agnostic and interacts with the whole platform.
|
* The nsIProfiler is target agnostic and interacts with the whole platform.
|
||||||
@ -46,6 +47,15 @@ ProfilerActor.prototype = {
|
|||||||
checkProfilerConsumers();
|
checkProfilerConsumers();
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns an array of feature strings, describing the profiler features
|
||||||
|
* that are available on this platform. Can be called while the profiler
|
||||||
|
* is stopped.
|
||||||
|
*/
|
||||||
|
onGetFeatures: function() {
|
||||||
|
return { features: nsIProfilerModule.GetFeatures([]) };
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Starts the nsIProfiler module. Doing so will discard any samples
|
* Starts the nsIProfiler module. Doing so will discard any samples
|
||||||
* that might have been accumulated so far.
|
* that might have been accumulated so far.
|
||||||
@ -53,13 +63,16 @@ ProfilerActor.prototype = {
|
|||||||
* @param number entries [optional]
|
* @param number entries [optional]
|
||||||
* @param number interval [optional]
|
* @param number interval [optional]
|
||||||
* @param array:string features [optional]
|
* @param array:string features [optional]
|
||||||
|
* @param array:string threadFilters [description]
|
||||||
*/
|
*/
|
||||||
onStartProfiler: function(request = {}) {
|
onStartProfiler: function(request = {}) {
|
||||||
nsIProfilerModule.StartProfiler(
|
nsIProfilerModule.StartProfiler(
|
||||||
(request.entries || DEFAULT_PROFILER_ENTRIES),
|
(request.entries || DEFAULT_PROFILER_ENTRIES),
|
||||||
(request.interval || DEFAULT_PROFILER_INTERVAL),
|
(request.interval || DEFAULT_PROFILER_INTERVAL),
|
||||||
(request.features || DEFAULT_PROFILER_FEATURES),
|
(request.features || DEFAULT_PROFILER_FEATURES),
|
||||||
(request.features || DEFAULT_PROFILER_FEATURES).length);
|
(request.features || DEFAULT_PROFILER_FEATURES).length,
|
||||||
|
(request.threadFilters || DEFAULT_PROFILER_THREADFILTERS),
|
||||||
|
(request.threadFilters || DEFAULT_PROFILER_THREADFILTERS).length);
|
||||||
|
|
||||||
return { started: true };
|
return { started: true };
|
||||||
},
|
},
|
||||||
@ -88,6 +101,15 @@ ProfilerActor.prototype = {
|
|||||||
return { isActive: isActive, currentTime: elapsedTime };
|
return { isActive: isActive, currentTime: elapsedTime };
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a stringified JSON object that describes the shared libraries
|
||||||
|
* which are currently loaded into our process. Can be called while the
|
||||||
|
* profiler is stopped.
|
||||||
|
*/
|
||||||
|
onGetSharedLibraryInformation: function() {
|
||||||
|
return { sharedLibraryInformation: nsIProfilerModule.getSharedLibraryInformation() };
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns all the samples accumulated since the profiler was started,
|
* Returns all the samples accumulated since the profiler was started,
|
||||||
* along with the current time. The data has the following format:
|
* along with the current time. The data has the following format:
|
||||||
@ -297,11 +319,16 @@ function checkProfilerConsumers() {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* The request types this actor can handle.
|
* The request types this actor can handle.
|
||||||
|
* At the moment there are two known users of the Profiler actor:
|
||||||
|
* the devtools and the Gecko Profiler addon, which uses the debugger
|
||||||
|
* protocol to get profiles from Fennec.
|
||||||
*/
|
*/
|
||||||
ProfilerActor.prototype.requestTypes = {
|
ProfilerActor.prototype.requestTypes = {
|
||||||
|
"getFeatures": ProfilerActor.prototype.onGetFeatures,
|
||||||
"startProfiler": ProfilerActor.prototype.onStartProfiler,
|
"startProfiler": ProfilerActor.prototype.onStartProfiler,
|
||||||
"stopProfiler": ProfilerActor.prototype.onStopProfiler,
|
"stopProfiler": ProfilerActor.prototype.onStopProfiler,
|
||||||
"isActive": ProfilerActor.prototype.onIsActive,
|
"isActive": ProfilerActor.prototype.onIsActive,
|
||||||
|
"getSharedLibraryInformation": ProfilerActor.prototype.onGetSharedLibraryInformation,
|
||||||
"getProfile": ProfilerActor.prototype.onGetProfile,
|
"getProfile": ProfilerActor.prototype.onGetProfile,
|
||||||
"registerEventNotifications": ProfilerActor.prototype.onRegisterEventNotifications,
|
"registerEventNotifications": ProfilerActor.prototype.onRegisterEventNotifications,
|
||||||
"unregisterEventNotifications": ProfilerActor.prototype.onUnregisterEventNotifications
|
"unregisterEventNotifications": ProfilerActor.prototype.onUnregisterEventNotifications
|
||||||
|
@ -0,0 +1,47 @@
|
|||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests whether the profiler responds to "getFeatures" adequately.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
|
||||||
|
|
||||||
|
function connect_client(callback)
|
||||||
|
{
|
||||||
|
let client = new DebuggerClient(DebuggerServer.connectPipe());
|
||||||
|
client.connect(() => {
|
||||||
|
client.listTabs(response => {
|
||||||
|
callback(client, response.profilerActor);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function run_test()
|
||||||
|
{
|
||||||
|
DebuggerServer.init();
|
||||||
|
DebuggerServer.addBrowserActors();
|
||||||
|
|
||||||
|
connect_client((client, actor) => {
|
||||||
|
test_getfeatures(client, actor, () => {
|
||||||
|
client.close(() => {
|
||||||
|
do_test_finished();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
do_test_pending();
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_getfeatures(client, actor, callback)
|
||||||
|
{
|
||||||
|
client.request({ to: actor, type: "getFeatures" }, response => {
|
||||||
|
do_check_eq(typeof response.features, "object");
|
||||||
|
do_check_true(response.features.length >= 1);
|
||||||
|
do_check_eq(typeof response.features[0], "string");
|
||||||
|
do_check_true(response.features.indexOf("js") != -1);
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
/* Any copyright is dedicated to the Public Domain.
|
||||||
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||||
|
|
||||||
|
"use strict";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests whether the profiler responds to "getSharedLibraryInformation" adequately.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const Profiler = Cc["@mozilla.org/tools/profiler;1"].getService(Ci.nsIProfiler);
|
||||||
|
|
||||||
|
function connect_client(callback)
|
||||||
|
{
|
||||||
|
let client = new DebuggerClient(DebuggerServer.connectPipe());
|
||||||
|
client.connect(() => {
|
||||||
|
client.listTabs(response => {
|
||||||
|
callback(client, response.profilerActor);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function run_test()
|
||||||
|
{
|
||||||
|
DebuggerServer.init();
|
||||||
|
DebuggerServer.addBrowserActors();
|
||||||
|
|
||||||
|
connect_client((client, actor) => {
|
||||||
|
test_getsharedlibraryinformation(client, actor, () => {
|
||||||
|
client.close(() => {
|
||||||
|
do_test_finished();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
do_test_pending();
|
||||||
|
}
|
||||||
|
|
||||||
|
function test_getsharedlibraryinformation(client, actor, callback)
|
||||||
|
{
|
||||||
|
client.request({ to: actor, type: "getSharedLibraryInformation" }, response => {
|
||||||
|
do_check_eq(typeof response.sharedLibraryInformation, "string");
|
||||||
|
let libs = [];
|
||||||
|
try {
|
||||||
|
libs = JSON.parse(response.sharedLibraryInformation);
|
||||||
|
} catch (e) {
|
||||||
|
do_check_true(false);
|
||||||
|
}
|
||||||
|
do_check_eq(typeof libs, "object");
|
||||||
|
do_check_true(libs.length >= 1);
|
||||||
|
do_check_eq(typeof libs[0], "object");
|
||||||
|
do_check_eq(typeof libs[0].name, "string");
|
||||||
|
do_check_eq(typeof libs[0].start, "number");
|
||||||
|
do_check_eq(typeof libs[0].end, "number");
|
||||||
|
do_check_true(libs[0].start <= libs[0].end);
|
||||||
|
callback();
|
||||||
|
});
|
||||||
|
}
|
@ -201,6 +201,8 @@ reason = bug 820380
|
|||||||
[test_profiler_data.js]
|
[test_profiler_data.js]
|
||||||
[test_profiler_events-01.js]
|
[test_profiler_events-01.js]
|
||||||
[test_profiler_events-02.js]
|
[test_profiler_events-02.js]
|
||||||
|
[test_profiler_getfeatures.js]
|
||||||
|
[test_profiler_getsharedlibraryinformation.js]
|
||||||
[test_unsafeDereference.js]
|
[test_unsafeDereference.js]
|
||||||
[test_add_actors.js]
|
[test_add_actors.js]
|
||||||
[test_trace_actor-01.js]
|
[test_trace_actor-01.js]
|
||||||
|
Loading…
Reference in New Issue
Block a user