com.jogamp.common.os

## Class Platform

- java.lang.Object
- - jogamp.common.os.PlatformPropsImpl
  - - com.jogamp.common.os.Platform

-     public class Platform
      extends jogamp.common.os.PlatformPropsImpl

  Utility class for querying platform specific properties.

  Some field declarations and it's static initialization has been delegated to it's super class `PlatformPropsImpl` to solve static initialization interdependencies w/ the GlueGen native library loading and it's derived information `getMachineDescription()`, `is32Bit()`, ..
  This mechanism is preferred in this case to avoid synchronization and locking and allow better performance accessing the mentioned fields/methods.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static class` | `Platform.ABIType`
    `static class` | `Platform.CPUFamily`
    `static class` | `Platform.CPUType`
    `static class` | `Platform.OSType`

    - ### Nested classes/interfaces inherited from class jogamp.common.os.PlatformPropsImpl

      `jogamp.common.os.PlatformPropsImpl.OSXVersion`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static boolean` | `AWT_AVAILABLE` `true` if AWT is available and not in headless mode, otherwise `false`.
    `static boolean` | `USE_TEMP_JAR_CACHE` System property: 'jogamp.gluegen.UseTempJarCache', defaults to true if `PlatformPropsImpl.OS_TYPE` is not `Platform.OSType.ANDROID`.

    - ### Fields inherited from class jogamp.common.os.PlatformPropsImpl

      `ABI_TYPE, ARCH, ARCH_lower, CPU_ARCH, JAVA_6, JAVA_RUNTIME_NAME, JAVA_SE, JAVA_VENDOR, JAVA_VENDOR_URL, JAVA_VERSION, JAVA_VERSION_NUMBER, JAVA_VERSION_UPDATE, JAVA_VM_NAME, LITTLE_ENDIAN, NEWLINE, OS, os_and_arch, OS_lower, OS_TYPE, OS_VERSION, OS_VERSION_NUMBER, Version16, Version17`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `static long` | `currentTimeMicros()` Returns the unix based current time in microseconds, based on `gettimeofday(..)`.
    `static long` | `currentTimeMillis()` Returns the unix based current time in milliseconds, based on `gettimeofday(..)`.
    `static Platform.ABIType` | `getABIType()` Returns the ABI type.
    `static String` | `getArchName()` Returns the CPU architecture String.
    `static Platform.CPUFamily` | `getCPUFamily()` Returns the CPU family.
    `static Platform.CPUType` | `getCPUType()` Returns the CPU architecture type.
    `static long` | `getCurrentSleepJitter()` Returns the estimated sleep jitter value in nanoseconds.
    `static String` | `getJavaRuntimeName()` Returns the JAVA runtime name.
    `static String` | `getJavaVendor()` Returns the JAVA vendor.
    `static String` | `getJavaVendorURL()` Returns the JAVA vendor url.
    `static String` | `getJavaVersion()` Returns the JAVA version.
    `static VersionNumber` | `getJavaVersionNumber()` Returns the JAVA version number.
    `static String` | `getJavaVMName()` Returns the JAVA VM name.
    `static MachineDescription` | `getMachineDescription()` Returns the MachineDescription of the running machine.
    `static String` | `getNewline()` Returns the platform's line separator.
    `static String` | `getOSAndArch()` Returns the GlueGen common name for the currently running OSType and CPUType as implemented in the build system in 'gluegen-cpptasks-base.xml'.
    `static String` | `getOSName()` Returns the OS name.
    `static Platform.OSType` | `getOSType()` Returns the OS type.
    `static String` | `getOSVersion()` Returns the OS version.
    `static VersionNumber` | `getOSVersionNumber()` Returns the OS version number.
    `static void` | `initSingleton()` kick off static initialization of platform property information and native gluegen-rt lib loading
    `static boolean` | `is32Bit()` Returns true if this JVM/ARCH is 32bit.
    `static boolean` | `is64Bit()` Returns true if this JVM/ARCH is 64bit.
    `static boolean` | `isAWTAvailable()` Returns `true` if AWT is available and not in headless mode, otherwise `false`.
    `static boolean` | `isJava6()` Returns true only if being compatible w/ language level 6, e.g.
    `static boolean` | `isJavaSE()` Returns true only if having `LongBuffer` and `DoubleBuffer` available.
    `static boolean` | `isLittleEndian()` Returns true if this machine is little endian, otherwise false.
    `static boolean` | `isRunningFromJarURL()`

    - ### Methods inherited from class jogamp.common.os.PlatformPropsImpl

      `getOSAndArch`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### USE_TEMP_JAR_CACHE

          public static final boolean USE_TEMP_JAR_CACHE

      System property: 'jogamp.gluegen.UseTempJarCache', defaults to true if `PlatformPropsImpl.OS_TYPE` is not `Platform.OSType.ANDROID`.

    - #### AWT_AVAILABLE

          public static final boolean AWT_AVAILABLE

      `true` if AWT is available and not in headless mode, otherwise `false`.

  - ### Method Detail

    - #### isRunningFromJarURL

          public static final boolean isRunningFromJarURL()

      Returns:
        true if we're running from a Jar URL, otherwise false

    - #### initSingleton

          public static void initSingleton()

      kick off static initialization of platform property information and native gluegen-rt lib loading

    - #### isJavaSE

          public static boolean isJavaSE()

      Returns true only if having `LongBuffer` and `DoubleBuffer` available.

    - #### isJava6

          public static boolean isJava6()

      Returns true only if being compatible w/ language level 6, e.g. JRE 1.6.

      Implies `isJavaSE()`.

      Note: We claim Android is compatible.

    - #### isLittleEndian

          public static boolean isLittleEndian()

      Returns true if this machine is little endian, otherwise false.

    - #### getOSName

          public static String getOSName()

      Returns the OS name.

      In case of `Platform.OSType.ANDROID`, see `getOSType()`, the OS name is Linux

    - #### getOSVersion

          public static String getOSVersion()

      Returns the OS version.

    - #### getOSVersionNumber

          public static VersionNumber getOSVersionNumber()

      Returns the OS version number.

    - #### getArchName

          public static String getArchName()

      Returns the CPU architecture String.

    - #### getOSType

          public static Platform.OSType getOSType()

      Returns the OS type.

      In case of `Platform.OSType.ANDROID` the `OS name`, is Linux

    - #### getCPUFamily

          public static Platform.CPUFamily getCPUFamily()

      Returns the CPU family.

    - #### getCPUType

          public static Platform.CPUType getCPUType()

      Returns the CPU architecture type.

    - #### getABIType

          public static Platform.ABIType getABIType()

      Returns the ABI type.

      In case of `Platform.CPUFamily.ARM`, the value is determined by parsing the Elf Headers of the running VM.

      Otherwise the value is `Platform.ABIType.GENERIC_ABI`.

    - #### getOSAndArch

          public static String getOSAndArch()

      Returns the GlueGen common name for the currently running OSType and CPUType as implemented in the build system in 'gluegen-cpptasks-base.xml'.
      See Also:
        `#getOSAndArch(OSType, CPUType)`

    - #### getJavaVendor

          public static String getJavaVendor()

      Returns the JAVA vendor.

    - #### getJavaVMName

          public static String getJavaVMName()

      Returns the JAVA VM name.

    - #### getJavaRuntimeName

          public static String getJavaRuntimeName()

      Returns the JAVA runtime name.

    - #### getJavaVendorURL

          public static String getJavaVendorURL()

      Returns the JAVA vendor url.

    - #### getJavaVersion

          public static String getJavaVersion()

      Returns the JAVA version.

    - #### getJavaVersionNumber

          public static VersionNumber getJavaVersionNumber()

      Returns the JAVA version number.

    - #### getNewline

          public static String getNewline()

      Returns the platform's line separator.

    - #### is32Bit

          public static boolean is32Bit()

      Returns true if this JVM/ARCH is 32bit.

      Shortcut to `getMachineDescription()`.`is32Bit()`

    - #### is64Bit

          public static boolean is64Bit()

      Returns true if this JVM/ARCH is 64bit.

      Shortcut to `getMachineDescription()`.`is64Bit()`

    - #### getMachineDescription

          public static MachineDescription getMachineDescription()

      Returns the MachineDescription of the running machine.

    - #### isAWTAvailable

          public static boolean isAWTAvailable()

      Returns `true` if AWT is available and not in headless mode, otherwise `false`.

    - #### currentTimeMillis

          public static long currentTimeMillis()

      Returns the unix based current time in milliseconds, based on `gettimeofday(..)`.

      This is an alternative to `System.currentTimeMillis()` and `System.nanoTime()`. While the named `System` methods do provide the required precision, `gettimeofday()` also guarantees time accuracy, i.e. update interval.

      See Also:
        `currentTimeMicros()`

    - #### currentTimeMicros

          public static long currentTimeMicros()

      Returns the unix based current time in microseconds, based on `gettimeofday(..)`.

      This is an alternative to `System.currentTimeMillis()` and `System.nanoTime()`. While the named `System` methods do provide the required precision, `gettimeofday()` also guarantees time accuracy, i.e. update interval.

      See Also:
        `currentTimeMillis()`

    - #### getCurrentSleepJitter

          public static long getCurrentSleepJitter()

      Returns the estimated sleep jitter value in nanoseconds.

      Includes a warm-up path, allowing hotspot to optimize the code.