2
const LOOP_COUNT = 10000;
3
const THREAD_COUNT = 10;
5
const nsIThread = Components.interfaces.nsIThread;
6
const ThreadContractID = "@mozilla.org/thread;1";
7
const Thread = new Components.Constructor(ThreadContractID, "nsIThread", "init");
12
function threadProc() {
14
bar[this.id] = {p : 0};
17
// Uncommenting the line below makes this a lot more likely to deadlock.
20
// Commented this because I was thinking that the printf impl being called
21
// on so many thread might be contributing to some apparent memory
23
// print(" printed from other thread "+this.id+". foo is: "+foo);
24
for(n in this.__parent__) /* print(n) */;
27
function runThreads() {
28
print(" printed from main thread. foo is "+foo);
30
var threads = new Array(THREAD_COUNT);
33
for(i = 0; i < THREAD_COUNT; i++) {
34
var runable = {run : threadProc, id : i};
35
threads[i] = new Thread(runable, 0,
36
nsIThread.PRIORITY_NORMAL,
37
nsIThread.SCOPE_GLOBAL,
38
nsIThread.STATE_JOINABLE);
41
print(" printed from main thread. foo is "+foo);
43
// var main_thread = threads[0].currentThread;
45
for(i = THREAD_COUNT-1; i >= 0; i--) {
46
// main_thread.sleep(1);
50
print(" printed from main thread. foo is "+foo);
53
var total_interval = 0;
55
for(i = 0; i < LOOP_COUNT; i++) {
56
var start_time = new Date().getTime()/1000;
59
bar = new Array(THREAD_COUNT);
60
print("--- loop number "+i);
63
var end_time = new Date().getTime()/1000;
65
var interval = parseInt(100*(end_time - start_time),10)/100;
66
print(" Interval = "+interval+ " seconds.");
69
total_interval += end_time - start_time;
70
var average_interval = parseInt(100*(total_interval / i),10)/100
71
print("Average Interval = "+average_interval+" seconds.");