summaryrefslogtreecommitdiff
path: root/indra/newview/lltexturefetch.cpp
AgeCommit message (Collapse)Author
2011-05-10add debug mode to track the memory allocation/deallocation.Xiaohong Bao
2011-02-23MergeXiaohong Bao
2011-02-23Merge from viewer-developmentXiaohong Bao
2011-02-05Introduces a LLThreadLocalData class that can beAleric Inglewood
accessed through the static LLThread::tldata(). Currently this object contains two (public) thread-local objects: a LLAPRRootPool and a LLVolatileAPRPool. The first is the general memory pool used by this thread (and this thread alone), while the second is intended for short lived memory allocations (needed for APR). The advantages of not mixing those two is that the latter is used most frequently, and as a result of it's nature can be destroyed and reconstructed on a "regular" basis. This patch adds LLAPRPool (completely replacing the old one), which is a wrapper around apr_pool_t* and has complete thread-safity checking. Whenever an apr call requires memory for some resource, a memory pool in the form of an LLAPRPool object can be created with the same life-time as this resource; assuring clean up of the memory no sooner, but also not much later than the life-time of the resource that needs the memory. Many, many function calls and constructors had the pool parameter simply removed (it is no longer the concern of the developer, if you don't write code that actually does an libapr call then you are no longer bothered with memory pools at all). However, I kept the notion of short-lived and long-lived allocations alive (see my remark in the jira here: https://jira.secondlife.com/browse/STORM-864?focusedCommentId=235356&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-235356 which requires that the LLAPRFile API needs to allow the user to specify how long they think a file will stay open. By choosing 'short_lived' as default for the constructor that immediately opens a file, the number of instances where this needs to be specified is drastically reduced however (obviously, any automatic LLAPRFile is short lived). *** Addressed Boroondas remarks in https://codereview.secondlife.com/r/99/ regarding (doxygen) comments. This patch effectively only changes comments. Includes some 'merge' stuff that ended up in llvocache.cpp (while starting as a bug fix, now only resulting in a cleanup). *** Added comment 'The use of apr_pool_t is OK here'. Added this comment on every line where apr_pool_t is correctly being used. This should make it easier to spot (future) errors where someone started to use apr_pool_t; you can just grep all sources for 'apr_pool_t' and immediately see where it's being used while LLAPRPool should have been used. Note that merging this patch is very easy: If there are no other uses of apr_pool_t in the code (one grep) and it compiles, then it will work. *** Second Merge (needed to remove 'delete mCreationMutex' from LLImageDecodeThread::~LLImageDecodeThread). *** Added back #include <apr_pools.h>. Apparently that is needed on libapr version 1.2.8., the version used by Linden Lab, for calls to apr_queue_*. This is a bug in libapr (we also include <apr_queue.h>, that is fixed in (at least) 1.3.7. Note that 1.2.8 is VERY old. Even 1.3.x is old. *** License fixes (GPL -> LGPL). And typo in comments. Addresses merov's comments on the review board. *** Added Merov's compile fixes for windows.
2011-01-29correct DOS line endingsOz Linden
2011-01-21Merge viewer-development-shining up to REV 3bf724ecb7c6 (fix for SH-829: ↵Xiaohong Bao
Viewer attempting to load precached images in file types that are not being used.)
2011-01-06use the private pool in the texture pipelineXiaohong Bao
2010-12-16ESC-237 No static init of LLAtomics and move TFRequest out of unnamed namespace.Monty Brandenberg
Linux startup crash appears to be due to static/global C++ init of LLAtomic types. The initializer with explicit value makes some runtime calls and it looks like these assume, at least on Linux, that apr_initialize() has been called. So move the static POST count to a member and provide accessors and increment/decrement. Command queue was built on a pointer to a class in anonymous namespace and that's not quite valid. Made it a nested class (really a nested forward declaration) while keeping the derived classes in anonymous.
2010-12-15ESC-235 Truncation of over-sized metrics reports wasn't working.Monty Brandenberg
Legacy of the LLSD::Map-to-LLSD::Array conversion, this ended up performing an erase on the array rather than the map taking out all the regions. So, there *was* a metrics report, it was just empty of regions. Fixed and scanned for more array/map problems and corrected the data type for duration sorts (should have been Real).
2010-12-13debug code for SH-639: http requests 3X more in viewer 2.4Xiaohong Bao
2010-12-13Cleanup a cross-thread command dtor. It was technicallyMonty Brandenberg
correct but looked a bit dodgy with pointer ownership.
2010-12-11ESC-211 ESC-212 Use arrays in payload to grid and compact payloadMonty Brandenberg
First, introduced a compact payload format that allows blocks of metrics to be dropped from the viewer->collector payload compressing 1200 bytes of LLSD into about 300, give-or-take. Then converted to using LLSD arrays in the payload to enumerate the regions encountered. This simplifies much data handling from the viewer all the way into the final formatter of the metrics on the grid.
2010-12-10Decided to refactor a bit. Was using LLSD as an internal dataMonty Brandenberg
representation transferring ownership, doing data aggregation in a very pedantic way. That's just adding unneeded cost and complication. Used the same objects to transport data as are collecting it and everything got simpler, faster, easier to read with fewer gotchas. Bit myself *again* doing the min/max/mean merges but the unittests where there to pick me up again. Added a per-region FPS metric while I was at it. This is much asked for and there was a convenient place to sample the value.
2010-12-09merge from http://hg.secondlife.com/viewer-developmentMonty Brandenberg
2010-12-03ESC-211 ESC-222 Viewer/Sim comms and outbound data throttleMonty Brandenberg
Cleaned up some of the messaging code that sends the LLSD stats report off to the viewer. Added WARNS-level messages when there's a problem with delivery that will result in a data break. Users probably won't care. Added an outbound data throttle that limits stats to the 10 regions of longest occupancy. Should be a reasonable first cut.
2010-12-02ESC-211 Metrics data sink - fix delivery by viewerMonty Brandenberg
The TextureFetch thread was still stalling out due to a different path that determines whether there is work or not in the thread (uses getPending()) and that had to be harmonized with the changes to runCondition(). I'm not happy with this solution but a refactor of the LLThread tree isn't in the cards right now.
2010-11-29ESC-154 ESC-156 Now using region hash rather than region uuid as identifier.Monty Brandenberg
In the viewer, the region's UUID is acquired very late and isn't generally used as the canonical region identifier. The U64 region hash is a better and more consistently used identifier so I'm moving over to using that as the region key. Don't have a proper reserved invalid region hash which is unfortunate, but then, so much is.
2010-11-24ESC-154 ESC-155 Viewer metrics fixes for min/max merged values, floating ↵Monty Brandenberg
timestamps. The min/max response time calculations needed to be sensitive to the response counts to know if their was actual data. Failure to do so introduced a gratuitous min/max test against zero values which tended to corrupt the mins. Unit tests added to test for this condition. Finished conversion of times to floating point seconds. Removed two logging events used to debug the cross-thread messaging. Looks like a code completion point.
2010-11-24ESC-154 ESC-156 Metrics integration across threadsMonty Brandenberg
Using unpause() method in derived class rather than wake() in furthest base class solved the stalling problem. I still think too many levels of the LLTextureFetch hierarchy are keeping thread state, however. The LLViewerRegion instance an agent enters doesn't necessarily have its region_id yet, that only comes after the handshake, if any. So add a few more metrics insertion points to propagate region into metrics. Finally, try to launch a final metrics report when a quit is initiated.
2010-11-23ESC-154 ESC-156 Integrating metrics collector into viewer.Monty Brandenberg
After discussions, renamed 'QAModeMetricsSubmetrics' to 'QAModeMetrics' and confirmed that LLCachedControl<> is the way to go. Moved the resulting flag out of LLViewerAssetStats (where it didn't belong) and it lives in both LLAppViewer and LLTextureFetch where it does belong.
2010-11-23ESC-154 ESC-156 Data collection and control for viewer metricsMonty Brandenberg
Detect QAMode (and new QAModeMetricsSubmode) settings which enable logging of metrics report locally and a faster cycle time to reduce test waiting. Do this only in the main thread and propagate the result via collector constructors (will likely move that out and put it in llappviewer/lltexturefetch which is more correct scope). Managed to deadlock myself with a recursive mutex (sheesh).
2010-11-22ESC-154 ESC-156 Metrics integration into viewer's threadsMonty Brandenberg
Removed declared but undefined interfaces from LLTextureFetch family. Had inserted the cross-thread command processor into some of LLTextureFetchWorker's processing which was unnatural and probably wrong. Moved it to LLTextureFetch which turned out to be far, far more natural. Better documentation on the asLLSD() format. Refined LLSD stats merger logic and enhanced unit tests to verify same.
2010-11-19ESC-155 Multi-threaded umbrella collector for stats aggregationMonty Brandenberg
Code complete with the intelligence to merge counts, mins, maxes and means with reasonable defences. Added QAMode controls to the viewer so that we can QA this more quickly by reducing the timing interval and sending the metrics body to local logging as well as to the caps service.
2010-11-18ESC-154 ESC-155 ESC-156Monty Brandenberg
Asset fetch requests wrapped to allow for measurements. Asset fetch enqueues, dequeues and completion times recorded to asset stats collector. Texture fetch operations (http and udp) recorded to asset stats collector. Stats collector time vallue switched from F32 to U64 which is the more common type in the viewer. Cross-thread mechanism introduced to communicate region changes and generate global statistics messages. Facility to deliver metrics via Capabilities sketched in but needs additional work. Documentation and diagrams added.
2010-11-04merge with viewer-developmentMerov Linden
2010-10-12Pull update from viewer-developmentMerov Linden
2010-09-22fix for SH-173/VWR-22868: Development Viewer freezes just after startup / ↵Xiaohong Bao
greedy with file handles / 'WARNING: ll_apr_warn_status: APR: Too many open files' (transplanted from a9aefa70c029eb9dddec3833d0ce22ef4b4421b5)
2010-09-22fix for SH-173/VWR-22868: Development Viewer freezes just after startup / ↵Xiaohong Bao
greedy with file handles / 'WARNING: ll_apr_warn_status: APR: Too many open files'
2010-09-17STORM-105 : Add compression data gathering, took partial decompression into ↵Merov Linden
account in stats
2010-09-16debug code for SH-115: investigate texture related network traffic between ↵Xiaohong Bao
viewer 2.x and 1.23.
2010-08-24Backed out changeset c3d41f18ce2bTofu Linden
back-out the back-out for this branch. yay.
2010-08-24Backed out changeset a62bf7c0af21Tofu Linden
Backing out this merge that I pushed (prematurely) to the wrong place.
2010-08-24merge heads. whew.Tofu Linden
2010-08-18EXT-8673: FIXED: UDP texture loading is slower in 2.x viewers than 1.23.5Xiaohong Bao
Improved the following: 1, make sure the texture callback queue is properly handled and cleaned in time; 2, estimate the LLVOTree pixel area more accurately; 3, eliminate the possibility of back and forth stopping/restarting a texture fetching
2010-08-13Change license from GPL to LGPL (version 2.1)Oz Linden
2010-08-11fix for EXT-7399: 2.0.2 with http textures loads textures slower than 1.23.5 andXiaohong Bao
EXT-7397: decoding textures get stuck in REQ status
2010-08-10EXT-7399: FIXED: 2.0.2 with http textures loads textures slower than 1.23.5Xiaohong Bao
2010-08-09EXT-8596: FIXED: crash at LLTextureFetchWorker::doWork(int) [secondlife-bin ↵Xiaohong Bao
lltexturefetch.cpp] line 1061
2010-08-04more fix for EXT-7397: decoding textures get stuck in REQ statusXiaohong Bao
2010-08-03Automated merge with ssh://hg.lindenlab.com/q/viewer-releaseXiaohong Bao
2010-08-03fix for EXT-7399: 2.0.2 with http textures loads textures slower than 1.23.5Xiaohong Bao
and EXT-7397: decoding textures get stuck in REQ status
2010-07-22EXT-7145 - Handle http redirects in viewer properly. Didn't work before.Palmer
Reviewed by Bao and Babbage
2010-06-16EXT-7032: POSSIBLE FIXED: [crashhunters] crash in libcurl background thread ↵Xiaohong Bao
on windows
2010-06-16EXT-6567: POSSIBLE FIXED: crash at LLImageBase::allocateData [secondlife-bin ↵Xiaohong Bao
llimage.cpp:170]; also removed the debug code for this bug.
2010-06-07merge backoutTofu Linden
2010-06-07EXT-7145: FIXED: make viewer to handle "URL redirect " for http texture.Tofu Linden
Backed out changeset e6feef9704cf to re-introduce Bao's fix
2010-06-03EXT-7630: FIXED: turn on http texture fetching by default.Xiaohong Bao
2010-05-28Automated merge with ssh://hg.lindenlab.com/dessie/viewer-publicXiaohong Bao
2010-05-28A possible fix for EXT-7032: [crashhunters] crash in libcurl background ↵Xiaohong Bao
thread on windows. killed accessing the asset server for map textures after http returns 404.
2010-05-24Backed out changeset 57e00f7d4d4fTofu Linden
(was: EXT-7145: FIXED: make viewer to handle "URL redirect " for http texture.) This was causing osx/linux build failure.