Your Universal Remote Control Center
RemoteCentral.com
Philips Pronto Professional Forum - View Post
Previous section Next section Up level
Up level
The following page was printed from RemoteCentral.com:

Login:
Pass:
 
 

Topic:
Performance optimizations
This thread has 4 replies. Displaying all posts.
Post 1 made on Saturday September 13, 2008 at 23:42
MVis
Long Time Member
Joined:
Posts:
July 2007
94
Has anyone done much research into tipping points for display performance ? I've just started trying to put more thought into it.

Good practices for performance
------------------------------
Preassign all GUI.widget("NAME") to an array or activity level variable. Searching the widget list every time on complicated pages is probably expensive

If you can test a currentvalue/lastvalue and determine whether a widget or label needs to be updated, it's cheaper than just doing the update.


I'd love to hear others...

For example, I have a 500+ item list which I'm allowing one to scroll through using the scroll ring. The display shows 7 items at a time, a scroll bar, and some data for each item. One of the ways I show the data for a particular item is as an icon. For example, I have 4 different icons per item, so there are 16 permutations.

Originally, I had each of the 4 permutations individually enabled(visible)/disable(.visible=false). Basically, 28 changes in visibility every update. I noticed my scroll speed started to become choppy.

I generated 16 icons for the permutations and used setImage and an index and it's significantly faster. Imagesize is 40x40 with RGBA. One other option would be to actually stack 16 permutations per item and have two visibility operations per item. I would likely need to avoid searching the widget list everytime I wanted to do something.

Another thing that comes to mind - is it cheaper to move a panel on/off the screen versus setting visibility ?

Last edited by MVis on September 14, 2008 08:42.
Post 2 made on Wednesday March 4, 2009 at 00:23
bipolarbear
Long Time Member
Joined:
Posts:
April 2008
36
/bump

Im adding a little eye candy to my remote by having my channel button icons flip over to reveal another channel button on the other side. Im using a series of panels with pre-made images to simulate the rotation. 5 images per flip. I just set them "visible = false" when the page loads. I changed from using widget("name") for each change of visibility to declaring them as a var and addressing each one specifically when I change the visibility.

The first time I run the script it runs slow,.. then it runs perfectly as long as I dont leave the page. Its a lot of images, but the remote shows 95% free memory. 9 slots, 3 possible channels each, 5 images per flip. 9*3*5 = 135 images.

Does anybody have any tips for speeding up the first run.
Post 3 made on Wednesday March 4, 2009 at 14:25
Lyndel McGee
RC Moderator
Joined:
Posts:
August 2001
12,999
Without actually seeing your code, I cannot make a solid recommendation.

However, In the past I was informed by Philips that the GUI.widget() lookup time should not be linear based on number of widgets on the page as I presume they use some sort of hashtable to do lookup.
Lyndel McGee
Philips Pronto Addict/Beta Tester
Post 4 made on Wednesday March 4, 2009 at 16:36
bipolarbear
Long Time Member
Joined:
Posts:
April 2008
36
Ive got a feeling that its related to the script being compiled at execution time, which is how Javascript works. I figured out a work-around that I will test tonight. Ill have a panel cover the entire window showing progress of turning on all the equipment, while having it run through the animation process underneath.

My code is pretty ugly, I was testing if the remote would be capable of running this before dumping too much time into it. Ill use loops and arrays to cut down the amount of code needed. But here it is anyway, from the advanced tab of the page properties. Each "flip sequence" animates the tiles in a different mannor,. also for testing to see what looks better. Full XCF available at [Link: 2rllc.com]

var page = 1;
// declare everything (testing for speed increase over widget lookups)
// button space 1
var but11 = widget("but11");
var b11o1 = widget("11o1");
var b11o2 = widget("11o2");
var b1side = widget("1side");
var b12i1 = widget("12i1");
var b12i2 = widget("12i2");
var but12 = widget("but12");
var b12o1 = widget("12o1");
var b12o2 = widget("12o2");
var b13i1 = widget("13i1");
var b13i2 = widget("13i2");
var but13 = widget("but13");
var b13o1 = widget("13o1");
var b13o2 = widget("13o2");
var b11i1 = widget("11i1");
var b11i2 = widget("11i2");

//button space 2
var but21 = widget("but21");
var b21o1 = widget("21o1");
var b21o2 = widget("21o2");
var b2side = widget("2side");
var b22i1 = widget("22i1");
var b22i2 = widget("22i2");
var but22 = widget("but22");
var b22o1 = widget("22o1");
var b22o2 = widget("22o2");
var b23i1 = widget("23i1");
var b23i2 = widget("23i2");
var but23 = widget("but23");
var b23o1 = widget("23o1");
var b23o2 = widget("23o2");
var b21i1 = widget("21i1");
var b21i2 = widget("21i2");

//button space 3
var but31 = widget("but31");
var b31o1 = widget("31o1");
var b31o2 = widget("31o2");
var b3side = widget("3side");
var b32i1 = widget("32i1");
var b32i2 = widget("32i2");
var but32 = widget("but32");
var b32o1 = widget("32o1");
var b32o2 = widget("32o2");
var b33i1 = widget("33i1");
var b33i2 = widget("33i2");
var but33 = widget("but33");
var b33o1 = widget("33o1");
var b33o2 = widget("33o2");
var b31i1 = widget("31i1");
var b31i2 = widget("31i2");

//button space 4
var but41 = widget("but41");
var b41o1 = widget("41o1");
var b41o2 = widget("41o2");
var b4side = widget("4side");
var b42i1 = widget("42i1");
var b42i2 = widget("42i2");
var but42 = widget("but42");
var b42o1 = widget("42o1");
var b42o2 = widget("42o2");
var b43i1 = widget("43i1");
var b43i2 = widget("43i2");
var but43 = widget("but43");
var b43o1 = widget("43o1");
var b43o2 = widget("43o2");
var b41i1 = widget("41i1");
var b41i2 = widget("41i2");

// button space 5
var but51 = widget("but51");
var b51o1 = widget("51o1");
var b51o2 = widget("51o2");
var b5side = widget("5side");
var b52i1 = widget("52i1");
var b52i2 = widget("52i2");
var but52 = widget("but52");
var b52o1 = widget("52o1");
var b52o2 = widget("52o2");
var b53i1 = widget("53i1");
var b53i2 = widget("53i2");
var but53 = widget("but53");
var b53o1 = widget("53o1");
var b53o2 = widget("53o2");
var b51i1 = widget("51i1");
var b51i2 = widget("51i2");

//button space 6
var but61 = widget("but61");
var b61o1 = widget("61o1");
var b61o2 = widget("61o2");
var b6side = widget("6side");
var b62i1 = widget("62i1");
var b62i2 = widget("62i2");
var but62 = widget("but62");
var b62o1 = widget("62o1");
var b62o2 = widget("62o2");
var b63i1 = widget("63i1");
var b63i2 = widget("63i2");
var but63 = widget("but63");
var b63o1 = widget("63o1");
var b63o2 = widget("63o2");
var b61i1 = widget("61i1");
var b61i2 = widget("61i2");

// button space 7
var but71 = widget("but71");
var b71o1 = widget("71o1");
var b71o2 = widget("71o2");
var b7side = widget("7side");
var b72i1 = widget("72i1");
var b72i2 = widget("72i2");
var but72 = widget("but72");
var b72o1 = widget("72o1");
var b72o2 = widget("72o2");
var b73i1 = widget("73i1");
var b73i2 = widget("73i2");
var but73 = widget("but73");
var b73o1 = widget("73o1");
var b73o2 = widget("73o2");
var b71i1 = widget("71i1");
var b71i2 = widget("71i2");


// button space 8
var but81 = widget("but81");
var b81o1 = widget("81o1");
var b81o2 = widget("81o2");
var b8side = widget("8side");
var b82i1 = widget("82i1");
var b82i2 = widget("82i2");
var but82 = widget("but82");
var b82o1 = widget("82o1");
var b82o2 = widget("82o2");
var b83i1 = widget("83i1");
var b83i2 = widget("83i2");
var but83 = widget("but83");
var b83o1 = widget("83o1");
var b83o2 = widget("83o2");
var b81i1 = widget("81i1");
var b81i2 = widget("81i2");

// button space 9
var but91 = widget("but91");
var b91o1 = widget("91o1");
var b91o2 = widget("91o2");
var b9side = widget("9side");
var b92i1 = widget("92i1");
var b92i2 = widget("92i2");
var but92 = widget("but92");
var b92o1 = widget("92o1");
var b92o2 = widget("92o2");
var b93i1 = widget("93i1");
var b93i2 = widget("93i2");
var but93 = widget("but93");
var b93o1 = widget("93o1");
var b93o2 = widget("93o2");
var b91i1 = widget("91i1");
var b91i2 = widget("91i2");

// Hide everything
// button space 1
b11o1.visible = false;
b11o2.visible = false;
b1side.visible = false;
b12i1.visible = false;
b12i2.visible = false;
but12.visible = false;
b12o1.visible = false;
b12o2.visible = false;
b13i1.visible = false;
b13i2.visible = false;
but13.visible = false;
b13o1.visible = false;
b13o2.visible = false;
b11i1.visible = false;
b11i2.visible = false;

//button space 2
b21o1.visible = false;
b21o2.visible = false;
b2side.visible = false;
b22i1.visible = false;
b22i2.visible = false;
but22.visible = false;
b22o1.visible = false;
b22o2.visible = false;
b23i1.visible = false;
b23i2.visible = false;
but23.visible = false;
b23o1.visible = false;
b23o2.visible = false;
b21i1.visible = false;
b21i2.visible = false;

//button space 3
b31o1.visible = false;
b31o2.visible = false;
b3side.visible = false;
b32i1.visible = false;
b32i2.visible = false;
but32.visible = false;
b32o1.visible = false;
b32o2.visible = false;
b33i1.visible = false;
b33i2.visible = false;
but33.visible = false;
b33o1.visible = false;
b33o2.visible = false;
b31i1.visible = false;
b31i2.visible = false;

//button space 4
b41o1.visible = false;
b41o2.visible = false;
b4side.visible = false;
b42i1.visible = false;
b42i2.visible = false;
but42.visible = false;
b42o1.visible = false;
b42o2.visible = false;
b43i1.visible = false;
b43i2.visible = false;
but43.visible = false;
b43o1.visible = false;
b43o2.visible = false;
b41i1.visible = false;
b41i2.visible = false;

// button space 5
b51o1.visible = false;
b51o2.visible = false;
b5side.visible = false;
b52i1.visible = false;
b52i2.visible = false;
but52.visible = false;
b52o1.visible = false;
b52o2.visible = false;
b53i1.visible = false;
b53i2.visible = false;
but53.visible = false;
b53o1.visible = false;
b53o2.visible = false;
b51i1.visible = false;
b51i2.visible = false;

//button space 6
b61o1.visible = false;
b61o2.visible = false;
b6side.visible = false;
b62i1.visible = false;
b62i2.visible = false;
but62.visible = false;
b62o1.visible = false;
b62o2.visible = false;
b63i1.visible = false;
b63i2.visible = false;
but63.visible = false;
b63o1.visible = false;
b63o2.visible = false;
b61i1.visible = false;
b61i2.visible = false;

// button space 7
b71o1.visible = false;
b71o2.visible = false;
b7side.visible = false;
b72i1.visible = false;
b72i2.visible = false;
but72.visible = false;
b72o1.visible = false;
b72o2.visible = false;
b73i1.visible = false;
b73i2.visible = false;
but73.visible = false;
b73o1.visible = false;
b73o2.visible = false;
b71i1.visible = false;
b71i2.visible = false;

// button space 8
b81o1.visible = false;
b81o2.visible = false;
b8side.visible = false;
b82i1.visible = false;
b82i2.visible = false;
but82.visible = false;
b82o1.visible = false;
b82o2.visible = false;
b83i1.visible = false;
b83i2.visible = false;
but83.visible = false;
b83o1.visible = false;
b83o2.visible = false;
b81i1.visible = false;
b81i2.visible = false;

// button space 9
b91o1.visible = false;
b91o2.visible = false;
b9side.visible = false;
b92i1.visible = false;
b92i2.visible = false;
but92.visible = false;
b92o1.visible = false;
b92o2.visible = false;
b93i1.visible = false;
b93i2.visible = false;
but93.visible = false;
b93o1.visible = false;
b93o2.visible = false;
b91i1.visible = false;
b91i2.visible = false;


function flipup(){
switch(page){
case 1:
b11o1.visible = true;
but11.visible = false;
GUI.updateScreen();

b11o2.visible = true;
b11o1.visible = false;
b21o1.visible = true;
but21.visible = false;
b41o1.visible = true;
but41.visible = false;
b51o1.visible = true;
but51.visible = false;
GUI.updateScreen();


b1side.visible = true;
b11o2.visible = false;
b21o2.visible = true;
b21o1.visible = false;
b41o2.visible = true;
b41o1.visible = false;
b51o2.visible = true;
b51o1.visible = false;
b31o1.visible = true;
but31.visible = false;
b61o1.visible = true;
but61.visible = false;
b71o1.visible = true;
but71.visible = false;
b81o1.visible = true;
but81.visible = false;
b91o1.visible = true;
but91.visible = false;
GUI.updateScreen();

b12i1.visible = true;
b1side.visible = false;
b2side.visible = true;
b21o2.visible = false;
b4side.visible = true;
b41o2.visible = false;
b5side.visible = true;
b51o2.visible = false;
b31o2.visible = true;
b31o1.visible = false;
b61o2.visible = true;
b61o1.visible = false;
b71o2.visible = true;
b71o1.visible = false;
b81o2.visible = true;
b81o1.visible = false;
b91o2.visible = true;
b91o1.visible = false;
GUI.updateScreen();


b12i2.visible = true;
b12i1.visible = false;
b22i1.visible = true;
b2side.visible = false;
b42i1.visible = true;
b4side.visible = false;
b52i1.visible = true;
b5side.visible = false;
b3side.visible = true;
b31o2.visible = false;
b6side.visible = true;
b61o2.visible = false;
b7side.visible = true;
b71o2.visible = false;
b8side.visible = true;
b81o2.visible = false;
b9side.visible = true;
b91o2.visible = false;
GUI.updateScreen();

but12.visible = true;
b12i2.visible = false;
b22i2.visible = true;
b22i1.visible = false;
b42i2.visible = true;
b42i1.visible = false;
b52i2.visible = true;
b52i1.visible = false;
b32i1.visible = true;
b3side.visible = false;
b62i1.visible = true;
b6side.visible = false;
b72i1.visible = true;
b7side.visible = false;
b82i1.visible = true;
b8side.visible = false;
b92i1.visible = true;
b9side.visible = false;
GUI.updateScreen();


but22.visible = true;
b22i2.visible = false;
b32i2.visible = true;
b32i1.visible = false;
but42.visible = true;
b42i2.visible = false;
but52.visible = true;
b52i2.visible = false;
b62i2.visible = true;
b62i1.visible = false;
b72i2.visible = true;
b72i1.visible = false;
b82i2.visible = true;
b82i1.visible = false;
b92i2.visible = true;
b92i1.visible = false;
GUI.updateScreen();



but32.visible = true;
b32i2.visible = false;
but62.visible = true;
b62i2.visible = false;
but72.visible = true;
b72i2.visible = false;
but82.visible = true;
b82i2.visible = false;
but92.visible = true;
b92i2.visible = false;
GUI.updateScreen();
page = 2;
break;

case 2:
b12o1.visible = true;
but12.visible = false;
GUI.updateScreen();

b12o2.visible = true;
b12o1.visible = false;
b22o1.visible = true;
but22.visible = false;
b42o1.visible = true;
but42.visible = false;
GUI.updateScreen();

b1side.visible = true;
b12o2.visible = false;
b22o2.visible = true;
b22o1.visible = false;
b42o2.visible = true;
b42o1.visible = false;
b32o1.visible = true;
but32.visible = false;
b52o1.visible = true;
but52.visible = false;
b72o1.visible = true;
but72.visible = false;
GUI.updateScreen();

b13i1.visible = true;
b1side.visible = false;
b2side.visible = true;
b22o2.visible = false;
b4side.visible = true;
b42o2.visible = false;
b32o2.visible = true;
b32o1.visible = false;
b52o2.visible = true;
b52o1.visible = false;
b72o2.visible = true;
b72o1.visible = false;
b62o1.visible = true;
but62.visible = false;
b82o1.visible = true;
but82.visible = false;
GUI.updateScreen();

b13i2.visible = true;
b13i1.visible = false;
b23i1.visible = true;
b2side.visible = false;
b43i1.visible = true;
b4side.visible = false;
b3side.visible = true;
b32o2.visible = false;
b5side.visible = true;
b52o2.visible = false;
b7side.visible = true;
b72o2.visible = false;
b62o2.visible = true;
b62o1.visible = false;
b82o2.visible = true;
b82o1.visible = false;
b92o1.visible = true;
but92.visible = false;
GUI.updateScreen();

but13.visible = true;
b13i2.visible = false;
b23i2.visible = true;
b23i1.visible = false;
b43i2.visible = true;
b43i1.visible = false;
b33i1.visible = true;
b3side.visible = false;
b53i1.visible = true;
b5side.visible = false;
b73i1.visible = true;
b7side.visible = false;
b6side.visible = true;
b62o2.visible = false;
b8side.visible = true;
b82o2.visible = false;
b92o2.visible = true;
b92o1.visible = false;
GUI.updateScreen();

but23.visible = true;
b23i2.visible = false;
but43.visible = true;
b43i2.visible = false;
b33i2.visible = true;
b33i1.visible = false;
b53i2.visible = true;
b53i1.visible = false;
b73i2.visible = true;
b73i1.visible = false;
b63i1.visible = true;
b6side.visible = false;
b83i1.visible = true;
b8side.visible = false;
b9side.visible = true;
b92o2.visible = false;
GUI.updateScreen();

but33.visible = true;
b33i2.visible = false;
but53.visible = true;
b53i2.visible = false;
but73.visible = true;
b73i2.visible = false;
b63i2.visible = true;
b63i1.visible = false;
b83i2.visible = true;
b83i1.visible = false;
b93i1.visible = true;
b9side.visible = false;
GUI.updateScreen();

but63.visible = true;
b63i2.visible = false;
but83.visible = true;
b83i2.visible = false;
b93i2.visible = true;
b93i1.visible = false;
GUI.updateScreen();

but93.visible = true;
b93i2.visible = false;
GUI.updateScreen();

page = 3;
break;

case 3:
b13o1.visible = true;
but13.visible = false;
b23o1.visible = true;
but23.visible = false;
b33o1.visible = true;
but33.visible = false;
b43o1.visible = true;
but43.visible = false;
b53o1.visible = true;
but53.visible = false;
b63o1.visible = true;
but63.visible = false;
b73o1.visible = true;
but73.visible = false;
b83o1.visible = true;
but83.visible = false;
b93o1.visible = true;
but93.visible = false;
GUI.updateScreen();

b13o2.visible = true;
b13o1.visible = false;
b23o2.visible = true;
b23o1.visible = false;
b33o2.visible = true;
b33o1.visible = false;
b43o2.visible = true;
b43o1.visible = false;
b53o2.visible = true;
b53o1.visible = false;
b63o2.visible = true;
b63o1.visible = false;
b73o2.visible = true;
b73o1.visible = false;
b83o2.visible = true;
b83o1.visible = false;
b93o2.visible = true;
b93o1.visible = false;
GUI.updateScreen();

b1side.visible = true;
b13o2.visible = false;
b2side.visible = true;
b23o2.visible = false;
b3side.visible = true;
b33o2.visible = false;
b4side.visible = true;
b43o2.visible = false;
b5side.visible = true;
b53o2.visible = false;
b6side.visible = true;
b63o2.visible = false;
b7side.visible = true;
b73o2.visible = false;
b8side.visible = true;
b83o2.visible = false;
b9side.visible = true;
b93o2.visible = false;
GUI.updateScreen();

b11i1.visible = true;
b1side.visible = false;
b21i1.visible = true;
b2side.visible = false;
b31i1.visible = true;
b3side.visible = false;
b41i1.visible = true;
b4side.visible = false;
b51i1.visible = true;
b5side.visible = false;
b61i1.visible = true;
b6side.visible = false;
b71i1.visible = true;
b7side.visible = false;
b81i1.visible = true;
b8side.visible = false;
b91i1.visible = true;
b9side.visible = false;
GUI.updateScreen();

b11i2.visible = true;
b11i1.visible = false;
b21i2.visible = true;
b21i1.visible = false;
b31i2.visible = true;
b31i1.visible = false;
b41i2.visible = true;
b41i1.visible = false;
b51i2.visible = true;
b51i1.visible = false;
b61i2.visible = true;
b61i1.visible = false;
b71i2.visible = true;
b71i1.visible = false;
b81i2.visible = true;
b81i1.visible = false;
b91i2.visible = true;
b91i1.visible = false;
GUI.updateScreen();

but11.visible = true;
b11i2.visible = false;
but21.visible = true;
b21i2.visible = false;
but31.visible = true;
b31i2.visible = false;
but41.visible = true;
b41i2.visible = false;
but51.visible = true;
b51i2.visible = false;
but61.visible = true;
b61i2.visible = false;
but71.visible = true;
b71i2.visible = false;
but81.visible = true;
b81i2.visible = false;
but91.visible = true;
b91i2.visible = false;
GUI.updateScreen();

page = 1;
break;
}


}
Post 5 made on Thursday March 5, 2009 at 11:10
Lyndel McGee
RC Moderator
Joined:
Posts:
August 2001
12,999
EscientPronto takes 3.5 seconds to start up as it is 300K+ of source code. You are correct that it is likely compilation time.

this code will save you some time and cut down on size of script.
note that this[varname] declares a field in the object where script(function) is located (Page or Activity).

function d(varname,tag,v)
{
var w = GUI.widget(tag);
if (w) w.visible=(v!==0);
this[varname]=w;
}
d("but11", "but11", 1);
d("b11o1","11o1",0);
etc...

Note that you could also define a panel that contained string with multiple lines

butt11|butt11|1
b11o1|11o1|0

Then, immediately following compilation, write a function to split() the string as needed and then loop through the values calling function d() above. This way, you minimize compilation time but may still incur overhead parsing the string the first time through.
Lyndel McGee
Philips Pronto Addict/Beta Tester


Jump to


Protected Feature Before you can reply to a message...
You must first register for a Remote Central user account - it's fast and free! Or, if you already have an account, please login now.

Please read the following: Unsolicited commercial advertisements are absolutely not permitted on this forum. Other private buy & sell messages should be posted to our Marketplace. For information on how to advertise your service or product click here. Remote Central reserves the right to remove or modify any post that is deemed inappropriate.

Hosting Services by ipHouse