widget/public/nsIGfxInfo.idl
author Benoit Jacob <bjacob@mozilla.com>
Wed, 07 Sep 2011 17:17:44 -0400
changeset 78438 432a30ebd148aaacd1615d4188afab44742c6c52
parent 78007 487d32a1e29af2ce92580d616f48065d1b02ea9e
child 78439 b916b514a499416d0065991c50888c81845121d1
permissions -rw-r--r--
Bug 681026 - always get data from glxtest process and waitpid() for it - r=joe This patch makes GetShouldAccelerate directly call GetData, just before the place where we call GetFeatureStatus, which we know is reached. Initially I considered instead calling GetData from GfxInfo::Init() but that turned out to be a bad idea: Init() is called by the factory constructor, which is called significantly earlier in the startup process. We want to call GetData as late as possible, just when we need it, to maximize chances that the glxtest process be already finished by the time we waitpid() it, so that we don't end up wasting time waiting for it.

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is Mozilla Communicator.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corp.
 * Portions created by the Initial Developer are Copyright (C) 2000
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

#include "nsISupports.idl"

/* NOTE: this interface is completely undesigned, not stable and likely to change */

[scriptable, uuid(a67c77af-2952-4028-93ab-e7bc3b43cf81)]
interface nsIGfxInfo : nsISupports
{
  /*
   * These are win32-specific
   */
  readonly attribute boolean D2DEnabled;
  readonly attribute boolean DWriteEnabled;
  readonly attribute boolean AzureEnabled;
  readonly attribute DOMString DWriteVersion;
  readonly attribute DOMString cleartypeParameters;

  // XXX: Switch to a list of devices, rather than explicitly numbering them. 

  /**
   * The name of the display adapter.
   */
  readonly attribute DOMString adapterDescription;
  readonly attribute DOMString adapterDescription2;

  readonly attribute DOMString adapterDriver;
  readonly attribute DOMString adapterDriver2;
  
  /* These types are inspired by DXGI_ADAPTER_DESC */
  readonly attribute unsigned long adapterVendorID;
  readonly attribute unsigned long adapterVendorID2;
  
  readonly attribute unsigned long adapterDeviceID;
  readonly attribute unsigned long adapterDeviceID2;

  /**
   * The amount of RAM in MB in the display adapter.
   */
  readonly attribute DOMString adapterRAM;
  readonly attribute DOMString adapterRAM2;
  
  readonly attribute DOMString adapterDriverVersion;
  readonly attribute DOMString adapterDriverVersion2;
  
  readonly attribute DOMString adapterDriverDate;
  readonly attribute DOMString adapterDriverDate2;

  readonly attribute boolean isGPU2Active;

  void getFailures(
               [optional] out unsigned long failureCount,
               [retval, array, size_is(failureCount)] out string failures);

  [noscript, notxpcom] void logFailure(in ACString failure);
  /*
   * A set of constants for features that we can ask this GfxInfo object
   * about via GetFeatureStatus
   */
  /* Don't assign 0 or -1 */
  /* Whether Direct2D is supported for content rendering. */
  const long FEATURE_DIRECT2D = 1;
  /* Whether Direct3D 9 is supported for layers. */
  const long FEATURE_DIRECT3D_9_LAYERS = 2;
  /* Whether Direct3D 10.0 is supported for layers. */
  const long FEATURE_DIRECT3D_10_LAYERS = 3;
  /* Whether Direct3D 10.1 is supported for layers. */
  const long FEATURE_DIRECT3D_10_1_LAYERS = 4;
  /* Whether OpenGL is supported for layers */
  const long FEATURE_OPENGL_LAYERS = 5;
  /* Whether WebGL is supported via OpenGL. */
  const long FEATURE_WEBGL_OPENGL = 6;
  /* Whether WebGL is supported via ANGLE (D3D9 -- does not check for the presence of ANGLE libs). */
  const long FEATURE_WEBGL_ANGLE = 7;

  /*
   * A set of return values from GetFeatureStatus
   */
  /* We don't explicitly block or discourage the feature. Which means we'll try getting it from the
   * hardware, and see what happens. */
  const long FEATURE_NO_INFO = 1;
  /* This feature is blocked on this driver version. Updating driver will typically unblock it. */
  const long FEATURE_BLOCKED_DRIVER_VERSION = 2;
  /* This feature is blocked on this device, regardless of driver version.
   * Typically means we hit too many driver crashes without a good reason to hope for them to
   * get fixed soon. */
  const long FEATURE_BLOCKED_DEVICE = 3;
  /* This feature is available and can be used, but is not suggested (e.g. shouldn't be used by default */
  const long FEATURE_DISCOURAGED = 4;
  /* This feature is blocked on this OS version. */
  const long FEATURE_BLOCKED_OS_VERSION = 5;

  /**
   * Ask about a feature, and return the status of that feature
   */
  long getFeatureStatus(in long aFeature);

  /*
   * Ask about a feature, return the minimum driver version required for it if its status is
   * FEATURE_BLOCKED_DRIVER_VERSION, otherwise return an empty string. 
   */
  DOMString getFeatureSuggestedDriverVersion(in long aFeature);

  /**
   * WebGL info; valid params are "full-renderer", "vendor", "renderer", "version",
   * "shading_language_version", "extensions".  These return info from
   * underlying GL impl that's used to implement WebGL.
   */
  DOMString getWebGLParameter(in DOMString aParam);

  // only useful on X11
  [noscript, notxpcom] void GetData();
};