DXR is a code search and navigation tool aimed at making sense of large projects. It supports full-text and regex searches as well as structural queries.

Implementation

Mercurial (b6d82b1a6b02)

VCS Links

Line Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

#ifndef nsMacUtilsImpl_h___
#define nsMacUtilsImpl_h___

#include "nsIMacUtils.h"
#include "nsString.h"
#include "mozilla/Atomics.h"
#include "mozilla/Attributes.h"
#include "mozilla/StaticMutex.h"
#include "mozilla/StaticPtr.h"

using mozilla::Atomic;
using mozilla::StaticAutoPtr;
using mozilla::StaticMutex;

class nsMacUtilsImpl final : public nsIMacUtils {
 public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSIMACUTILS

  nsMacUtilsImpl() {}

  // Return the repo directory and the repo object directory respectively.
  // These should only be used on Mac developer builds to determine the path
  // to the repo or object directory.
  static nsresult GetRepoDir(nsIFile** aRepoDir);
  static nsresult GetObjDir(nsIFile** aObjDir);

#if defined(MOZ_SANDBOX)
  static bool GetAppPath(nsCString& aAppPath);
#  ifdef DEBUG
  static nsresult GetBloatLogDir(nsCString& aDirectoryPath);
  static nsresult GetDirectoryPath(const char* aPath,
                                   nsCString& aDirectoryPath);
#  endif /* DEBUG */
#endif   /* MOZ_SANDBOX */

  static void EnableTCSMIfAvailable();
  static bool IsTCSMAvailable();
  static uint32_t GetPhysicalCPUCount();

 private:
  ~nsMacUtilsImpl() {}

  nsresult GetArchString(nsAString& aArchString);

  // A string containing a "-" delimited list of architectures
  // in our binary.
  nsString mBinaryArchs;

#if defined(MOZ_SANDBOX)
  // Cache the appDir returned from GetAppPath to avoid doing I/O
  static StaticAutoPtr<nsCString> sCachedAppPath;
  // For thread safe setting/checking of sCachedAppPath
  static StaticMutex sCachedAppPathMutex;
  // Utility method to call ClearOnShutdown() on the main thread
  static nsresult ClearCachedAppPathOnShutdown();
#endif

  enum TCSMStatus { TCSM_Unknown = 0, TCSM_Available, TCSM_Unavailable };
  static mozilla::Atomic<nsMacUtilsImpl::TCSMStatus> sTCSMStatus;

  static nsresult EnableTCSM();
#if defined(DEBUG)
  static bool IsTCSMEnabled();
#endif
};

// Global singleton service
// 697BD3FD-43E5-41CE-AD5E-C339175C0818
#define NS_MACUTILSIMPL_CID                          \
  {                                                  \
    0x697BD3FD, 0x43E5, 0x41CE, {                    \
      0xAD, 0x5E, 0xC3, 0x39, 0x17, 0x5C, 0x08, 0x18 \
    }                                                \
  }
#define NS_MACUTILSIMPL_CONTRACTID "@mozilla.org/xpcom/mac-utils;1"

#endif /* nsMacUtilsImpl_h___ */