Thanks for the review! Yes, I am familiar with those "principles of
optimization" - yet it seemed to just feel wrong to leave it alone... :P

As to the variables that are initialized with high numbers, there has to be
a better way: if these were standard for-loops, I would just initialize
the first value with the first item in the list, and then start the loop at
the second value, if any.  However, these are a iterator style I am not yet
familiar enough with to bend that far.  Any suggestions?

Ricky
Cron Stardust

On Fri, Mar 11, 2011 at 3:53 AM, Boroondas Gupte <slli...@boroon.dasgupta.ch
> wrote:

>    This is an automatically generated e-mail. To reply, visit:
> http://codereview.secondlife.com/r/199/
>
> Good idea.
>
> Off course, the two main rules of optimization are:
> 1. Don't optimize.
> 2. Don't optimize yet (experts only).
>
> Though, comparing squared distances instead of actual distances can probably 
> be considered standard practice and both the proposed change as well as the 
> resulting code are still easy to understand. Also, you already measured the 
> operations in isolation and it's unlikely we'll have hardware that calculates 
> square roots faster than it multiplies in the foreseeable future, so this is 
> different than, say, bit-shifting with addition to replace integer 
> multiplication. Still, it'd be nice to have some measurements of how this 
> affects in-viewer performance.
>
> Some comments about the actual code:
>
>
>    
> indra/newview/llnetmap.cpp<http://codereview.secondlife.com/r/199/diff/1/?file=1187#file1187line337>
>  (Diff
> revision 1)
>
> void LLNetMap::draw()
>
>   337
>
>               F32 closest_dist = F32_MAX;
>
> 337
>
>               F32 closest_dist_squared = F32_MAX;
>
>   Maybe add a short comment here, that this value is meant to be overwritten 
> in the loop below it.
>
>
>    
> indra/newview/llpanelpeople.cpp<http://codereview.secondlife.com/r/199/diff/1/?file=1188#file1188line161>
>  (Diff
> revision 1)
>
> public:
>
>   161
>
>               F32 dist1 = dist_vec(item1_pos, me_pos);
>
>  161
>
>               F32 dist1 = dist_vec_squared(item1_pos, me_pos);
>
>   162
>
>               F32 dist2 = dist_vec(item2_pos, me_pos);
>
>  162
>
>               F32 dist2 = dist_vec_squared(item2_pos, me_pos);
>
>   For clarity, please rename these variables to dist1_squared and 
> dist2_squared, too. Or eliminate them by calling dist_vec_squared right in 
> the return statement:
>               return dist_vec_squared(item1_pos, me_pos) < 
> dist_vec_squared(item2_pos, me_pos);
>
> (A bit long, but still shorter than the lines right above it.)
>
>
>    
> indra/newview/llselectmgr.cpp<http://codereview.secondlife.com/r/199/diff/1/?file=1189#file1189line6573>
>  (Diff
> revision 1)
>
> bool LLSelectMgr::selectionMove(const LLVector3& displ,
>
>   6573
>
>               F32 min_dist = 1e+30f;
>
> 6573
>
>               F32 min_dist = 1e+30f;
>
>   This should probably start at 1e60f, now. Though ... if there is no 
> specific reason for the previous 1e30f value, just make it F32_MAX, I guess. 
> Might also be worth a comment, that it will be overwritten in the loop below.
>
>
>    
> indra/newview/llselectmgr.cpp<http://codereview.secondlife.com/r/199/diff/1/?file=1189#file1189line6574>
>  (Diff
> revision 1)
>
> bool LLSelectMgr::selectionMove(const LLVector3& displ,
>
>   6574
>
>               LLVector3 obj_pos;
>
> 6574
>
>               LLVector3 obj_pos;
>
>   6575
>
>               for (LLObjectSelection::root_iterator it = 
> getSelection()->root_begin();
>
>  6575
>
>               for (LLObjectSelection::root_iterator it = 
> getSelection()->root_begin();
>
>   6576
>
>                        it != getSelection()->root_end(); ++it)
>
>  6576
>
>                        it != getSelection()->root_end(); ++it)
>
>   6577
>
>               {
>
> 6577
>
>               {
>
>  6578
>
>                       obj_pos = (*it)->getObject()->getPositionEdit();
>
>  6578
>
>                       obj_pos = (*it)->getObject()->getPositionEdit();
>
>   6579
>
>                        6579
>
>                          6580
>
>                       F32 obj_dist = dist_vec(obj_pos, 
> LLViewerCamera::getInstance()->getOrigin());
>
>  6580
>
>                       F32 obj_dist_squared = dist_vec_squared(obj_pos, 
> LLViewerCamera::getInstance()->getOrigin());
>
>   6581
>
>                       if (obj_dist < min_dist)
>
> 6581
>
>                       if (obj_dist_squared < min_dist)
>
>    6582
>
>                       {
>
> 6582
>
>                       {
>
>   6583
>
>                               min_dist = obj_dist;
>
> 6583
>
>                               min_dist = obj_dist_squared;
>
>   6584
>
>                       }
>
> 6584
>
>                       }
>
>  6585
>
>               }
>
> 6585
>
>               }
>
>    6586
>
>               // since the above uses squared values, take the square root.
>
>   6587
>
>               min_dist = sqrt(min_dist);
>
>   Memory reuse is good, I guess, but having variable names that only describe 
> the variable's content correctly part of the time bothers me.
>
>
>    
> indra/newview/llselectmgr.cpp<http://codereview.secondlife.com/r/199/diff/1/?file=1189#file1189line6589>
>  (Diff
> revision 1)
>
> bool LLSelectMgr::selectionMove(const LLVector3& displ,
>
>   6587
>
>               // factor the distance inside the displacement vector. This 
> will get us
>
> 6589
>
>               // factor the distance inside the displacement vector. This 
> will get us
>
>  6588
>
>               // equally visible movements for both close and far away 
> selections.
>
> 6590
>
>               // equally visible movements for both close and far away 
> selections.
>
>  6589
>
>               min_dist = sqrt(min_dist) / 2;
>
>  6591
>
>               min_dist = sqrt(min_dist) / 2;
>
>   6590
>
>               displ_global.setVec(displ.mV[0]*min_dist,
>
>  6592
>
>               displ_global.setVec(displ.mV[0]*min_dist,
>
>    6591
>
>                                                       displ.mV[1]*min_dist,
>
>  6593
>
>                                                       displ.mV[1]*min_dist,
>
>   6592
>
>                                                       displ.mV[2]*min_dist);
>
>  6594
>
>                                                       displ.mV[2]*min_dist);
>
>   Off course, this variable already changed meaning during execution before 
> your change, so ... meh.
>
>
> - Boroondas
>
> On March 11th, 2011, 12:06 a.m., Cron Stardust wrote:
>   Review request for Viewer.
> By Cron Stardust.
>
> *Updated March 11, 2011, 12:06 a.m.*
> Description
>
> I looking at the code, trying to find out where/how to add a new feature, 
> when I tripped across one of these and it lit my mental warning bells off.  
> Vector distance comparisons should, IMHO, always be done squared.  So I did 
> some greppin, manual analysis, and some careful modification, and here's the 
> result.
>
>   Testing
>
> Compiled a test viewer and used it, undertaking some of my normal activities. 
>  Results felt good, but are currently anecdotal.  Any suggestions on how to 
> properly measure this (or even some actual measurement from those already 
> instrumented to measure these things,) would be great!
>
>   *Bugs: * 
> https://jira.secondlife.com/browse/VWR-25126<http://jira.secondlife.com/browse/https://jira.secondlife.com/browse/VWR-25126>
> Diffs
>
>    - doc/contributions.txt (344d4c6d7d7e)
>    - indra/llcharacter/llbvhloader.cpp (344d4c6d7d7e)
>    - indra/llmath/tests/llbbox_test.cpp (344d4c6d7d7e)
>    - indra/newview/llagent.cpp (344d4c6d7d7e)
>    - indra/newview/llfloaterchat.cpp (344d4c6d7d7e)
>    - indra/newview/llhudeffectlookat.cpp (344d4c6d7d7e)
>    - indra/newview/llhudeffectpointat.cpp (344d4c6d7d7e)
>    - indra/newview/llmaniprotate.cpp (344d4c6d7d7e)
>    - indra/newview/llmanipscale.cpp (344d4c6d7d7e)
>    - indra/newview/llnetmap.cpp (344d4c6d7d7e)
>    - indra/newview/llpanelpeople.cpp (344d4c6d7d7e)
>    - indra/newview/llselectmgr.cpp (344d4c6d7d7e)
>    - indra/newview/llspeakers.cpp (344d4c6d7d7e)
>    - indra/newview/llviewerchat.cpp (344d4c6d7d7e)
>    - indra/newview/llvoicevivox.cpp (344d4c6d7d7e)
>    - indra/newview/llworld.cpp (344d4c6d7d7e)
>
> View Diff <http://codereview.secondlife.com/r/199/diff/>
>
_______________________________________________
Policies and (un)subscribe information available here:
http://wiki.secondlife.com/wiki/OpenSource-Dev
Please read the policies before posting to keep unmoderated posting privileges

Reply via email to