LLViewerApp

From Second Life Wiki
Jump to navigation Jump to search

Objectives

  • Improve the stability and maintainability of the Second Life Viewer code by cleaning up the initialization and main loop code
  • Move the main loop to a separate thread so that infinite loops can be detected and debugged

See Also

Tasks

Phase 1

  • Create a LLViewerApp class based on LLApp
    • Move class initialization and parameter parsing to LLViewerApp
    • Move all error handling to LLViewerApp (errors set a flag and sleep, LLViewerApp generates the exception)
    • Move all debug/info/warning/error text printing to LLViewerApp
      • Print text to a buffer instead of stdio
      • Send the buffer to stdio in LLViewerApp loop
      • Use a proper window for viewing console text in the Viewer
      • Move unheeded warnings to debugs
      • Clean up info messages
  • Create a LLViewerThread class based on LLThread
    • Move the main loop into LLViewerThread
  • Eliminate viewer.cpp
    • Create proper C++ abstractions for any remaining code in viewer.cpp
  • Add a 'watchdog' to LLViewerApp to detect infinite loops and trigger a crash
    • Ensure that the crash handler generates proper stack information for LLViewerThread
    • Add a 'Debug > Test > Force Crash', 'Force Infinite Loop', and 'Force Deadlock' debug options

Test Plan

  • Run Second Life on all platforms. Include all available hardware configurations (Intel, AMD, PPC, single processor, dual core, dual processor)
    • Run frame rate tests and ensure that frame rate is at least 95% of current client's frame rate
  • Force a crash using the debug option. Make sure that a crash report is sent.
  • Force an infinite loop using the debug option. Make sure that a crash report is sent.
  • Force a deadlock using the debug option. Make sure that a crash report is sent.
  • Use Client > Console > Debug Console to view debug messages while running
    • Ensure that they get displayed in order
  • Scan the log file after a session and look for any warnings.
    • Report any warnings that show up.
    • Check for any unhelpful info messages

Phase 2

LLViewerLogin

  • Abstract the login sequence into a class

Eliminate startup.cpp

  • Create proper C++ abstractions for startup using LLViewerLogin

Lightweight Client

  • Create a client that logs in to Second Life without running the 3D render pipeline