diff options
| -rw-r--r-- | indra/newview/llappviewer.cpp | 81 | ||||
| -rw-r--r-- | indra/newview/viewer_manifest.py | 63 | 
2 files changed, 120 insertions, 24 deletions
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index b6f52e3e15..2a4c068177 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -45,6 +45,7 @@  #include "llwindow.h"  #include "llviewerstats.h"  #include "llmd5.h" +#include "llmeshrepository.h"  #include "llpumpio.h"  #include "llmimetypes.h"  #include "llslurl.h" @@ -74,6 +75,8 @@  #include "llteleporthistory.h"  #include "lllocationhistory.h"  #include "llfasttimerview.h" +#include "llvector4a.h" +#include "llviewermenufile.h"  #include "llvoicechannel.h"  #include "llvoavatarself.h"  #include "llsidetray.h" @@ -196,7 +199,6 @@  // Include for security api initialization  #include "llsecapi.h"  #include "llmachineid.h" -  #include "llmainlooprepeater.h"  // *FIX: These extern globals should be cleaned up. @@ -302,7 +304,7 @@ BOOL gLogoutInProgress = FALSE;  ////////////////////////////////////////////////////////////  // Internal globals... that should be removed. -static std::string gArgs; +static std::string gArgs = "Mesh Beta";  const std::string MARKER_FILE_NAME("SecondLife.exec_marker");  const std::string ERROR_MARKER_FILE_NAME("SecondLife.error_marker"); @@ -514,7 +516,7 @@ public:  	std::string mFile;  	LLFastTimerLogThread(std::string& test_name) : LLThread("fast timer log") -	{ + 	{  		std::string file_name = test_name + std::string(".slp");  		mFile = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, file_name);  	} @@ -532,7 +534,6 @@ public:  		os.close();  	} -  };  //virtual @@ -611,6 +612,9 @@ bool LLAppViewer::init()  	//  	LLFastTimer::reset(); +	// initialize SSE options +	LLVector4a::initClass(); +  	// Need to do this initialization before we do anything else, since anything  	// that touches files should really go through the lldir API  	gDirUtilp->initAppDirs("SecondLife"); @@ -808,7 +812,7 @@ bool LLAppViewer::init()  	// Initialize the repeater service.  	LLMainLoopRepeater::instance().start(); -	 +  	//  	// Initialize the window  	// @@ -905,8 +909,7 @@ bool LLAppViewer::init()  	gDebugInfo["GraphicsCard"] = LLFeatureManager::getInstance()->getGPUString();  	// Save the current version to the prefs file -	gSavedSettings.setString("LastRunVersion",  -							 LLVersionInfo::getVersionAndChannel()); +	gSavedSettings.setString("LastRunVersion", LLVersionInfo::getVersionAndChannel());  	gSimLastTime = gRenderStartTime.getElapsedTimeF32();  	gSimFrames = (F32)gFrameCount; @@ -981,7 +984,7 @@ bool LLAppViewer::mainLoop()  	gServicePump = new LLPumpIO(gAPRPoolp);  	LLHTTPClient::setPump(*gServicePump);  	LLCurl::setCAFile(gDirUtilp->getCAFile()); -	 +  	// Note: this is where gLocalSpeakerMgr and gActiveSpeakerMgr used to be instantiated.  	LLVoiceChannel::initClass(); @@ -1315,6 +1318,20 @@ bool LLAppViewer::cleanup()  	// workaround for DEV-35406 crash on shutdown  	LLEventPumps::instance().reset(); +	if (LLFastTimerView::sAnalyzePerformance) +	{ +		llinfos << "Analyzing performance" << llendl; +		std::string baseline_name = LLFastTimer::sLogName + "_baseline.slp"; +		std::string current_name  = LLFastTimer::sLogName + ".slp";  +		std::string report_name   = LLFastTimer::sLogName + "_report.csv"; + +		LLFastTimerView::doAnalysis( +			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name), +			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, current_name), +			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, report_name));		 +	} +	LLMetricPerformanceTesterBasic::cleanClass(); +  	// remove any old breakpad minidump files from the log directory  	if (! isError())  	{ @@ -1363,6 +1380,9 @@ bool LLAppViewer::cleanup()  	llinfos << "Cleaning Up" << llendflush; +	// shut down mesh streamer +	gMeshRepo.shutdown(); +  	// Must clean up texture references before viewer window is destroyed.  	if(LLHUDManager::instanceExists())  	{ @@ -1641,6 +1661,8 @@ bool LLAppViewer::cleanup()  	sTextureFetch->shutDownTextureCacheThread() ;  	sTextureFetch->shutDownImageDecodeThread() ; +	LLFilePickerThread::cleanupClass(); +  	delete sTextureCache;      sTextureCache = NULL;  	delete sTextureFetch; @@ -1662,7 +1684,8 @@ bool LLAppViewer::cleanup()  			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, baseline_name),  			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, current_name),  			gDirUtilp->getExpandedFilename(LL_PATH_LOGS, report_name)); -	} +	}	 +  	LLMetricPerformanceTesterBasic::cleanClass() ;  	llinfos << "Cleaning up Media and Textures" << llendflush; @@ -1779,6 +1802,11 @@ bool LLAppViewer::initThreads()  		mFastTimerLogThread->start();  	} +	// Mesh streaming and caching +	gMeshRepo.init(); + +	LLFilePickerThread::initClass(); +  	// *FIX: no error handling here!  	return true;  } @@ -1974,6 +2002,8 @@ bool LLAppViewer::initConfiguration()  	gSavedSettings.setString("ClientSettingsFile",           gDirUtilp->getExpandedFilename(LL_PATH_USER_SETTINGS, getSettingsFilename("Default", "Global"))); +	gSavedSettings.setString("VersionChannelName", LLVersionInfo::getChannel()); +  #ifndef	LL_RELEASE_FOR_DOWNLOAD  	// provide developer build only overrides for these control variables that are not  	// persisted to settings.xml @@ -2118,7 +2148,6 @@ bool LLAppViewer::initConfiguration()      {  		LLVersionInfo::resetChannel(clp.getOption("channel")[0]);  	} -	  	// If we have specified crash on startup, set the global so we'll trigger the crash at the right time  	if(clp.hasOption("crashonstartup")) @@ -2129,12 +2158,12 @@ bool LLAppViewer::initConfiguration()  	if (clp.hasOption("logperformance"))  	{  		LLFastTimer::sLog = TRUE; -		LLFastTimer::sLogName = std::string("performance"); +		LLFastTimer::sLogName = std::string("performance");		  	}  	if (clp.hasOption("logmetrics")) -	{ -		LLFastTimer::sMetricLog = TRUE ; + 	{ + 		LLFastTimer::sMetricLog = TRUE ;  		// '--logmetrics' can be specified with a named test metric argument so the data gathering is done only on that test  		// In the absence of argument, every metric is gathered (makes for a rather slow run and hard to decipher report...)  		std::string test_name = clp.getOption("logmetrics")[0]; @@ -2148,7 +2177,7 @@ bool LLAppViewer::initConfiguration()  		{  			LLFastTimer::sLogName = test_name;  		} -	} + 	}  	if (clp.hasOption("graphicslevel"))  	{ @@ -2389,10 +2418,10 @@ bool LLAppViewer::initConfiguration()  }  namespace { -    // *TODO - decide if there's a better place for this function. -    // do we need a file llupdaterui.cpp or something? -brad -    bool notify_update(LLSD const & evt) -    { +	// *TODO - decide if there's a better place for this function. +	// do we need a file llupdaterui.cpp or something? -brad +	bool notify_update(LLSD const & evt) +	{  		switch (evt["type"].asInteger())  		{  			case LLUpdaterService::DOWNLOAD_COMPLETE: @@ -2407,8 +2436,8 @@ namespace {  		}  		// let others also handle this event by default -        return false; -    } +		return false; +	}  };  void LLAppViewer::initUpdater() @@ -2543,6 +2572,7 @@ bool LLAppViewer::initWindow()  		gSavedSettings.saveToFile( gSavedSettings.getString("ClientSettingsFile"), TRUE );  		gPipeline.init(); +		  		stop_glerror();  		gViewerWindow->initGLDefaults(); @@ -2606,7 +2636,7 @@ void LLAppViewer::cleanupSavedSettings()  		if (!maximized)  		{  			LLCoordScreen window_pos; - +			  			if (gViewerWindow->mWindow->getPosition(&window_pos))  			{  				gSavedSettings.setS32("WindowX", window_pos.mX); @@ -3622,6 +3652,8 @@ static LLFastTimer::DeclareTimer FTM_OBJECTLIST_UPDATE("Update Objectlist");  static LLFastTimer::DeclareTimer FTM_REGION_UPDATE("Update Region");  static LLFastTimer::DeclareTimer FTM_WORLD_UPDATE("Update World");  static LLFastTimer::DeclareTimer FTM_NETWORK("Network"); +static LLFastTimer::DeclareTimer FTM_AGENT_NETWORK("Agent Network"); +static LLFastTimer::DeclareTimer FTM_VLMANAGER("VL Manager");  ///////////////////////////////////////////////////////  // idle() @@ -3642,6 +3674,8 @@ void LLAppViewer::idle()  	LLEventTimer::updateClass();  	LLCriticalDamp::updateInterpolants();  	LLMortician::updateClass(); +	LLFilePickerThread::clearDead();  //calls LLFilePickerThread::notify() +  	F32 dt_raw = idle_timer.getElapsedTimeAndResetF32();  	// Cap out-of-control frame times @@ -4190,6 +4224,11 @@ static F32 CheckMessagesMaxTime = CHECK_MESSAGES_DEFAULT_MAX_TIME;  #endif  static LLFastTimer::DeclareTimer FTM_IDLE_NETWORK("Idle Network"); +static LLFastTimer::DeclareTimer FTM_MESSAGE_ACKS("Message Acks"); +static LLFastTimer::DeclareTimer FTM_RETRANSMIT("Retransmit"); +static LLFastTimer::DeclareTimer FTM_TIMEOUT_CHECK("Timeout Check"); +static LLFastTimer::DeclareTimer FTM_DYNAMIC_THROTTLE("Dynamic Throttle"); +static LLFastTimer::DeclareTimer FTM_CHECK_REGION_CIRCUIT("Check Region Circuit");  void LLAppViewer::idleNetwork()  { diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 6c77f8ec38..3003617b37 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -248,13 +248,12 @@ class WindowsManifest(ViewerManifest):          self.disable_manifest_check()          self.path(src="../viewer_components/updater/scripts/windows/update_install.bat", dst="update_install.bat") -          # Get shared libs from the shared libs staging directory          if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),                         dst=""):              self.enable_crt_manifest_check() - +                          # Get kdu dll, continue if missing.              try:                  self.path('llkdu.dll', dst='llkdu.dll') @@ -267,12 +266,26 @@ class WindowsManifest(ViewerManifest):                  self.path('libapr-1.dll')                  self.path('libaprutil-1.dll')                  self.path('libapriconv-1.dll') +                              except RuntimeError, err:                  print err.message                  print "Skipping llcommon.dll (assuming llcommon was linked statically)"              self.disable_manifest_check() +            # Mesh 3rd party libs needed for auto LOD and collada reading +            try: +                if self.args['configuration'].lower() == 'debug': +                    self.path("libcollada14dom21-d.dll") +                else: +                    self.path("libcollada14dom21.dll") +                     +                self.path("glod.dll") +            except RuntimeError, err: +                print err.message +                print "Skipping COLLADA and GLOD libraries (assumming linked statically)" + +              # Get fmod dll, continue if missing              try:                  self.path("fmod.dll") @@ -324,7 +337,7 @@ class WindowsManifest(ViewerManifest):          self.path("dbghelp.dll")          self.enable_no_crt_manifest_check() -         +          # Media plugins - QuickTime          if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):              self.path("media_plugin_quicktime.dll") @@ -646,6 +659,8 @@ class DarwinManifest(ViewerManifest):                                      "libaprutil-1.0.3.8.dylib",                                      "libexpat.0.5.0.dylib",                                      "libexception_handler.dylib", +                                    "libGLOD.dylib", +                                    "libcollada14dom.dylib"                                      ):                          self.path(os.path.join(libdir, libfile), libfile) @@ -672,6 +687,8 @@ class DarwinManifest(ViewerManifest):                                      "libaprutil-1.0.3.8.dylib",                                      "libexpat.0.5.0.dylib",                                      "libexception_handler.dylib", +                                    "libGLOD.dylib", +				    "libcollada14dom.dylib"                                      ):                          target_lib = os.path.join('../../..', libfile)                          self.run_command("ln -sf %(target)r %(link)r" %  @@ -711,6 +728,7 @@ class DarwinManifest(ViewerManifest):              self.run_command('strip -S %(viewer_binary)r' %                               { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')}) +      def copy_finish(self):          # Force executable permissions to be set for scripts          # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802 @@ -939,6 +957,36 @@ class Linux_i686Manifest(LinuxManifest):                    dst='bin/libllkdu.so')          except:              print "Skipping libllkdu.so - not found" +        for lib, destdir in ("llkdu", "bin"), ("llcommon", "lib"): +            libfile = "lib%s.so" % lib +            try: +                self.path(self.find_existing_file(os.path.join(os.pardir, lib, libfile), +                    '../../libraries/i686-linux/lib_release_client/%s' % libfile),  +                      dst=os.path.join(destdir, libfile)) +                # keep this one to preserve syntax, open source mangling removes previous lines +                pass +            except RuntimeError: +                print "Skipping %s - not found" % libfile +                pass + +        self.path("secondlife-bin","bin/do-not-directly-run-secondlife-bin") + +        self.path("../linux_crash_logger/linux-crash-logger","bin/linux-crash-logger.bin") +        self.path("../linux_updater/linux-updater", "bin/linux-updater.bin") +        self.path("../llplugin/slplugin/SLPlugin", "bin/SLPlugin") +        if self.prefix("res-sdl"): +            self.path("*") +            # recurse +            self.end_prefix("res-sdl") + +        # plugins +        if self.prefix(src="", dst="bin/llplugin"): +            self.path("../media_plugins/webkit/libmedia_plugin_webkit.so", "libmedia_plugin_webkit.so") +            self.path("../media_plugins/gstreamer010/libmedia_plugin_gstreamer010.so", "libmedia_plugin_gstreamer.so") +            self.end_prefix("bin/llplugin") + +        self.path("featuretable_linux.txt") +        #self.path("secondlife-i686.supp")          if self.prefix("../../libraries/i686-linux/lib_release_client", dst="lib"):              self.path("libapr-1.so.0") @@ -946,7 +994,9 @@ class Linux_i686Manifest(LinuxManifest):              self.path("libbreakpad_client.so.0.0.0", "libbreakpad_client.so.0")              self.path("libdb-4.2.so")              self.path("libcrypto.so.0.9.7") +            self.path("libuuid.so.1")              self.path("libexpat.so.1") +            self.path("libglod.so")              self.path("libssl.so.0.9.7")              self.path("libuuid.so.1")              self.path("libSDL-1.2.so.0") @@ -955,6 +1005,8 @@ class Linux_i686Manifest(LinuxManifest):              self.path("libalut.so")              self.path("libopenal.so", "libopenal.so.1")              self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname +            self.path("libtcmalloc_minimal.so", "libtcmalloc_minimal.so") #formerly called google perf tools +            self.path("libtcmalloc_minimal.so.0", "libtcmalloc_minimal.so.0") #formerly called google perf tools              try:                      self.path("libkdu.so")                      pass @@ -981,6 +1033,11 @@ class Linux_i686Manifest(LinuxManifest):                      self.path("libvivoxplatform.so")                      self.end_prefix("lib") +            if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer(): +                    print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" +                    self.run_command("find %(d)r/bin %(d)r/lib -type f | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure + +  class Linux_x86_64Manifest(LinuxManifest):      def construct(self):          super(Linux_x86_64Manifest, self).construct()  | 
