• All submissions to this site are governed by Second Life Project Contribution Agreement. By submitting patches and other information using this site, you acknowledge that you have read, understood, and agreed to those terms.
Issue Details (XML | Word | Printable)

Key: SVC-3895
Type: Bug Bug
Status: Open Open
Priority: Showstopper Showstopper
Assignee: Babbage Linden
Reporter: Eata Kitty
Votes: 710
Watchers: 158
Operations

If you were logged in you would be able to see more operations.
2. Second Life Service - SVC

Rezzing Mono scripted object cripples sim FPS

Created: 24/Feb/09 10:49 AM   Updated: 05/Nov/09 04:10 AM
Return to search
Component/s: Scripts
Affects Version/s: 1.25 Server, 1.26 Server, 1.27 Server, 1.30 Server
Fix Version/s: None

File Attachments: None
Image Attachments:

1. Snapshot_046.png
(2.36 MB)

2. Snapshot_047.png
(2.34 MB)

3. Snapshot_049.png
(2.32 MB)
Issue Links:
Duplicate
 
Parent/Child
 
Relates

Last Triaged: 24/Feb/09 12:59 PM
Linden Lab Issue ID: DEV-27936


 Description  « Hide
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example can bring simulators to their knees.

----------------

Reproduction:

Rezzer

integer switch;
integer count;
default
{
    touch_start(integer total_number)
    {
        if(switch=!switch)
        {
            llSetTimerEvent(0.1);
        }
        else
        {
            llSetTimerEvent(0);
            llSetText("",<1,1,1>,1);
            count=0;
        }
    }
    timer()
    {
        llRezObject("Object",llGetPos() + <0,0,1>,ZERO_VECTOR,ZERO_ROTATION,1);
        llSetText("Rezzed Objects : "+(string)(++count),<1,1,1>,1);
    }
}

Child Object

default
{
    on_rez(integer foo)
    {
        if(foo)
            llSetTimerEvent(0.5);
    }

    timer()
    {
        llDie();
    }
}

Change the rezzed object between Mono/LSL to observe effect.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less difference.



 All   Comments   Change History      Sort Order: Ascending order - Click to sort in descending order
Eata Kitty made changes - 24/Feb/09 10:52 AM
Field Original Value New Value
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 10:52 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 10:53 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 10:54 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetTimerEvent(0.2);
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 10:59 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string bullet = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            bullet = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            bullet = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        vector shotVel = llRot2Fwd(llGetRot());
        vector shotPos = llGetPos() + (rezOffset * llGetRot());
        llRezObject(bullet, shotPos, shotVel * 100, llGetRot(), 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, shotPos, ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 11:02 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, shotPos, ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 11:03 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(2);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(1);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 11:05 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code:title=Bar.java|borderStyle=solid}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code:title=Bar.java|borderStyle=solid}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(1);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(1);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Eata Kitty made changes - 24/Feb/09 11:06 AM
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(1);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.

Results of the rezzer will
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(1);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.
Eata Kitty made changes - 24/Feb/09 12:13 PM
Summary Rezzing Mono scripted object heavily reduces sim FPS Rezzing Mono scripted object cripples sim FPS
Description Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty in simulators with medium-heavy load. Lightly loaded sims notice little effect. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example removes around 5-10 simulator FPS in a medium loaded simulator:

----------------

Reproduction:

1) Create a standard cube
2) Add this script to the cube:

{code}
vector rezOffset = <1.0,0.0,0.0>;

integer mono = FALSE;
string object = "";

default
{
    state_entry()
    {
        llSetText("-", <0,1,0>, 1.0);
    }
    
    touch_start(integer n)
    {
        llSetTimerEvent(0);
        if (mono)
        {
            mono = FALSE;
            object = "TEST_LSL";
            llSetText("LSL", <0,1,0>, 1.0);
        }
        else
        {
            mono = TRUE;
            object = "TEST_MONO";
            llSetText("MONO", <0,0,1>, 1.0);
        }
        llSetTimerEvent(0.2);
    }

    timer()
    {
        llRezObject(object, llGetPos() + (rezOffset * llGetRot()), ZERO_VECTOR, ZERO_ROTATION, 1);
    }
}
{code}

3) Create an object named "TEST_MONO" out of three or four prims, size and shape is not important. Set the object to be Phantom.
4) Add default scripts to each prim of the object "TEST_MONO". Make the script in the root prim the following:

{code}
default
{
    on_rez(integer start_param)
    {
        if (start_param)
            llSetTimerEvent(1);
    }

    timer()
    {
        llDie();
    }
}
{code}

5) Duplicate object, name one of them "TEST_LSL". Use "Recompile scripts in selection" to make each one fully LSL or Mono as appropriate.
6) Add both test objects to the cube created in step one.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less visible difference.
Tested on Second Life Server 1.25.5.109327

----------------

Rezzing Mono scripted objects results in a heavy performance penalty. Identical objects compiled into LSL do not cause similar perfomance penalty.

This also leads me to believe that attaching objects with many Mono scripts results in a larger performance penalty to the simulator than LSL.

The following example can bring simulators to their knees.

----------------

Reproduction:

Rezzer

{code}
integer switch;
integer count;
default
{
    touch_start(integer total_number)
    {
        if(switch=!switch)
        {
            llSetTimerEvent(0.1);
        }
        else
        {
            llSetTimerEvent(0);
            llSetText("",<1,1,1>,1);
            count=0;
        }
    }
    timer()
    {
        llRezObject("Object",llGetPos() + <0,0,1>,ZERO_VECTOR,ZERO_ROTATION,1);
        llSetText("Rezzed Objects : "+(string)(++count),<1,1,1>,1);
    }
}
{code}

Child Object

{code}
default
{
    on_rez(integer foo)
    {
        if(foo)
            llSetTimerEvent(0.5);
    }

    timer()
    {
        llDie();
    }
}

{code}

Change the rezzed object between Mono/LSL to observe effect.

Monitor the results with the sim FPS shown via the Control Shift 1. Results will vary depending on simulator, lightly loaded sims will show less difference.
Priority Major [ 3 ] Showstopper [ 1 ]
Knife Carver made changes - 24/Feb/09 12:27 PM
Priority Showstopper [ 1 ] Critical [ 2 ]
Knife Carver made changes - 24/Feb/09 12:33 PM
Priority Critical [ 2 ] Showstopper [ 1 ]
lindenrobot made changes - 24/Feb/09 12:59 PM
Last Triaged 24/Feb/09 12:59 PM
Linden Lab Issue ID DEV-27936
Eata Kitty made changes - 24/Feb/09 03:43 PM
Comment [ How can you see where you are going with your head that far up your own ass? ]
Zwagoth Klaar made changes - 25/Feb/09 07:38 AM
Priority Showstopper [ 1 ] Critical [ 2 ]
Harleen Gretzky made changes - 02/Jun/09 07:38 AM
Link This issue is original of duplicate SVC-4327 [ SVC-4327 ]
BlckCobra Shikami made changes - 03/Jun/09 12:16 AM
Link This issue Relates to SVC-4196 [ SVC-4196 ]
Ardy Lay made changes - 12/Jun/09 09:28 PM
Affects Version/s 1.26 Server [ 10420 ]
Foxxy Henhouse made changes - 16/Jun/09 11:28 AM
Priority Critical [ 2 ] Showstopper [ 1 ]
Ardy Lay made changes - 12/Jul/09 09:56 PM
Link This issue is related to by MISC-3001 [ MISC-3001 ]
Ardy Lay made changes - 17/Jul/09 02:41 PM
Affects Version/s 1.27 Server [ 10460 ]
Affects Version/s 1.25 Server [ 10380 ]
Affects Version/s 1.26 Server [ 10420 ]
Ardy Lay made changes - 17/Jul/09 02:44 PM
Affects Version/s 1.26 Server [ 10420 ]
Affects Version/s 1.25 Server [ 10380 ]
Affects Version/s 1.27 Server [ 10460 ]
Ardy Lay made changes - 25/Jul/09 08:37 AM
Affects Version/s 1.27 Server [ 10460 ]
Soft Linden made changes - 27/Jul/09 12:09 PM
Link This issue is original of duplicate SEC-405 [ SEC-405 ]
Alexa Linden made changes - 27/Jul/09 01:15 PM
Link This issue is related to by SVC-4629 [ SVC-4629 ]
Escort DeFarge made changes - 23/Aug/09 12:12 PM
Comment [ Isn't this related to the same underlying effect that I reported when mono first came out? i.e. - SVC-2967 "Resolved - Won't Finish". I'm close to declaring myself entirely uninterested in anything now as nothing ever gets priority fixed apart from stupid easter eggs and frankly nobody who can do anything about anything really gives a.... ***** any more. ]
Henri DeCuir made changes - 23/Aug/09 02:23 PM
Link This issue parent of SVC-4739 [ SVC-4739 ]
Escort DeFarge made changes - 24/Aug/09 02:36 PM
Link This issue Relates to SVC-2967 [ SVC-2967 ]
Dil Spitz made changes - 27/Aug/09 03:27 PM
Link This issue is related to by SVC-472 [ SVC-472 ]
Argent Stonecutter made changes - 29/Aug/09 07:07 AM
Link This issue is related to by SVC-4616 [ SVC-4616 ]
Yoz Linden made changes - 11/Sep/09 03:55 PM
Assignee WorkingOnIt Linden [ WorkingOnIt Linden ]
Balpien Hammerer made changes - 29/Sep/09 11:00 AM
Attachment Snapshot_046.png [ 29677 ]
Attachment Snapshot_047.png [ 29678 ]
Attachment Snapshot_049.png [ 29679 ]
Ardy Lay made changes - 07/Oct/09 04:07 AM
Affects Version/s 1.30 Server [ 10510 ]
Babbage Linden made changes - 19/Oct/09 06:59 AM
Assignee WorkingOnIt Linden [ WorkingOnIt Linden ] Babbage Linden [ Babbage Linden ]
Ardy Lay made changes - 25/Oct/09 05:20 AM
Link This issue Relates to SVC-206 [ SVC-206 ]