Difference between revisions of "Local data storage methods used in the viewer"

From Second Life Wiki
Jump to navigation Jump to search
(clean up and rearrange article description and cache replacement discussion)
(line up tables to promote order and make them easier to read)
Line 1: Line 1:
<font size="+3">''This article is a work in progress.''</font>
<font size="+3">''This article is a work in progress.''</font>


<font size="+3">''Please do not edit.''</font>
<font size="+3">''Please do not edit.''</font>




__TOC__
__TOC__




<font size="+3">''This article is a work in progress.''</font>
<font size="+3">''This article is a work in progress.''</font>


<font size="+3">''Please do not edit.''</font>
<font size="+3">''Please do not edit.''</font>
== Article purpose and design ==
== Article purpose and design ==
This page is intended to have two different purposes.
This page is intended to have two different purposes.
Line 23: Line 18:
The following list of source references is based on viewer source released 1.19.1.4 in the SVN repository, and will need future updating as the viewer source continues to evolve:
The following list of source references is based on viewer source released 1.19.1.4 in the SVN repository, and will need future updating as the viewer source continues to evolve:
* [http://svn.secondlife.com/trac/linden/browser/branches/Branch_1-19-1-Viewer/indra/newview?rev=443 Link to 1.19.1.4 in the SVN repository]
* [http://svn.secondlife.com/trac/linden/browser/branches/Branch_1-19-1-Viewer/indra/newview?rev=443 Link to 1.19.1.4 in the SVN repository]
This listing duplicates the layout and format of the [[Viewer Source Files]] page, providing a direct 1-to-1 correspondence with each section and source file. Although the source list only includes .cpp files, if a matching .h file is found it is listed here below the .cpp for that name.
This listing duplicates the layout and format of the [[Viewer Source Files]] page, providing a direct 1-to-1 correspondence with each section and source file. Although the source list only includes .cpp files, if a matching .h file is found it is listed here below the .cpp for that name.
 
=== Table column headings === Each column of the table refers to:
=== Table column headings ===
Each column of the table refers to:
* "VFS" - any reference to this keyward. "VFS" is not used in the code alone, and so is usually referring to comments in the source, or debugging/logging notes.
* "VFS" - any reference to this keyward. "VFS" is not used in the code alone, and so is usually referring to comments in the source, or debugging/logging notes.
* "gVFS" - the "general VFS" which is used for temporary storage for assets, in a private RAM-disk held in memory at all times. It is the primary limitation for allowing unlimited local asset caching in the viewer as currently designed. This needs to be removed and replaced with direct filesystem calls to folder-based storage.
* "gVFS" - the "general VFS" which is used for temporary storage for assets, in a private RAM-disk held in memory at all times. It is the primary limitation for allowing unlimited local asset caching in the viewer as currently designed. This needs to be removed and replaced with direct filesystem calls to folder-based storage.
Line 35: Line 27:
=== VFS removal/replacement ===
=== VFS removal/replacement ===
As has been discussed in the sl-dev mailing list and in the JIRA, the VFS does not scale up very well at all since it functions as a private RAM-disk for non-texture assets downloaded by the viewer. The on-disk VFS files are used only for storage when the viewer is not running. At startup, the files are parsed for errors and loaded into memory, and continue to occupy memory until the viewer exits and the contents are written back to the disk files.
As has been discussed in the sl-dev mailing list and in the JIRA, the VFS does not scale up very well at all since it functions as a private RAM-disk for non-texture assets downloaded by the viewer. The on-disk VFS files are used only for storage when the viewer is not running. At startup, the files are parsed for errors and loaded into memory, and continue to occupy memory until the viewer exits and the contents are written back to the disk files.
As a RAM disk, increasing the cache size to larger than the available free memory causes the computer to run out of physical RAM and require the use of virtual memory and disk swapping. This is counterproductive when the intent of increasing the VFS size is to cache more of the frequently-used data to speed up the client and reduce network traffic.
As a RAM disk, increasing the cache size to larger than the available free memory causes the computer to run out of physical RAM and require the use of virtual memory and disk swapping. This is counterproductive when the intent of increasing the VFS size is to cache more of the frequently-used data to speed up the client and reduce network traffic.
In order to permit the cache of assets currently stored in the VFS to grow to gigabytes of storage without requiring gigabytes of physical memory to store it, the existing VFS will have to be removed from the viewer and replaced with a traditional file/directory-based disk cache.
In order to permit the cache of assets currently stored in the VFS to grow to gigabytes of storage without requiring gigabytes of physical memory to store it, the existing VFS will have to be removed from the viewer and replaced with a traditional file/directory-based disk cache.
==== Need for lightweight asset obfuscation ====
==== Need for lightweight asset obfuscation ====
In the interests of copyright protection, a directory-based non-texture asset cache should include some form of low-impact data obfuscation, to make it slightly difficult for the copyrighted works of other SL users held in the cache to be casually copied and examined.
In the interests of copyright protection, a directory-based non-texture asset cache should include some form of low-impact data obfuscation, to make it slightly difficult for the copyrighted works of other SL users held in the cache to be casually copied and examined.
As has been discussed in SL-Dev, heavy and slow cache encryption would serve no purpose since a decryption tool can be easily built using the client source that would do the cache decrypting. So it's better to just use a simple and fast obfuscation technique which discourages casual asset theft, since more complex and slower protection measures would not offer any real protection anyway.  
As has been discussed in SL-Dev, heavy and slow cache encryption would serve no purpose since a decryption tool can be easily built using the client source that would do the cache decrypting. So it's better to just use a simple and fast obfuscation technique which discourages casual asset theft, since more complex and slower protection measures would not offer any real protection anyway.  
== General - Main and Startup ==
== General - Main and Startup ==
 
{| cellborder="3" border="2" width="50%"
{| cellborder="3" border="2"
! width="60%" | file
!file
!width="10%" |VFS
!VFS
!width="10%" |gVFS
!gVFS
!width="10%" |gStaticVFS
!gStaticVFS
!width="10%" |LFS
!LFS
|-
|-
|llstartup.cpp
|llstartup.cpp
Line 74: Line 60:


== General - Window Management and Render Pipeline  ==
== General - Window Management and Render Pipeline  ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|pipeline.cpp
|pipeline.cpp
Line 119: Line 105:


== General - Utility and Misc ==
== General - Utility and Misc ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llbbox.cpp
|llbbox.cpp
Line 188: Line 174:


== Rendering - Asset Management ==
== Rendering - Asset Management ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llassetuploadresponders.cpp
|llassetuploadresponders.cpp
Line 233: Line 219:


== Rendering - Character and Animation ==
== Rendering - Character and Animation ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|lldriverparam.cpp
|lldriverparam.cpp
Line 268: Line 254:


== Rendering - Camera ==
== Rendering - Camera ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llcameraview.cpp
|llcameraview.cpp
Line 301: Line 287:


== Rendering - Effects ==
== Rendering - Effects ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llhudconnector.cpp
|llhudconnector.cpp
Line 400: Line 386:


== Rendering - Environment ==
== Rendering - Environment ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llvlmanager.cpp
|llvlmanager.cpp
Line 463: Line 449:


== Rendering - Viewer Objects: Volumes, Particles, and Trees ==
== Rendering - Viewer Objects: Volumes, Particles, and Trees ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llvocache.cpp
|llvocache.cpp
Line 508: Line 494:


== Rendering - Render Pipeline ==
== Rendering - Render Pipeline ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llcloud.cpp
|llcloud.cpp
Line 787: Line 773:


== Input and Output - Audio ==
== Input and Output - Audio ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|fmodwrapper.cpp
|fmodwrapper.cpp
Line 814: Line 800:


== Input and Output - Input ==
== Input and Output - Input ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llviewerjoystick.cpp
|llviewerjoystick.cpp
Line 835: Line 821:


== Data and Communication - Agents ==
== Data and Communication - Agents ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llagent.cpp
|llagent.cpp
Line 862: Line 848:


== Data and Communication - Region and World ==
== Data and Communication - Region and World ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llviewerregion.cpp
|llviewerregion.cpp
Line 883: Line 869:


== Data and Communication - Network ==
== Data and Communication - Network ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llasynchostbyname.cpp
|llasynchostbyname.cpp
Line 964: Line 950:


== User Interface - Alerts ==
== User Interface - Alerts ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llconfirmationmanager.cpp
|llconfirmationmanager.cpp
Line 991: Line 977:


== User Interface - Assets ==
== User Interface - Assets ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llcompilequeue.cpp
|llcompilequeue.cpp
Line 1,120: Line 1,106:


== User Interface - Avatar Appearance ==
== User Interface - Avatar Appearance ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llfloaterclothing.cpp
|llfloaterclothing.cpp
Line 1,165: Line 1,151:


== User Interface - Chat, Instant Messaging, Notices, Reports ==
== User Interface - Chat, Instant Messaging, Notices, Reports ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llchatbar.cpp
|llchatbar.cpp
Line 1,246: Line 1,232:


== User Interface - Data ==
== User Interface - Data ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llclassifiedinfo.cpp
|llclassifiedinfo.cpp
Line 1,423: Line 1,409:


== User Interface - Data:Inventory ==
== User Interface - Data:Inventory ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llcallingcard.cpp
|llcallingcard.cpp
Line 1,492: Line 1,478:


== User Interface - Data:Money and Land ==
== User Interface - Data:Money and Land ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llcurrencyuimanager.cpp
|llcurrencyuimanager.cpp
Line 1,543: Line 1,529:


== User Interface - Data:Search ==
== User Interface - Data:Search ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llfloaterdirectory.cpp
|llfloaterdirectory.cpp
Line 1,624: Line 1,610:


== User Interface - Data:Map ==
== User Interface - Data:Map ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
llcompass.cpp
llcompass.cpp
Line 1,675: Line 1,661:


== User Interface - Objects and Edit Tools ==
== User Interface - Objects and Edit Tools ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llhoverview.cpp
|llhoverview.cpp
Line 1,918: Line 1,904:


== User Interface - HTML ==
== User Interface - HTML ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llfloaterhtml.cpp
|llfloaterhtml.cpp
Line 1,945: Line 1,931:


== User Interface - Import, Export, Upload ==
== User Interface - Import, Export, Upload ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llfloaterimport.cpp
|llfloaterimport.cpp
Line 1,978: Line 1,964:


== User Interface - Menus, Overlays, Login ==
== User Interface - Menus, Overlays, Login ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llmediaremotectrl.cpp
|llmediaremotectrl.cpp
Line 2,035: Line 2,021:


== User Interface - Preferences ==
== User Interface - Preferences ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llfloaterpreference.cpp
|llfloaterpreference.cpp
Line 2,098: Line 2,084:


== User Interface - Utility ==
== User Interface - Utility ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llcolorscheme.cpp
|llcolorscheme.cpp
Line 2,149: Line 2,135:


== User Interface - Widgets ==
== User Interface - Widgets ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llcolorswatch.cpp
|llcolorswatch.cpp
Line 2,225: Line 2,211:


== User Interface - Debug ==
== User Interface - Debug ==
{| cellborder="3" border="2"
{| cellborder="3" border="2" width="50%"
!file
! width="60%" | file
!VFS
!width="10%" |VFS
!gVFS
!width="10%" |gVFS
!gStaticVFS
!width="10%" |gStaticVFS
!LFS
!width="10%" |LFS
|-
|-
|llconsole.cpp
|llconsole.cpp

Revision as of 19:06, 15 June 2008

This article is a work in progress.

Please do not edit.



This article is a work in progress.

Please do not edit.

Article purpose and design

This page is intended to have two different purposes.

  • Document where the VFS is used in the viewer source
  • Provide a direction forward for removing/replacing the VFS


The following list of source references is based on viewer source released 1.19.1.4 in the SVN repository, and will need future updating as the viewer source continues to evolve:

This listing duplicates the layout and format of the Viewer Source Files page, providing a direct 1-to-1 correspondence with each section and source file. Although the source list only includes .cpp files, if a matching .h file is found it is listed here below the .cpp for that name. === Table column headings === Each column of the table refers to:

  • "VFS" - any reference to this keyward. "VFS" is not used in the code alone, and so is usually referring to comments in the source, or debugging/logging notes.
  • "gVFS" - the "general VFS" which is used for temporary storage for assets, in a private RAM-disk held in memory at all times. It is the primary limitation for allowing unlimited local asset caching in the viewer as currently designed. This needs to be removed and replaced with direct filesystem calls to folder-based storage.
  • "gStaticVFS" - a read-only VFS which makes up about 75% of the client download. This contains the graphical elements and sounds of the Second Life user interface. It's small but why does it have to be fully loaded in a virtual RAM-disk all the time using limited system memory? May be worthwhile to replace this with direct on-disk storage, perhaps in a ZIP file.
  • LFS - the "Local File System", used to directly read and write to the local OS storage. The audio manager for example uses LFS calls to write decoded OGG sounds as WAV files in the cache directory. LFS calls might be usable to replace the VFS as mentioned above.

VFS removal/replacement

As has been discussed in the sl-dev mailing list and in the JIRA, the VFS does not scale up very well at all since it functions as a private RAM-disk for non-texture assets downloaded by the viewer. The on-disk VFS files are used only for storage when the viewer is not running. At startup, the files are parsed for errors and loaded into memory, and continue to occupy memory until the viewer exits and the contents are written back to the disk files. As a RAM disk, increasing the cache size to larger than the available free memory causes the computer to run out of physical RAM and require the use of virtual memory and disk swapping. This is counterproductive when the intent of increasing the VFS size is to cache more of the frequently-used data to speed up the client and reduce network traffic. In order to permit the cache of assets currently stored in the VFS to grow to gigabytes of storage without requiring gigabytes of physical memory to store it, the existing VFS will have to be removed from the viewer and replaced with a traditional file/directory-based disk cache.

Need for lightweight asset obfuscation

In the interests of copyright protection, a directory-based non-texture asset cache should include some form of low-impact data obfuscation, to make it slightly difficult for the copyrighted works of other SL users held in the cache to be casually copied and examined. As has been discussed in SL-Dev, heavy and slow cache encryption would serve no purpose since a decryption tool can be easily built using the client source that would do the cache decrypting. So it's better to just use a simple and fast obfuscation technique which discourages casual asset theft, since more complex and slower protection measures would not offer any real protection anyway.

General - Main and Startup

file VFS gVFS gStaticVFS LFS
llstartup.cpp
X
gVFS::no
X
(check)
LFS::no
llappviewer.cpp
X
gVFS::no
X
(check)
LFS::no
llappviewer.h
X
gVFS::no
X
(check)
LFS::no

General - Window Management and Render Pipeline

file VFS gVFS gStaticVFS LFS
pipeline.cpp   gVFS::no   LFS::no
llviewerdisplay.cpp   gVFS::no   LFS::no
llviewerprecompiledheaders.cpp   gVFS::no   LFS::no
llviewerprecompiledheaders.h
X
gVFS::no   LFS::no
llviewerwindow.cpp   gVFS::no   LFS::no
llwindebug.cpp   gVFS::no   LFS::no

General - Utility and Misc

file VFS gVFS gStaticVFS LFS
llbbox.cpp   gVFS::no   LFS::no
llbox.cpp   gVFS::no   LFS::no
llcallbacklist.cpp   gVFS::no   LFS::no
llcontroldef.cpp
X
gVFS::no   LFS::no
lleventnotifier.cpp   gVFS::no   LFS::no
lleventpoll.cpp   gVFS::no   LFS::no
llhippo.cpp   gVFS::no   LFS::no
llregionposition.cpp   gVFS::no   LFS::no
moviemaker.cpp   gVFS::no   LFS::no
noise.cpp   gVFS::no   LFS::no

Rendering - Asset Management

file VFS gVFS gStaticVFS LFS
llassetuploadresponders.cpp
X
gVFS::no   LFS::no
lltexturecache.cpp   gVFS::no   LFS::no
lltexturefetch.cpp   gVFS::no   LFS::no
llviewerassetstorage.cpp
X
gVFS::no   LFS::no
llwearable.cpp
X
gVFS::no   LFS::no
llwearablelist.cpp   gVFS::no   LFS::no

Rendering - Character and Animation

file VFS gVFS gStaticVFS LFS
lldriverparam.cpp   gVFS::no   LFS::no
llemote.cpp   gVFS::no   LFS::no
llviewergesture.cpp   gVFS::no   LFS::no
llvoavatar.cpp
X
gVFS::no
X
LFS::no
llcharacter(???)

Rendering - Camera

file VFS gVFS gStaticVFS LFS
llcameraview.cpp   gVFS::no   LFS::no
llfollowcam.cpp   gVFS::no   LFS::no
llmorphview.cpp   gVFS::no   LFS::no
llviewercamera.cpp   gVFS::no   LFS::no

Rendering - Effects

file VFS gVFS gStaticVFS LFS
llhudconnector.cpp   gVFS::no   LFS::no
llhudeffect.cpp   gVFS::no   LFS::no
llhudeffectbeam.cpp   gVFS::no   LFS::no
llhudeffectlookat.cpp   gVFS::no   LFS::no
llhudeffectpointat.cpp   gVFS::no   LFS::no
llhudeffecttrail.cpp   gVFS::no   LFS::no
llhudicon.cpp   gVFS::no   LFS::no
llhudmanager.cpp   gVFS::no   LFS::no
llhudobject.cpp   gVFS::no   LFS::no
llhudrender.cpp   gVFS::no   LFS::no
llhudtext.cpp   gVFS::no   LFS::no
llhudview.cpp   gVFS::no   LFS::no
lltracker.cpp   gVFS::no   LFS::no
llvelocitybar.cpp   gVFS::no   LFS::no
llvotextbubble.cpp   gVFS::no   LFS::no

Rendering - Environment

file VFS gVFS gStaticVFS LFS
llvlmanager.cpp   gVFS::no   LFS::no
llvlcomposition.cpp   gVFS::no   LFS::no
llvoclouds.cpp   gVFS::no   LFS::no
llvosurfacepatch.cpp   gVFS::no   LFS::no
llvoground.cpp
X
gVFS::no   LFS::no
llvosky.cpp   gVFS::no   LFS::no
llvostars.cpp   gVFS::no   LFS::no
llvowater.cpp   gVFS::no   LFS::no
llwind.cpp   gVFS::no   LFS::no

Rendering - Viewer Objects: Volumes, Particles, and Trees

file VFS gVFS gStaticVFS LFS
llvocache.cpp   gVFS::no   LFS::no
llvograss.cpp   gVFS::no   LFS::no
llvoinventorylistener.cpp   gVFS::no   LFS::no
llvopartgroup.cpp   gVFS::no   LFS::no
llvotree.cpp   gVFS::no   LFS::no
llvovolume.cpp   gVFS::no   LFS::no

Rendering - Render Pipeline

file VFS gVFS gStaticVFS LFS
llcloud.cpp   gVFS::no   LFS::no
llcubemap.cpp   gVFS::no   LFS::no
llcylinder.cpp   gVFS::no   LFS::no
lldrawable.cpp   gVFS::no   LFS::no
lldrawpool.cpp   gVFS::no   LFS::no
lldrawpoolalpha.cpp   gVFS::no   LFS::no
lldrawpoolavatar.cpp   gVFS::no   LFS::no
lldrawpoolbump.cpp   gVFS::no   LFS::no
lldrawpoolclouds.cpp   gVFS::no   LFS::no
lldrawpoolground.cpp   gVFS::no   LFS::no
lldrawpoolsimple.cpp   gVFS::no   LFS::no
lldrawpoolsky.cpp   gVFS::no   LFS::no
lldrawpoolstars.cpp   gVFS::no   LFS::no
lldrawpoolterrain.cpp   gVFS::no   LFS::no
lldrawpooltree.cpp   gVFS::no   LFS::no
lldrawpoolwater.cpp   gVFS::no   LFS::no
lldynamictexture.cpp   gVFS::no   LFS::no
llface.cpp   gVFS::no   LFS::no
llfeaturemanager.cpp   gVFS::no   LFS::no
llflexibleobject.cpp   gVFS::no   LFS::no
llglsandbox.cpp   gVFS::no   LFS::no
llglslshader.cpp   gVFS::no   LFS::no
llpatchvertexarray.cpp   gVFS::no   LFS::no
llpolymesh.cpp   gVFS::no   LFS::no
llpolymorph.cpp   gVFS::no   LFS::no
llsky.cpp   gVFS::no   LFS::no
llspatialpartition.cpp   gVFS::no   LFS::no
llsphere.cpp   gVFS::no   LFS::no
llsprite.cpp   gVFS::no   LFS::no
llsurface.cpp   gVFS::no   LFS::no
llsurfacepatch.cpp   gVFS::no   LFS::no
lltexlayer.cpp
X
gVFS::no   LFS::no
llviewerimage.cpp
X
gVFS::no   LFS::no
llviewerimagelist.cpp
X
gVFS::no   LFS::no
llviewerjoint.cpp   gVFS::no   LFS::no
llviewerjointattachment.cpp   gVFS::no   LFS::no
llviewerjointmesh.cpp   gVFS::no   LFS::no
llviewerjointshape.cpp   gVFS::no   LFS::no
llviewerlayer.cpp   gVFS::no   LFS::no
llviewerobject.cpp   gVFS::no   LFS::no
llviewerobjectlist.cpp   gVFS::no   LFS::no
llviewerpartsim.cpp   gVFS::no   LFS::no
llviewerpartsource.cpp   gVFS::no   LFS::no
llviewertextureanim.cpp   gVFS::no   LFS::no
llviewervisualparam.cpp   gVFS::no   LFS::no

Input and Output - Audio

file VFS gVFS gStaticVFS LFS
fmodwrapper.cpp   gVFS::no   LFS::no
llaudiosourcevo.cpp   gVFS::no   LFS::no
llaudiostatus.cpp   gVFS::no   LFS::no

Input and Output - Input

file VFS gVFS gStaticVFS LFS
llviewerjoystick.cpp   gVFS::no   LFS::no
llviewerkeyboard.cpp   gVFS::no   LFS::no

Data and Communication - Agents

file VFS gVFS gStaticVFS LFS
llagent.cpp   gVFS::no   LFS::no
llagentdata.cpp   gVFS::no   LFS::no
llagentpilot.cpp   gVFS::no   LFS::no

Data and Communication - Region and World

file VFS gVFS gStaticVFS LFS
llviewerregion.cpp   gVFS::no   LFS::no
llworld.cpp   gVFS::no   LFS::no

Data and Communication - Network

file VFS gVFS gStaticVFS LFS
llasynchostbyname.cpp   gVFS::no   LFS::no
llcaphttpsender.cpp   gVFS::no   LFS::no
llurl.cpp   gVFS::no   LFS::no
llurlwhitelist.cpp   gVFS::no   LFS::no
lluserauth.cpp   gVFS::no   LFS::no
llviewergenericmessage.cpp   gVFS::no   LFS::no
llviewermessage.cpp
X
gVFS::no   LFS::no
llviewermessage.h
X
gVFS::no   LFS::no
llviewernetwork.cpp   gVFS::no   LFS::no
llviewerthrottle.cpp   gVFS::no   LFS::no
llweb.cpp   gVFS::no   LFS::no
llxmlrpctransaction.cpp   gVFS::no   LFS::no

User Interface - Alerts

file VFS gVFS gStaticVFS LFS
llconfirmationmanager.cpp   gVFS::no   LFS::no
llfirstuse.cpp   gVFS::no   LFS::no
llnotify.cpp   gVFS::no   LFS::no

User Interface - Assets

file VFS gVFS gStaticVFS LFS
llcompilequeue.cpp
X
gVFS::no   LFS::no
llcompilequeue.h
X
gVFS::no   LFS::no
llfloateranimpreview.cpp
X
gVFS::no   LFS::no
llfloatergesture.cpp   gVFS::no   LFS::no
llfloaterimagepreview.cpp   gVFS::no   LFS::no
llfloaterinspect.cpp   gVFS::no   LFS::no
llfloateropenobject.cpp   gVFS::no   LFS::no
llfloaterproperties.cpp   gVFS::no   LFS::no
llfloaterscriptdebug.cpp   gVFS::no   LFS::no
llpreview.cpp   gVFS::no   LFS::no
llpreviewanim.cpp   gVFS::no   LFS::no
llpreviewgesture.cpp
X
gVFS::no   LFS::no
llpreviewgesture.h
X
gVFS::no   LFS::no
llpreviewlandmark.cpp   gVFS::no   LFS::no
llpreviewnotecard.cpp
X
gVFS::no   LFS::no
llpreviewnotecard.h
X
gVFS::no   LFS::no
llpreviewscript.cpp
X
gVFS::no   LFS::no
llpreviewscript.h
X
gVFS::no   LFS::no
llpreviewsound.cpp   gVFS::no   LFS::no
llpreviewtexture.cpp   gVFS::no   LFS::no

User Interface - Avatar Appearance

file VFS gVFS gStaticVFS LFS
llfloaterclothing.cpp   gVFS::no   LFS::no
llfloatercustomize.cpp   gVFS::no   LFS::no
llgenepool.cpp   gVFS::no   LFS::no
llgesturemgr.cpp
X
gVFS::no   LFS::no
llgesturemgr.h
X
gVFS::no   LFS::no
llpanelmorph.cpp   gVFS::no   LFS::no

User Interface - Chat, Instant Messaging, Notices, Reports

file VFS gVFS gStaticVFS LFS
llchatbar.cpp   gVFS::no   LFS::no
llfloaterchat.cpp   gVFS::no   LFS::no
llfloatermute.cpp   gVFS::no   LFS::no
llfloaternewim.cpp   gVFS::no   LFS::no
llfloaterpostcard.cpp
X
gVFS::no   LFS::no
llfloaterreporter.cpp
X
gVFS::no   LFS::no
llgroupmgr.cpp   gVFS::no   LFS::no
llgroupnotify.cpp   gVFS::no   LFS::no
llimpanel.cpp   gVFS::no   LFS::no
llimview.cpp   gVFS::no   LFS::no
lllogchat.cpp   gVFS::no   LFS::no
llmutelist.cpp   gVFS::no   LFS::no

User Interface - Data

file VFS gVFS gStaticVFS LFS
llclassifiedinfo.cpp   gVFS::no   LFS::no
lleventinfo.cpp   gVFS::no   LFS::no
llfloaterabout.cpp   gVFS::no   LFS::no
llfloaterauction.cpp
X
gVFS::no   LFS::no
llfloateravatarinfo.cpp   gVFS::no   LFS::no
llfloatergroupinfo.cpp   gVFS::no   LFS::no
llfloatergroupinvite.cpp   gVFS::no   LFS::no
llfloatergroups.cpp   gVFS::no   LFS::no
llfloaterland.cpp   gVFS::no   LFS::no
llfloaterlandholdings.cpp   gVFS::no   LFS::no
llfloaterregioninfo.cpp
X
gVFS::no   LFS::no
llfloaterregioninfo.h
X
gVFS::no   LFS::no
llfloatertelehub.cpp   gVFS::no   LFS::no
llfloatertos.cpp   gVFS::no   LFS::no
llfloatertos.h
X
gVFS::no   LFS::no
llpanelavatar.cpp   gVFS::no   LFS::no
llpanelclassified.cpp   gVFS::no   LFS::no
llpanelevent.cpp   gVFS::no   LFS::no
llpanelgroup.cpp   gVFS::no   LFS::no
llpanelgroupgeneral.cpp   gVFS::no   LFS::no
llpanelgroupinvite.cpp   gVFS::no   LFS::no
llpanelgrouplandmoney.cpp   gVFS::no   LFS::no
llpanelgroupnotices.cpp   gVFS::no   LFS::no
llpanelgrouproles.cpp   gVFS::no   LFS::no
llpanelgroupvoting.cpp   gVFS::no   LFS::no
llpanelland.cpp   gVFS::no   LFS::no
llpanellandobjects.cpp   gVFS::no   LFS::no
llpanellandoptions.cpp   gVFS::no   LFS::no

User Interface - Data:Inventory

file VFS gVFS gStaticVFS LFS
llcallingcard.cpp   gVFS::no   LFS::no
llfloaterfriends.cpp   gVFS::no   LFS::no
llinventoryactions.cpp   gVFS::no   LFS::no
llinventorybridge.cpp   gVFS::no   LFS::no
llinventoryclipboard.cpp   gVFS::no   LFS::no
llinventorymodel.cpp   gVFS::no   LFS::no
llinventoryview.cpp   gVFS::no   LFS::no
lllandmarklist.cpp
X
gVFS::no   LFS::no
lllandmarklist.h
X
gVFS::no   LFS::no
llviewerinventory.cpp   gVFS::no   LFS::no

User Interface - Data:Money and Land

file VFS gVFS gStaticVFS LFS
llcurrencyuimanager.cpp   gVFS::no   LFS::no
llgivemoney.cpp   gVFS::no   LFS::no
llfloaterbuy.cpp   gVFS::no   LFS::no
llfloaterbuycontents.cpp   gVFS::no   LFS::no
llfloaterbuycurrency.cpp   gVFS::no   LFS::no
llfloaterbuyland.cpp   gVFS::no   LFS::no
llfloatersellland.cpp   gVFS::no   LFS::no

User Interface - Data:Search

file VFS gVFS gStaticVFS LFS
llfloaterdirectory.cpp   gVFS::no   LFS::no
llpaneldirbrowser.cpp   gVFS::no   LFS::no
llpaneldirclassified.cpp   gVFS::no   LFS::no
llpaneldirevents.cpp   gVFS::no   LFS::no
llpaneldirfind.cpp   gVFS::no   LFS::no
llpaneldirgroups.cpp   gVFS::no   LFS::no
llpaneldirland.cpp   gVFS::no   LFS::no
llpaneldirpeople.cpp   gVFS::no   LFS::no
llpaneldirplaces.cpp   gVFS::no   LFS::no
llpaneldirpopular.cpp   gVFS::no   LFS::no
llpanelpick.cpp   gVFS::no   LFS::no
llpanelplace.cpp   gVFS::no   LFS::no

User Interface - Data:Map

llcompass.cpp
file VFS gVFS gStaticVFS LFS
  gVFS::no   LFS::no
llfloatermap.cpp   gVFS::no   LFS::no
llfloaterworldmap.cpp   gVFS::no   LFS::no
llmapresponders.cpp   gVFS::no   LFS::no
llnetmap.cpp   gVFS::no   LFS::no
llworldmap.cpp   gVFS::no   LFS::no
llworldmapview.cpp   gVFS::no   LFS::no

User Interface - Objects and Edit Tools

file VFS gVFS gStaticVFS LFS
llhoverview.cpp   gVFS::no   LFS::no
llmanip.cpp   gVFS::no   LFS::no
llmaniprotate.cpp   gVFS::no   LFS::no
llmanipscale.cpp   gVFS::no   LFS::no
llmaniptranslate.cpp   gVFS::no   LFS::no
llfloaterbuildoptions.cpp   gVFS::no   LFS::no
llfloaterbump.cpp   gVFS::no   LFS::no
llfloatercolorpicker.cpp   gVFS::no   LFS::no
llfloaterpermissionsmgr.cpp   gVFS::no   LFS::no
llfloatertools.cpp   gVFS::no   LFS::no
llpanelcontents.cpp   gVFS::no   LFS::no
llpanelface.cpp   gVFS::no   LFS::no
llpanelgeneral.cpp   gVFS::no   LFS::no
llpanelinventory.cpp   gVFS::no   LFS::no
llpanelobject.cpp   gVFS::no   LFS::no
llpanelpermissions.cpp   gVFS::no   LFS::no
llselectmgr.cpp   gVFS::no   LFS::no
lltool.cpp   gVFS::no   LFS::no
lltoolbar.cpp   gVFS::no   LFS::no
lltoolbrush.cpp   gVFS::no   LFS::no
lltoolcomp.cpp   gVFS::no   LFS::no
lltooldraganddrop.cpp   gVFS::no   LFS::no
lltoolface.cpp   gVFS::no   LFS::no
lltoolfocus.cpp   gVFS::no   LFS::no
lltoolgrab.cpp   gVFS::no   LFS::no
lltoolgun.cpp   gVFS::no   LFS::no
lltoolindividual.cpp   gVFS::no   LFS::no
lltoolmgr.cpp   gVFS::no   LFS::no
lltoolmorph.cpp   gVFS::no   LFS::no
lltoolobjpicker.cpp   gVFS::no   LFS::no
lltoolpie.cpp   gVFS::no   LFS::no
lltoolpipette.cpp   gVFS::no   LFS::no
lltoolplacer.cpp   gVFS::no   LFS::no
lltoolselect.cpp   gVFS::no   LFS::no
lltoolselectland.cpp   gVFS::no   LFS::no
lltoolselectrect.cpp   gVFS::no   LFS::no
lltoolview.cpp   gVFS::no   LFS::no
llviewerparcelmgr.cpp   gVFS::no   LFS::no
llviewerparceloverlay.cpp   gVFS::no   LFS::no

User Interface - HTML

file VFS gVFS gStaticVFS LFS
llfloaterhtml.cpp   gVFS::no   LFS::no
llfloaterhtmlfind.cpp   gVFS::no   LFS::no
llfloaterhtmlhelp.cpp   gVFS::no   LFS::no

User Interface - Import, Export, Upload

file VFS gVFS gStaticVFS LFS
llfloaterimport.cpp   gVFS::no   LFS::no
llfloatersaveavatar.cpp   gVFS::no   LFS::no
llfloatersnapshot.cpp
X
gVFS::no   LFS::no
lluploaddialog.cpp   gVFS::no   LFS::no

User Interface - Menus, Overlays, Login

file VFS gVFS gStaticVFS LFS
llmediaremotectrl.cpp   gVFS::no   LFS::no
llmenucommands.cpp   gVFS::no   LFS::no
llmoveview.cpp   gVFS::no   LFS::no
lloverlaybar.cpp   gVFS::no   LFS::no
llpanellogin.cpp   gVFS::no   LFS::no
llprogressview.cpp   gVFS::no   LFS::no
llviewermenu.cpp
X
gVFS::no   LFS::no
llviewermenufile.cpp
X
gVFS::no   LFS::no

User Interface - Preferences

file VFS gVFS gStaticVFS LFS
llfloaterpreference.cpp   gVFS::no   LFS::no
llpanelaudioprefs.cpp   gVFS::no   LFS::no
llprefschat.cpp   gVFS::no   LFS::no
llprefsim.cpp   gVFS::no   LFS::no
llpaneldisplay.cpp   gVFS::no   LFS::no
llpanelmsgs.cpp   gVFS::no   LFS::no
llpanelnetwork.cpp   gVFS::no   LFS::no
llpanelvolume.cpp   gVFS::no   LFS::no
llpanelweb.cpp   gVFS::no   LFS::no

User Interface - Utility

file VFS gVFS gStaticVFS LFS
llcolorscheme.cpp   gVFS::no   LFS::no
lldirpicker.cpp   gVFS::no   LFS::no
llfilepicker.cpp   gVFS::no   LFS::no
llfloateravatarpicker.cpp   gVFS::no   LFS::no
llfloaternamedesc.cpp   gVFS::no   LFS::no
llsavedsettingsglue.cpp   gVFS::no   LFS::no
llviewchildren.cpp   gVFS::no   LFS::no

User Interface - Widgets

file VFS gVFS gStaticVFS LFS
llcolorswatch.cpp   gVFS::no   LFS::no
llcontainerview.cpp   gVFS::no   LFS::no
llfolderview.cpp   gVFS::no   LFS::no
llnamebox.cpp   gVFS::no   LFS::no
llnameeditor.cpp   gVFS::no   LFS::no
llnamelistctrl.cpp   gVFS::no   LFS::no
lltexturectrl.cpp   gVFS::no   LFS::no
lljoystickbutton.cpp   gVFS::no   LFS::no
llviewertexteditor.cpp   gVFS::no   LFS::no
llvieweruictrlfactory.cpp   gVFS::no   LFS::no
llwebbrowserctrl.cpp   gVFS::no   LFS::no

User Interface - Debug

file VFS gVFS gStaticVFS LFS
llconsole.cpp   gVFS::no   LFS::no
lldebugmessagebox.cpp   gVFS::no   LFS::no
lldebugview.cpp   gVFS::no   LFS::no
llfasttimerview.cpp   gVFS::no   LFS::no
llframestats.cpp   gVFS::no   LFS::no
llframestatview.cpp   gVFS::no   LFS::no
llmemoryview.cpp   gVFS::no   LFS::no
llfloateravatartextures.cpp   gVFS::no   LFS::no
llfloatereditui.cpp   gVFS::no   LFS::no
llfloatergodtools.cpp   gVFS::no   LFS::no
llfloatertest.cpp   gVFS::no   LFS::no
llfloatertopobjects.cpp   gVFS::no   LFS::no
llpaneldebug.cpp   gVFS::no   LFS::no
llstatbar.cpp   gVFS::no   LFS::no
llstatgraph.cpp   gVFS::no   LFS::no
llstatusbar.cpp   gVFS::no   LFS::no
llstatview.cpp   gVFS::no   LFS::no
lltextureview.cpp   gVFS::no   LFS::no
llvelocitybar.cpp   gVFS::no   LFS::no
llviewercontrol.cpp   gVFS::no   LFS::no
llviewerstats.cpp
X
gVFS::no   LFS::no
llviewerstats.h
X
gVFS::no   LFS::no