Merge pull request #3232 from Karlson2k/Startup_log_03
authorMartijn Kaijser <machine.sanctum@gmail.com>
Tue, 1 Oct 2013 05:10:23 +0000 (22:10 -0700)
committerMartijn Kaijser <machine.sanctum@gmail.com>
Tue, 1 Oct 2013 05:10:23 +0000 (22:10 -0700)
Put even more information in startup log

1  2 
xbmc/Application.cpp
xbmc/utils/SystemInfo.cpp
xbmc/utils/SystemInfo.h

diff --combined xbmc/Application.cpp
@@@ -92,6 -92,7 +92,6 @@@
  #include "settings/MediaSettings.h"
  #include "settings/MediaSourceSettings.h"
  #include "settings/SkinSettings.h"
 -#include "settings/Settings.h"
  #include "guilib/LocalizeStrings.h"
  #include "utils/CPUInfo.h"
  #include "utils/RssManager.h"
  #include "utils/Weather.h"
  #include "DatabaseManager.h"
  
 -#include "settings/DisplaySettings.h"
 -#include "settings/MediaSettings.h"
 -#include "settings/SkinSettings.h"
 -#include "view/ViewStateSettings.h"
 -
  #ifdef TARGET_POSIX
  #include "XHandle.h"
  #endif
@@@ -635,7 -641,8 +635,8 @@@ bool CApplication::Create(
    CProfilesManager::Get().Load();
  
    CLog::Log(LOGNOTICE, "-----------------------------------------------------------------------");
-   CLog::Log(LOGNOTICE, "Starting XBMC (%s). Platform: %s", g_infoManager.GetVersion().c_str(), g_sysinfo.GetBuildTargetPlatformName().c_str());
+   CLog::Log(LOGNOTICE, "Starting XBMC (%s). Platform: %s %s %d-bit", g_infoManager.GetVersion().c_str(), g_sysinfo.GetBuildTargetCpuFamily().c_str(),
+       g_sysinfo.GetBuildTargetPlatformName().c_str(), g_sysinfo.GetXbmcBitness());
  
  /* Expand macro before stringify */
  #define STR_MACRO(x) #x
  #else
    buildType = "Unknown";
  #endif
-   CLog::Log(LOGNOTICE, "Using %s XBMC build, compiled " __DATE__ " by %s for %s %s", buildType.c_str(), compilerStr.c_str(), g_sysinfo.GetBuildTargetPlatformName().c_str(), g_sysinfo.GetBuildTargetPlatformVersion().c_str());
+   CLog::Log(LOGNOTICE, "Using %s XBMC x%d build, compiled " __DATE__ " by %s for %s %s %d-bit %s", buildType.c_str(), g_sysinfo.GetXbmcBitness(), compilerStr.c_str(),
+       g_sysinfo.GetBuildTargetCpuFamily().c_str(), g_sysinfo.GetBuildTargetPlatformName().c_str(), g_sysinfo.GetXbmcBitness(), g_sysinfo.GetBuildTargetPlatformVersion().c_str());
  
  #if defined(TARGET_DARWIN_OSX)
-   CLog::Log(LOGNOTICE, "Running on Darwin OSX %s", g_sysinfo.GetUnameVersion().c_str());
+   CLog::Log(LOGNOTICE, "Running on Darwin OSX %d-bit %s", g_sysinfo.GetKernelBitness(), g_sysinfo.GetUnameVersion().c_str());
  #elif defined(TARGET_DARWIN_IOS)
-   CLog::Log(LOGNOTICE, "Running on Darwin iOS%s %s", g_sysinfo.IsAppleTV2() ? " (AppleTV2)" : "", g_sysinfo.GetUnameVersion().c_str());
+   CLog::Log(LOGNOTICE, "Running on Darwin iOS %d-bit %s%s", g_sysinfo.GetKernelBitness(), g_sysinfo.IsAppleTV2() ? "(AppleTV2) " : "", g_sysinfo.GetUnameVersion().c_str());
  #elif defined(TARGET_FREEBSD)
-   CLog::Log(LOGNOTICE, "Running on FreeBSD %s", g_sysinfo.GetUnameVersion().c_str());
+   CLog::Log(LOGNOTICE, "Running on FreeBSD %d-bit %s", g_sysinfo.GetKernelBitness(), g_sysinfo.GetUnameVersion().c_str());
  #elif defined(TARGET_POSIX)
-   CLog::Log(LOGNOTICE, "Running on Linux (%s, %s)", g_sysinfo.GetLinuxDistro().c_str(), g_sysinfo.GetUnameVersion().c_str());
+   CLog::Log(LOGNOTICE, "Running on Linux %d-bit (%s, %s)", g_sysinfo.GetKernelBitness(), g_sysinfo.GetLinuxDistro().c_str(), g_sysinfo.GetUnameVersion().c_str());
  #elif defined(TARGET_WINDOWS)
    CLog::Log(LOGNOTICE, "Running on %s", g_sysinfo.GetKernelVersion().c_str());
  #endif
    
-   CLog::Log(LOGNOTICE, "Host CPU: %s", g_cpuInfo.getCPUModel().c_str());
+   CLog::Log(LOGNOTICE, "Host CPU: %s, %d core%s available", g_cpuInfo.getCPUModel().c_str(), g_cpuInfo.getCPUCount(), (g_cpuInfo.getCPUCount()==1) ? "" : "s");
  #if defined(TARGET_WINDOWS)
    CLog::Log(LOGNOTICE, "%s", CWIN32Util::GetResInfoString().c_str());
    CLog::Log(LOGNOTICE, "Running with %s rights", (CWIN32Util::IsCurrentUserLocalAdministrator() == TRUE) ? "administrator" : "restricted");
  
    CLog::Log(LOGINFO, "load language info file: %s", strLangInfoPath.c_str());
    g_langInfo.Load(strLangInfoPath);
 +  g_langInfo.SetAudioLanguage(CSettings::Get().GetString("locale.audiolanguage"));
 +  g_langInfo.SetSubtitleLanguage(CSettings::Get().GetString("locale.subtitlelanguage"));
  
    CStdString strLanguagePath = "special://xbmc/language/";
  
@@@ -1569,7 -1575,7 +1571,7 @@@ void CApplication::OnSettingChanged(con
    if (settingId == "lookandfeel.skin" ||
        settingId == "lookandfeel.font" ||
        settingId == "lookandfeel.skincolors")
 -    ReloadSkin();
 +    CApplicationMessenger::Get().ExecBuiltIn("ReloadSkin");
    else if (settingId == "lookandfeel.skintheme")
    {
      // also set the default color theme
      if (!StringUtils::EqualsNoCase(colorTheme, CSettings::Get().GetString("lookandfeel.skincolors")))
        CSettings::Get().SetString("lookandfeel.skincolors", colorTheme);
      else
 -      ReloadSkin();
 +      CApplicationMessenger::Get().ExecBuiltIn("ReloadSkin");
    }
    else if (settingId == "lookandfeel.skinzoom")
      g_windowManager.SendMessage(GUI_MSG_NOTIFY_ALL, 0, 0, GUI_MSG_WINDOW_RESIZE);
 -  else if (StringUtils::StartsWith(settingId, "audiooutput."))
 +  else if (StringUtils::StartsWithNoCase(settingId, "audiooutput."))
    {
      if (settingId == "audiooutput.guisoundmode")
      {
@@@ -1770,7 -1776,7 +1772,7 @@@ void CApplication::LoadSkin(const SkinP
    if (!skin)
    {
      CLog::Log(LOGERROR, "failed to load requested skin, fallback to \"%s\" skin", defaultSkin.c_str());
 -    CSettings::Get().SetString("lookandfeel.skin", defaultSkin);
 +    CSettings::Get().GetSetting("lookandfeel.skin")->Reset();
      return ;
    }
  
      if (strcmpi(skin->ID().c_str(), defaultSkin.c_str()) != 0)
      {
        CLog::Log(LOGERROR, "home.xml doesn't exist in skin: %s, fallback to \"%s\" skin", skin->ID().c_str(), defaultSkin.c_str());
 -      CSettings::Get().SetString("lookandfeel.skin", defaultSkin);
 -      LoadSkin(defaultSkin);
 +      CSettings::Get().GetSetting("lookandfeel.skin")->Reset();
        CGUIDialogKaiToast::QueueNotification(CGUIDialogKaiToast::Error, g_localizeStrings.Get(24102), g_localizeStrings.Get(24103));
        return ;
      }
@@@ -2226,13 -2233,13 +2228,13 @@@ bool CApplication::OnKey(const CKey& ke
    m_idleTimer.StartZero();
    bool processKey = AlwaysProcess(action);
  
 -  if (StringUtils::StartsWith(action.GetName(),"CECToggleState") || StringUtils::StartsWith(action.GetName(),"CECStandby"))
 +  if (StringUtils::StartsWithNoCase(action.GetName(),"CECToggleState") || StringUtils::StartsWithNoCase(action.GetName(),"CECStandby"))
    {
      bool ret = true;
  
      CLog::Log(LOGDEBUG, "%s: action %s [%d], toggling state of playing device", __FUNCTION__, action.GetName().c_str(), action.GetID());
      // do not wake up the screensaver right after switching off the playing device
 -    if (StringUtils::StartsWith(action.GetName(),"CECToggleState"))
 +    if (StringUtils::StartsWithNoCase(action.GetName(),"CECToggleState"))
        ret = CApplicationMessenger::Get().CECToggleState();
      else
        ret = CApplicationMessenger::Get().CECStandby();
@@@ -3371,6 -3378,9 +3373,6 @@@ void CApplication::Stop(int exitCode
  
      SaveFileState(true);
  
 -    // cancel any jobs from the jobmanager
 -    CJobManager::GetInstance().CancelJobs();
 -
      g_alarmClock.StopThread();
  
      if( m_bSystemScreenSaverEnable )
      m_ExitCode = exitCode;
      CLog::Log(LOGNOTICE, "stop all");
  
 +    // cancel any jobs from the jobmanager
 +    CJobManager::GetInstance().CancelJobs();
 +
      // stop scanning before we kill the network and so on
      if (m_musicInfoScanner->IsScanning())
        m_musicInfoScanner->Stop();
@@@ -47,9 -47,6 +47,9 @@@
  #include "powermanagement/PowerManager.h"
  #include "utils/StringUtils.h"
  #include "utils/XMLUtils.h"
 +#if defined(TARGET_ANDROID)
 +#include "android/jni/Build.h"
 +#endif
  
  /* Target identification */
  #if defined(TARGET_DARWIN)
@@@ -367,40 -364,20 +367,40 @@@ CStdString CSysInfo::GetCPUSerial(
    return "Serial: " + g_cpuInfo.getCPUSerial();
  }
  
 +CStdString CSysInfo::GetManufacturer()
 +{
 +  CStdString manufacturer = "";
 +#if defined(TARGET_ANDROID)
 +  manufacturer = CJNIBuild::MANUFACTURER;
 +#endif
 +  return manufacturer;
 +}
 +
 +CStdString CSysInfo::GetModel()
 +{
 +  CStdString model = "";
 +#if defined(TARGET_ANDROID)
 +  model = CJNIBuild::MODEL;
 +#endif
 +  return model;
 +}
 +
 +CStdString CSysInfo::GetProduct()
 +{
 +  CStdString product = "";
 +#if defined(TARGET_ANDROID)
 +  product = CJNIBuild::PRODUCT;
 +#endif
 +  return product;
 +}
 +
  bool CSysInfo::IsAeroDisabled()
  {
  #ifdef TARGET_WINDOWS
 -  if (IsWindowsVersionAtLeast(CSysInfo::WindowsVersionVista))
 -  {
 -    BOOL aeroEnabled = FALSE;
 -    HRESULT res = DwmIsCompositionEnabled(&aeroEnabled);
 -    if (SUCCEEDED(res))
 -      return !aeroEnabled;
 -  }
 -  else
 -  {
 -    return true;
 -  }
 +  BOOL aeroEnabled = FALSE;
 +  HRESULT res = DwmIsCompositionEnabled(&aeroEnabled);
 +  if (SUCCEEDED(res))
 +    return !aeroEnabled;
  #endif
    return false;
  }
@@@ -448,27 -425,49 +448,49 @@@ CSysInfo::WindowsVersion CSysInfo::GetW
    return m_WinVer;
  }
  
bool CSysInfo::IsOS64bit()
int CSysInfo::GetKernelBitness(void)
  {
  #ifdef TARGET_WINDOWS
    SYSTEM_INFO si;
    GetSystemInfo(&si);
    if (si.wProcessorArchitecture == PROCESSOR_ARCHITECTURE_AMD64)
-     return true;
+     return 64;
    
    BOOL (WINAPI *ptrIsWow64) (HANDLE, PBOOL);
    HMODULE hKernel32 = GetModuleHandleA("kernel32");
    if (hKernel32 == NULL)
-     return false; // Can't detect OS
+     return 0; // Can't detect OS
    ptrIsWow64 = (BOOL (WINAPI *) (HANDLE, PBOOL)) GetProcAddress(hKernel32, "IsWow64Process");
    BOOL wow64proc = FALSE;
    if (ptrIsWow64 == NULL || ptrIsWow64(GetCurrentProcess(), &wow64proc) == FALSE)
-     return false; // Can't detect OS
-   return wow64proc != FALSE;
- #else // TARGET_WINDOWS
-   // TODO: Implement Linux, FreeBSD, Android, OSX
-   return false;
- #endif // TARGET_WINDOWS
+     return 0; // Can't detect OS
+   return (wow64proc == FALSE) ? 32 : 64;
+ #elif defined(TARGET_POSIX)
+   struct utsname un;
+   if (uname(&un) == 0)
+   {
+     std::string machine(un.machine);
+     if (machine == "x86_64" || machine == "amd64" || machine == "arm64" || machine == "aarch64" || machine == "ppc64" || machine == "ia64")
+       return 64;
+     return 32;
+   }
+   return 0; // can't detect
+ #else
+   return 0; // unknown
+ #endif
+ }
+ int CSysInfo::GetXbmcBitness(void)
+ {
+ #if defined (__aarch64__) || defined(__arm64__) || defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) || defined(__ppc64__)
+   return 64;
+ #elif defined(__thumb__) || defined(_M_ARMT) || defined(__arm__) || defined(_M_ARM) || defined(__mips__) || defined(mips) || defined(__mips) || defined(i386) || \
+   defined(__i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(_X86_) || defined(__powerpc) || \
+   defined(__powerpc__) || defined(__ppc__) || defined(_M_PPC)
+   return 32;
+ #else
+   return 0; // Unknown
+ #endif
  }
  
  CStdString CSysInfo::GetKernelVersion()
          strKernel.append(" Storage Server 2003");
        else if (osvi.wSuiteMask & VER_SUITE_WH_SERVER)
          strKernel.append(" Home Server");
-       else if (osvi.wProductType == VER_NT_WORKSTATION && IsOS64bit())
+       else if (osvi.wProductType == VER_NT_WORKSTATION && GetKernelBitness() == 64)
          strKernel.append(" XP Professional");
        else if (osvi.wProductType != VER_NT_WORKSTATION)
          strKernel.append(" Server 2003");
        }
      }
  
-     if (IsOS64bit())
-       strKernel.append(" 64-bit");
-     else
-       strKernel.append(" 32-bit");
+     strKernel.append(StringUtils::Format(" %d-bit", GetKernelBitness()));
  
      strKernel.append(StringUtils::Format(", build %d", osvi.dwBuildNumber));
    }
    else
    {
      strKernel.append(" unknown");
-     if (IsOS64bit())
-       strKernel.append(" 64-bit");
-     else
-       strKernel.append(" 32-bit");
+     strKernel.append(StringUtils::Format(" %d-bit", GetKernelBitness()));
    }
  
    return strKernel;
@@@ -888,6 -881,24 +904,24 @@@ std::string CSysInfo::GetBuildTargetPla
  #endif
  }
  
+ std::string CSysInfo::GetBuildTargetCpuFamily(void)
+ {
+ #if defined(__thumb__) || defined(_M_ARMT) 
+   return "ARM (Thumb)";
+ #elif defined(__arm__) || defined(_M_ARM) || defined (__aarch64__)
+   return "ARM";
+ #elif defined(__mips__) || defined(mips) || defined(__mips)
+   return "MIPS";
+ #elif defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(__x86_64) || defined(_M_X64) || defined(_M_AMD64) || \
+    defined(i386) || defined(__i386) || defined(__i386__) || defined(__i486__) || defined(__i586__) || defined(__i686__) || defined(_M_IX86) || defined(_X86_)
+   return "x86";
+ #elif defined(__powerpc) || defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__) || defined(_M_PPC)
+   return "PowerPC";
+ #else
+   return "unknown CPU family";
+ #endif
+ }
  
  CJob *CSysInfo::GetJob() const
  {
diff --combined xbmc/utils/SystemInfo.h
@@@ -120,16 -120,14 +120,17 @@@ public
    static bool IsWindowsVersion(WindowsVersion ver);
    static bool IsWindowsVersionAtLeast(WindowsVersion ver);
    static WindowsVersion GetWindowsVersion();
-   static bool IsOS64bit();
+   static int GetKernelBitness(void);
+   static int GetXbmcBitness(void);
    static CStdString GetKernelVersion();
    CStdString GetCPUModel();
    CStdString GetCPUBogoMips();
    CStdString GetCPUHardware();
    CStdString GetCPURevision();
    CStdString GetCPUSerial();
 +  CStdString GetManufacturer();
 +  CStdString GetProduct();
 +  CStdString GetModel();
    bool GetDiskSpace(const CStdString drive,int& iTotal, int& iTotalFree, int& iTotalUsed, int& iPercentFree, int& iPercentUsed);
    CStdString GetHddSpaceInfo(int& percent, int drive, bool shortText=false);
    CStdString GetHddSpaceInfo(int drive, bool shortText=false);
  
    static std::string GetBuildTargetPlatformName(void);
    static std::string GetBuildTargetPlatformVersion(void);
+   static std::string GetBuildTargetCpuFamily(void);
  
  protected:
    virtual CJob *GetJob() const;