Re: [opensource-dev] New HTTP Library & Project Viewer

2012-07-29 Thread Henri Beauchamp
On Sun, 29 Jul 2012 05:23:15 +0200, Carlo Wood wrote:

> On Fri, 27 Jul 2012 16:59:18 -0400
> holydoughnuts  wrote:
> 
> The implementation that I wrote for Singularity (not yet in the
> the official release) is more on the side of "blazing fast" :p.
> The bottleneck is entirely server-side, but I've seen download
> speeds of 1 MB/s non-stop till all textures were there.

With just a few tweakings to the texture fetcher (and in particular
a setting that permits up to 32 concurrent HTTP fetches), I get much
more than 1MB/s in the Cool VL Viewer... In fact, I'm more in the
10MB/s+ range while rezzing in heavily textured areas and the rezzing
time is pretty low... This has been so for many months (well over
a year actually) already.

Henri.
___
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


Re: [opensource-dev] Review Request: STORM-1899: Avatar hand poses randomly get stuck in spread position

2012-07-29 Thread Lance Corrimal


> On July 28, 2012, 2:15 a.m., Lance Corrimal wrote:
> > I think the warning message should either go, or be modified to warn only 
> > once, or be changed to lldebug... the way it is now it floods the 
> > logfiles... i have 1900 repeats of that warning line in my log file, after 
> > being logged in for less than 5 minutes!

on second thought, this flooding might be because I screwed up my test build...

... yep, that was it.


- Lance


---
This is an automatically generated e-mail. To reply, visit:
http://codereview.secondlife.com/r/592/#review1241
---


On July 25, 2012, 3:12 p.m., Ansariel Hiller wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> http://codereview.secondlife.com/r/592/
> ---
> 
> (Updated July 25, 2012, 3:12 p.m.)
> 
> 
> Review request for Viewer.
> 
> 
> Description
> ---
> 
> A proposed solution for STORM-1899 and the issue, where the handpose of 
> avatars randomly get stuck in the spread hand position.
> 
> In the current implementation, this case might happen under the following 
> circumstances:
> * Avatar uses an animation with hand pose A
> * A request is issued to change hand pose to B
> * Before the viewer has blended pose A over to pose B, the original pose A is 
> requested again
> * In this case, the hand pose will not be properly (re)set and because 
> mNewPose == mCurrentPose, there will be no further blending, leaving the hand 
> in it's current pose
> 
> The patch will properly reset the hand pose in this case and update the 
> visual parameters of the avatar.
> 
> 
> This addresses bug STORM-1899.
> https://jira.secondlife.com/browse/STORM-1899
> 
> 
> Diffs
> -
> 
>   indra/llcharacter/llhandmotion.cpp 4d9106153407 
> 
> Diff: http://codereview.secondlife.com/r/592/diff/diff
> 
> 
> Testing
> ---
> 
> 
> Thanks,
> 
> Ansariel Hiller
> 
>

___
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

Re: [opensource-dev] Review Request: STORM-1899: Avatar hand poses randomly get stuck in spread position

2012-07-29 Thread Lance Corrimal

---
This is an automatically generated e-mail. To reply, visit:
http://codereview.secondlife.com/r/592/#review1243
---

Ship it!


Ship It!

- Lance Corrimal


On July 25, 2012, 3:12 p.m., Ansariel Hiller wrote:
> 
> ---
> This is an automatically generated e-mail. To reply, visit:
> http://codereview.secondlife.com/r/592/
> ---
> 
> (Updated July 25, 2012, 3:12 p.m.)
> 
> 
> Review request for Viewer.
> 
> 
> Description
> ---
> 
> A proposed solution for STORM-1899 and the issue, where the handpose of 
> avatars randomly get stuck in the spread hand position.
> 
> In the current implementation, this case might happen under the following 
> circumstances:
> * Avatar uses an animation with hand pose A
> * A request is issued to change hand pose to B
> * Before the viewer has blended pose A over to pose B, the original pose A is 
> requested again
> * In this case, the hand pose will not be properly (re)set and because 
> mNewPose == mCurrentPose, there will be no further blending, leaving the hand 
> in it's current pose
> 
> The patch will properly reset the hand pose in this case and update the 
> visual parameters of the avatar.
> 
> 
> This addresses bug STORM-1899.
> https://jira.secondlife.com/browse/STORM-1899
> 
> 
> Diffs
> -
> 
>   indra/llcharacter/llhandmotion.cpp 4d9106153407 
> 
> Diff: http://codereview.secondlife.com/r/592/diff/diff
> 
> 
> Testing
> ---
> 
> 
> Thanks,
> 
> Ansariel Hiller
> 
>

___
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

[opensource-dev] Compilation issues under MSVC2010: Windows guru help *badly* needed !

2012-07-29 Thread Henri Beauchamp
Greetings, folks !

I just ran into a problem that lets me quite clueless: I recently migrated
the Cool VL Viewer build system from VS2005 to VS2010 and succeeded, two
weeks ago, to compile v1.26.5.0 under VS2010.

This week, I was about to make two new releases (v1.26.4.23 which is basically
the same as v1.26.5.0 with just a few things added) and v1.26.5.1 which is the
firts release with the v3.3.4 renderer backported (working just fine under
Linux).

But then I came around an issue dealing with Windows headers inclusion that
I just can't figure out. When compiling (either v1.26.4.23 or v1.26.5.1),
VS2010 fails for the llwindow library, with the following error (sources
path edited to linden\ for clarity):

llwindow.cpp
linden\indra\llwindow\llwindowwin32.h(45): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(45): error C2143: syntax error : missing 
',' before '&'
linden\indra\llwindow\llwindowwin32.h(146): error C2061: syntax error : 
identifier 'COMPOSITIONFORM'
linden\indra\llwindow\llwindowwin32.h(147): error C2061: syntax error : 
identifier 'CANDIDATEFORM'
linden\indra\llwindow\llwindowwin32.h(148): error C2061: syntax error : 
identifier 'IMECHARPOSITION'
linden\indra\llwindow\llwindowwin32.h(150): error C2061: syntax error : 
identifier 'RECONVERTSTRING'
linden\indra\llwindow\llwindowwin32.h(177): error C2146: syntax error : missing 
';' before identifier 'mWndProc'
linden\indra\llwindow\llwindowwin32.h(177): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(177): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(237): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(237): error C2143: syntax error : missing 
',' before '&'

COMPOSITIONFORM & Co pertain to Imm.h and the errors around lines 45 and 177+
are related to undefined MSG and WNDPROC types (that seem ro pertain to
WinUser.h).

The weird thing is that I didn't change a single thing in v1.4.26.23 in
llwindows/, neither in the cmake files when compared to v1.26.5.0 that
(still) compiles just fine !!!

I checked the Windows headers inclusion and they seem just fine, with,
in llwindowwin32.h:


#ifndef LL_LLWINDOWWIN32_H
#define LL_LLWINDOWWIN32_H

// Limit Windows API to small and manageable set.
#define WIN32_LEAN_AND_MEAN
#include 
#include 

.../...


Adding #include  after #include  in llwindowwin32.h
allows to get rid of the undefined COMPOSITIONFORM ... RECONVERTSTRING
types, but adding #include  doesn't solve the issue with
MSG and WNDPROC not being defined, even if I use:


#ifndef LL_LLWINDOWWIN32_H
#define LL_LLWINDOWWIN32_H

// Limit Windows API to small and manageable set.
#define WIN32_LEAN_AND_MEAN
#include 
#include 
#include 
#undef NOUSER
#undef NOMSG
#undef _WINUSER_
#include 


I always get:

llwindow.cpp
linden\indra\llwindow\llwindowwin32.h(50): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(50): error C2143: syntax error : missing 
',' before '&'
linden\indra\llwindow\llwindowwin32.h(182): error C2146: syntax error : missing 
';' before identifier 'mWndProc'
linden\indra\llwindow\llwindowwin32.h(182): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(182): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(242): error C4430: missing type specifier 
- int assumed. Note: C++ does not support default-int
linden\indra\llwindow\llwindowwin32.h(242): error C2143: syntax error : missing 
',' before '&'

What is totally flabbergasting is that between v1.26.5.0 (which compiles
fine) and v1.26.4.23, the diff is only 300Kb and NOTHING in it touches
the cmake files neither the llwindow/ files !!!
Plus, llwindowwin32.cpp (which also needs and includes llwindowwin32.h)
compiles just fine, unlike llwindow.cpp (and yes, I also tried to add
the same Windows includes in the latter than in the former, to no avail).

Finally, I tried on two different build systems (a WinXP SP3 virtual
machine and a genuine (non emulated) Windows 7 Ultimate system), to no
avail (not a build system issue, apparenetly, especially since v1.26.5.0
still compiles just fine).

Any clue of what is going wrong with this sh*tty VS2010 ?

Many thanks in advance !

Henri.

___
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


[opensource-dev] [SOLVED] Re: Compilation issues under MSVC2010: Windows guru help *badly* needed !

2012-07-29 Thread Henri Beauchamp
Problem solved !...

Man, what a sh*tty, Mickey Mouse OS Windoze (or "Windaube", in French,
for puns amateurs) can be ... Its UTTER stupidity and hackiness
NEVER cease to amaze me !

The reasons for all my troubles were that:

- windows.h contains a "#pragam once" directive (instead of standard,
  robust and flawless #ifndef _HEADER_NAME_ / #define _HEADER_NAME_ /
  ... header here ... / #endif guards), which means that the
  pre-processor will *never* even *try* to include twice that header
  in nested header invocations.

- Somehow (but I didn't yet figured out it all: to be frank, at this
  point I don't really care any more...), #define WIN32_LEAN_AND_MEAN
  leads the pre-processor to only include the sub-headers (included
  from windows.h) that contain definitions used in the file calling
  the "#include " (and beacuse of the #pragma once, if
  another, nested file includes this file and contains other
  definitions requiring sub-headers that have been skipped the first
  time, it is f*cked up !).

- In v1.26.4.23 and v1.26.5.1 I added support for private memory pools,
  but in a more complete way than in LL's viewer (i.e. proper memory
  usage functions where added for Linux and MacOS-X in llsys.cpp to be
  used by the private pools manager in llmemory.cpp), and this lead me
  to add an '#include "sys.h"' into llmemory.h. And... llsys.h itself
  already contains an #include ...

- In llwindow.cpp, the headers where included as follow:
  
  #include "linden_common.h"
  #include "llwindowheadless.h"

  #if LL_MESA_HEADLESS
  #include "llwindowmesaheadless.h"
  #elif LL_SDL
  #include "llwindowsdl.h"
  #elif LL_WINDOWS
  #include "llwindowwin32.h"<-- With the problem arising here
  #elif LL_DARWIN
  #include "llwindowmacosx.h"
  #endif

  ...and it comes out that llwindowheadless.h was itself including
  llmemory.h, which was including (due to my modifications) sys.h,
  which was including windows.h. Then when llwindowwin32.h was
  trying to include windows.h in its turn (or winuser.h, after I
  tried adding it to solve the issue), it failed because of the
  combined effect of #pragma once and #define WIN32_LEAN_AND_MEAN.

The solution was to reorder the includes in llwindow.cpp to read:

  #include "linden_common.h"

  #if LL_MESA_HEADLESS
  #include "llwindowmesaheadless.h"
  #elif LL_SDL
  #include "llwindowsdl.h"
  #elif LL_WINDOWS
  #include "llwindowwin32.h"
  #elif LL_DARWIN
  #include "llwindowmacosx.h"
  #endif

  // SHITTY MSVC INCLUDE ISSUES WARNING:
  // include llwindowheadless.h* AFTER* llwindowwin32.h, else bad
  // things happen at compilation time !
  #include "llwindowheadless.h"

Note that I'm still lucky that llwindowheadless.h doesn't need
definitions from sub-includes of windows.h that are skipped by
the latter when it is included by llwindowwin32.h (if you still
can follow all the indirections in this reasonning, lol !)...

To prevent such issues in the future, I suggest that the viewer
sources are ammended so that #include  is *NEVER*
done from header files, but only from the *.cpp files using
headers files that require windows.h's inclusion; this may
lead to have to manually add a few includes (windows.h
sub-includes) in the *.cpp files (that might be skipped by
windows.h because of the #define WIN32_LEAN_AND_MEAN if some
definitions are used in the *.h file and not in the *.cpp
file), but at least those includes won't be impacted in case of
nesting by the "#pragma once" that hit me hard here, since even:
  #undef NOUSER
  #undef NOMSG
  #undef _WINUSER_
  #include 
could not get past it and prevented the needed winuser.h
definitions to be included at all !...

I can't provide a patch, since LL won't use it (not having given up
my privacy to fill up their stupid "contribution agreement" form and
stuff...), but you may consider this info as LGPL (or anything
fancying you) and produce the patch yourself.

Henri.


On Sun, 29 Jul 2012 10:40:02 +0200, I wrote:

> Greetings, folks !
> 
> I just ran into a problem that lets me quite clueless: I recently migrated
> the Cool VL Viewer build system from VS2005 to VS2010 and succeeded, two
> weeks ago, to compile v1.26.5.0 under VS2010.
> 
> This week, I was about to make two new releases (v1.26.4.23 which is basically
> the same as v1.26.5.0 with just a few things added) and v1.26.5.1 which is the
> firts release with the v3.3.4 renderer backported (working just fine under
> Linux).
> 
> But then I came around an issue dealing with Windows headers inclusion that
> I just can't figure out. When compiling (either v1.26.4.23 or v1.26.5.1),
> VS2010 fails for the llwindow library, with the following error (sources
> path edited to linden\ for clarity):
> 
> llwindow.cpp
> linden\indra\llwindow\llwindowwin32.h(45): error C4430: missing type 
> specifier - int assumed. Note: C++ does not support default-int
> linden\indra\llwindow\llwindowwin32.h(45): error C2143: syntax error : 
> missing ',' before '&'
> linden\indra\

Re: [opensource-dev] New HTTP Library & Project Viewer

2012-07-29 Thread Carlo Wood
On Sun, 29 Jul 2012 10:07:18 +0200
Henri Beauchamp  wrote:

> On Sun, 29 Jul 2012 05:23:15 +0200, Carlo Wood wrote:
> 
> > On Fri, 27 Jul 2012 16:59:18 -0400
> > holydoughnuts  wrote:
> > 
> > The implementation that I wrote for Singularity (not yet in the
> > the official release) is more on the side of "blazing fast" :p.
> > The bottleneck is entirely server-side, but I've seen download
> > speeds of 1 MB/s non-stop till all textures were there.
> 
> With just a few tweakings to the texture fetcher (and in particular
> a setting that permits up to 32 concurrent HTTP fetches), I get much
> more than 1MB/s in the Cool VL Viewer... In fact, I'm more in the
> 10MB/s+ range while rezzing in heavily textured areas and the rezzing
> time is pretty low... This has been so for many months (well over
> a year actually) already.

I agree that that would be an advantage for the user; but it's not
clear to me if it is allowed (or will be in the near future) to
have 32 concurrent fetches.

The rationale that it SHOULD be allowed is that the user will
download those textures anyway; so, you might as well allow
them to get it quickly, in a short time: this has no influence
on the average number of open file descriptors on the server.

I understand that LL is afraid that once viewers can keep sockets
open (for reuse) that the servers run out of filedescriptors. Of course,
this is all to true. Therefore I propose to set a limit on the
maximum number of UNUSED filedescriptors. However, there should be
no limit or a much higher limit, on the number of connections that
are actually in use. The question is then: when is a filedescriptor
"unused"? Well, I'd say that for the sake of re-use, it can be
considered unused if there hasn't been a new request for it for
-say- a second.  It's probably best to define multiple stages,
that is:
* Allow a maximum of 32 connections.
* Allow up to 32 connections that are unused for 1 second.
* Allow up to 8 connections that are unused for 10 seconds.
* Allow up to 2 connections that are unused for 1 minute.
* Allow 1 connection to be unused for 20 minutes (or whenever
one leaves a region and it can be determined that this server
won't be needed or used anymore).

Of course this means that upon teleport to a new region with
many unknown textures, the viewer will make 32 new SSH connections,
but that is MUCH less than one new connection PER TEXTURE, as we
have now. Then all those connections are reused until all textures
have been downloaded (a few seconds).

Other strategies are possible, like NOT immediately creating a
new connection as long as the maximum of 32 connections haven't
been used up yet, but waiting with that until there's a queue
of requests building up.

Bottom line is, I'm afraid that Linden Lab is going to take the
(too) simplistic route as they often have done in the past, and
do something very silly like:
* Allow a maximum of 2 connections, and allow to keep them
  open indefinitely.

I hope you see the difference :p
I argue that something like that makes no sense and would hurt
the user because they'd have to wait unnecessary long before
everything downloads.

-- 
Carlo Wood 
___
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


Re: [opensource-dev] New HTTP Library & Project Viewer

2012-07-29 Thread Henri Beauchamp
I would agree with you if all decent HTTP servers (Apache, but not
only), didn't have their own throttling algorithms are weren't able
to just drop the excess of connections when they run out of sockets.
But they do have such throttling mechanisms, so it's no issue at all
and in fact, 32 is the max number of connection per IP an Apache
server would accept by default (the admin can of course change this
setting: it's not uncommon to encounter websites configured for up
to 64 connections per IP).

FYI, early HTTP fetches code was allowing up to 32 connections already,
then it was lowered to 8, then raised back up to 16, and I since lost
track of what maximum is currently hardcoded in LL's viewer...

That's why I made it a configurable setting: if you start seeing
timeouts or "busy" replies from the server in your viewer log, then
you can still lower the setting. The default in the Cool VL Viewer
is 16, but I have always used 32 myself and never came accross any
issue, including in over-crowded sims (and I can enjoy a very fast
rezzing experience): of course, you could argue that this is because
everyone else in the sim is limited to 8 connections... And you
could be right (hard to say: only LL could...).

As for keeping only two persistent connections, this can seem a
good idea, but on the viewer side it means that the free cores
(on a quad core CPU, only one is always used at 100% for rendering,
the three others are only (partially) used while decoding textures
and for other threads, suchs as fetching/caching) are just sitting
there, doing nothing as they wait for a texture to be downloaded
from your only two "pipes"... and what happens when a connection
stalls and timeouts ?... You loose half your bandwitdh (instead
of only 1/32th) !...

I would therefore recommend a higher number of persistent
connections (16 sounds good and 8 an absolute minimum); alas such
connections are precisely very limited (usually 4 per IP) in
standard HTTP server configurations (they are considered costy,
precisely because they are persistent while the traffic is only
sporadic on normal web servers).
This means that the grid's (SL and OpenSIM) texture HTTP servers
would have to be configured specially to allow a higher limit per
IP...

On Sun, 29 Jul 2012 15:59:38 +0200, Carlo Wood wrote:

> On Sun, 29 Jul 2012 10:07:18 +0200
> Henri Beauchamp  wrote:
> 
> > On Sun, 29 Jul 2012 05:23:15 +0200, Carlo Wood wrote:
> > 
> > > On Fri, 27 Jul 2012 16:59:18 -0400
> > > holydoughnuts  wrote:
> > > 
> > > The implementation that I wrote for Singularity (not yet in the
> > > the official release) is more on the side of "blazing fast" :p.
> > > The bottleneck is entirely server-side, but I've seen download
> > > speeds of 1 MB/s non-stop till all textures were there.
> > 
> > With just a few tweakings to the texture fetcher (and in particular
> > a setting that permits up to 32 concurrent HTTP fetches), I get much
> > more than 1MB/s in the Cool VL Viewer... In fact, I'm more in the
> > 10MB/s+ range while rezzing in heavily textured areas and the rezzing
> > time is pretty low... This has been so for many months (well over
> > a year actually) already.
> 
> I agree that that would be an advantage for the user; but it's not
> clear to me if it is allowed (or will be in the near future) to
> have 32 concurrent fetches.
> 
> The rationale that it SHOULD be allowed is that the user will
> download those textures anyway; so, you might as well allow
> them to get it quickly, in a short time: this has no influence
> on the average number of open file descriptors on the server.
> 
> I understand that LL is afraid that once viewers can keep sockets
> open (for reuse) that the servers run out of filedescriptors. Of course,
> this is all to true. Therefore I propose to set a limit on the
> maximum number of UNUSED filedescriptors. However, there should be
> no limit or a much higher limit, on the number of connections that
> are actually in use. The question is then: when is a filedescriptor
> "unused"? Well, I'd say that for the sake of re-use, it can be
> considered unused if there hasn't been a new request for it for
> -say- a second.  It's probably best to define multiple stages,
> that is:
> * Allow a maximum of 32 connections.
> * Allow up to 32 connections that are unused for 1 second.
> * Allow up to 8 connections that are unused for 10 seconds.
> * Allow up to 2 connections that are unused for 1 minute.
> * Allow 1 connection to be unused for 20 minutes (or whenever
> one leaves a region and it can be determined that this server
> won't be needed or used anymore).
> 
> Of course this means that upon teleport to a new region with
> many unknown textures, the viewer will make 32 new SSH connections,
> but that is MUCH less than one new connection PER TEXTURE, as we
> have now. Then all those connections are reused until all textures
> have been downloaded (a few seconds).
> 
> Other strategies are possible, like NOT immediately creating a
> ne

Re: [opensource-dev] New HTTP Library & Project Viewer

2012-07-29 Thread Sheet Spotter
Does increasing the HTTP connection limit also increase the burden on the
server and network? 

Increasing the HTTP connection limit on one client might improve the
experience for one person. It might also diminish the experience for
everyone else on the same server. 


Sheet Spotter

-Original Message-
From: opensource-dev-boun...@lists.secondlife.com
[mailto:opensource-dev-boun...@lists.secondlife.com] On Behalf Of Henri
Beauchamp
Sent: July 29, 2012 9:23 AM
To: opensource-dev@lists.secondlife.com
Subject: Re: [opensource-dev] New HTTP Library & Project Viewer

[...]

FYI, early HTTP fetches code was allowing up to 32 connections already,
then it was lowered to 8, then raised back up to 16, and I since lost
track of what maximum is currently hardcoded in LL's viewer...

That's why I made it a configurable setting: if you start seeing
timeouts or "busy" replies from the server in your viewer log, then
you can still lower the setting. The default in the Cool VL Viewer
is 16, but I have always used 32 myself and never came accross any
issue, including in over-crowded sims (and I can enjoy a very fast
rezzing experience): of course, you could argue that this is because
everyone else in the sim is limited to 8 connections... And you
could be right (hard to say: only LL could...).

[...]


___
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