widget/nsIGfxInfo.idl
author cku <cku@mozilla.com>
Fri, 05 May 2017 17:19:43 +0800
changeset 359137 f3460d42d23cb21093146a2ace98009d581bd77a
parent 349841 f39045b90aa9b12cefbe7842155471fe676be93f
child 364746 112d854f652d494562b3e5340ef2e262da7fee62
permissions -rw-r--r--
Bug 1351440 - Part 2. Encapsulate DrawResult and imgIContainer::FLAG_* into imgDrawingParams, and pass it to PaintSVG. r=jwatt The DrawResult return was not in fact anything to do with the success or failure of that method, but was actually passing out a very specific piece of information about the success or failure of any imagelib drawing that may not have occurred under the various PaintSVG calls. The signature of PaintSVG is changed from DrawResult PaintSVG(...., uint32 flags); to void PaintSVG(...., imgDrawingParams& aPackage); imgDrawingParams wraps DrawResult and imgIContainer::FLAG_* as a pack, pass through PaintSVG to imagelib draw calls under beneath. MozReview-Commit-ID: IOq2evUAOQF

/* -*- Mode: IDL; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 *
 * 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/. */

#include "nsISupports.idl"

/* NOTE: this interface is completely undesigned, not stable and likely to change */
[scriptable, uuid(1accd618-4c80-4703-9d29-ecf257d397c8)]
interface nsIGfxInfo : nsISupports
{
  /*
   * These are win32-specific
   */
  readonly attribute boolean D2DEnabled;
  readonly attribute boolean DWriteEnabled;
  readonly attribute boolean usingGPUProcess;
  readonly attribute DOMString DWriteVersion;
  readonly attribute DOMString cleartypeParameters;

  /*
   * These are valid across all platforms.
   */
  readonly attribute DOMString ContentBackend;
  readonly attribute boolean WebRenderEnabled;

  // 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 DOMString adapterVendorID;
  readonly attribute DOMString adapterVendorID2;

  readonly attribute DOMString adapterDeviceID;
  readonly attribute DOMString adapterDeviceID2;

  readonly attribute DOMString adapterSubsysID;
  readonly attribute DOMString adapterSubsysID2;

  /**
   * 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;

  /**
   * Returns an array of objects describing each monitor. Guaranteed properties
   * are "screenWidth" and "screenHeight". This is only implemented on Desktop.
   *
   * Windows additionally supplies "refreshRate" and "pseudoDisplay".
   *
   * OS X additionally supplies "scale".
   */
  [implicit_jscontext]
  jsval getMonitors();

  void getFailures(
               out unsigned long failureCount,
               [optional, array, size_is(failureCount)] out long indices,
               [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 any value <= 0 */
  /* 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;
  /* Whether WebGL antialiasing is supported. */
  const long FEATURE_WEBGL_MSAA = 8;
  /* Whether Stagefright is supported, starting in 17. */
  const long FEATURE_STAGEFRIGHT = 9;
  /* Whether Webrtc Hardware acceleration is supported, starting in 31. */
  const long FEATURE_WEBRTC_HW_ACCELERATION = 10;
  /* Whether Direct3D 11 is supported for layers, starting in 32. */
  const long FEATURE_DIRECT3D_11_LAYERS = 11;
  /* Whether hardware accelerated video decoding is supported, starting in 36. */
  const long FEATURE_HARDWARE_VIDEO_DECODING = 12;
  /* Whether Direct3D 11 is supported for ANGLE, starting in 38. */
  const long FEATURE_DIRECT3D_11_ANGLE = 13;
  /* Whether Webrtc Hardware acceleration is supported, starting in 42. */
  const long FEATURE_WEBRTC_HW_ACCELERATION_ENCODE = 14;
  /* Whether Webrtc Hardware acceleration is supported, starting in 42. */
  const long FEATURE_WEBRTC_HW_ACCELERATION_DECODE = 15;
  /* Whether Canvas acceleration is supported, starting in 45 */
  const long FEATURE_CANVAS2D_ACCELERATION = 16;
  /* Whether hardware VP8 decoding is supported, starting in 48. */
  const long FEATURE_VP8_HW_DECODE = 17;
  /* Whether hardware VP9 decoding is supported, starting in 48. */
  const long FEATURE_VP9_HW_DECODE = 18;
  /* Whether NV_dx_interop2 is supported, starting in 50. */
  const long FEATURE_DX_INTEROP2 = 19;
  /* Whether the GPU process is supported, starting in 52. */
  const long FEATURE_GPU_PROCESS = 20;
  /* Whether the WebGL2 is supported, starting in 54 */
  const long FEATURE_WEBGL2 = 21;
  /* the maximum feature value. */
  const long FEATURE_MAX_VALUE = FEATURE_WEBGL2;

  /*
   * A set of return values from GetFeatureStatus
   */

  /* The driver is safe to the best of our knowledge */
  const long FEATURE_STATUS_OK = 1;
  /* We don't know the status of the feature yet. The analysis probably hasn't finished yet. */
  const long FEATURE_STATUS_UNKNOWN = 2;
  /* This feature is blocked on this driver version. Updating driver will typically unblock it. */
  const long FEATURE_BLOCKED_DRIVER_VERSION = 3;
  /* 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 = 4;
  /* This feature is available and can be used, but is not suggested (e.g. shouldn't be used by default */
  const long FEATURE_DISCOURAGED = 5;
  /* This feature is blocked on this OS version. */
  const long FEATURE_BLOCKED_OS_VERSION = 6;
  /* This feature is blocked because of mismatched driver versions. */
  const long FEATURE_BLOCKED_MISMATCHED_VERSION = 7;

  /**
   * Ask about a feature, and return the status of that feature.
   * If the feature is not ok then aFailureId will give a unique failure Id
   * otherwise it will be empty.
   */
  long getFeatureStatus(in long aFeature, [optional] out ACString aFailureId);

  /*
   * 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();

  [implicit_jscontext]
  jsval getInfo();

  // Return an object describing all features that have been configured:
  //
  //   "features": [
  //     // For each feature:
  //     {
  //       "name": <string>,
  //       "description": <string>,
  //       "status": <string>,
  //       "log": [
  //          // One or more log entries, the first denotes the default value.
  //          {
  //            "type": <string>,    // "base", "user", "env", or "runtime"
  //            "status": <string>,
  //            "message": <string>  // Set unless type is "base" and status is "available".
  //          }
  //       ]
  //     }
  //   ]
  //   "fallbacks": [
  //     // For each workaround:
  //     {
  //       "name:" <string>,
  //       "description": <string>,
  //       "message": <string>
  //     ]
  //   }
  //
  // When a message is prefixed with a '#', it is a special status code. Status
  // codes are unique identifiers that can be searched in the codebase to find
  // which line of code caused the message. Some codes are standardized to
  // improve about:support messaging:
  //
  //   "[CONTEXT_]FEATURE_FAILURE_BUG_<number>"
  //     CONTEXT is optional and can currently only be "BLOCKLIST".
  //     <number> refers to a bug number in Bugzilla.
  //
  [implicit_jscontext]
  jsval getFeatureLog();

  // Returns an object containing information about graphics features. It is
  // intended to be directly included into the Telemetry environment.
  //
  //   "layers":
  //   {
  //     "compositor": "d3d9", "d3d11", "opengl", "basic", or "none"
  //                   // ("none" indicates no compositors have been created)
  //     // Feature is one of "d3d9", "d3d11", "opengl", "basic", or "d2d".
  //     "<feature>": {
  //       // Each backend can have one of the following statuses:
  //       //   "unused"      - This feature has not been requested.
  //       //   "unavailable" - OS version or restriction prevents use.
  //       //   "blocked"     - An internal condition (such as safe mode) prevents use.
  //       //   "blacklisted" - Blocked due to a blacklist restriction.
  //       //   "disabled"    - User explicitly disabled this default feature.
  //       //   "failed"      - Feature failed to initialize.
  //       //   "available"   - User has this feature available by default.
  //       "status": "<status>",
  //       "version": "<version>",
  //       "warp": true|false,           // D3D11 only.
  //       "textureSharing": true|false, // D3D11 only.
  //     }
  //   }
  [implicit_jscontext]
  jsval getFeatures();

  // Returns an array listing any active crash guards.
  //
  //   [
  //     {
  //       // Type is one of "d3d11layers", "d3d9video", "glcontext",
  //       // or "d3d11video".
  //       "type":        "<identifier>",
  //
  //       // Preference that must be deleted/reset to retrigger the guard.
  //       "prefName":    "<preference>",
  //     }
  //   ]
  [implicit_jscontext]
  jsval getActiveCrashGuards();

  // Forces the GPU process to start or shutdown. This is intended only for
  // xpcshell-tests.
  boolean controlGPUProcessForXPCShell(in boolean aEnable);
};