Bug 1277359 - Add chrome-only navigator.cpuHasSSE2 api. r=smaug draft
authorRalph Giles <giles@mozilla.com>
Fri, 07 Oct 2016 16:23:39 -0700
changeset 428277 7fa1990f147dbe427146bcd47fc0a6bafa12afa8
parent 428241 5639a9f476d08f300c079117e61697f5026b6367
child 428278 e6ccfb2434473a88eca7447bd15d44763ae0aa8e
push id33266
push userbmo:giles@thaumas.net
push dateFri, 21 Oct 2016 23:02:44 +0000
reviewerssmaug
bugs1277359
milestone52.0a1
Bug 1277359 - Add chrome-only navigator.cpuHasSSE2 api. r=smaug Make the host's support for SSE2 instructions available to javascript so we can report that status in update pings. MozReview-Commit-ID: FhWPjLxKRZy
dom/base/Navigator.cpp
dom/base/Navigator.h
dom/webidl/Navigator.webidl
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -763,16 +763,22 @@ Navigator::HardwareConcurrency()
   workers::RuntimeService* rts = workers::RuntimeService::GetOrCreateService();
   if (!rts) {
     return 1;
   }
 
   return rts->ClampedHardwareConcurrency();
 }
 
+bool
+Navigator::CpuHasSSE2()
+{
+  return mozilla::supports_sse2();
+}
+
 void
 Navigator::RefreshMIMEArray()
 {
   if (mMimeTypes) {
     mMimeTypes->Refresh();
   }
 }
 
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -193,16 +193,17 @@ public:
   bool CookieEnabled();
   void GetBuildID(nsString& aBuildID, ErrorResult& aRv)
   {
     aRv = GetBuildID(aBuildID);
   }
   PowerManager* GetMozPower(ErrorResult& aRv);
   bool JavaEnabled(ErrorResult& aRv);
   uint64_t HardwareConcurrency();
+  bool CpuHasSSE2();
   bool TaintEnabled()
   {
     return false;
   }
   void AddIdleObserver(MozIdleObserver& aObserver, ErrorResult& aRv);
   void RemoveIdleObserver(MozIdleObserver& aObserver, ErrorResult& aRv);
   already_AddRefed<WakeLock> RequestWakeLock(const nsAString &aTopic,
                                              ErrorResult& aRv);
--- a/dom/webidl/Navigator.webidl
+++ b/dom/webidl/Navigator.webidl
@@ -229,16 +229,22 @@ partial interface Navigator {
    * The returned MozWakeLock object is a token of the lock.  You can
    * unlock the lock via the object's |unlock| method.  The lock is released
    * automatically when its associated window is unloaded.
    *
    * @param aTopic resource name
    */
   [Throws, Pref="dom.wakelock.enabled", Func="Navigator::HasWakeLockSupport", UnsafeInPrerendering]
   MozWakeLock requestWakeLock(DOMString aTopic);
+
+  /**
+   * Make CPU instruction subset information available for UpdateUtils.
+   */
+  [ChromeOnly]
+  readonly attribute boolean cpuHasSSE2;
 };
 
 partial interface Navigator {
   [Throws, Pref="device.storage.enabled"]
   readonly attribute DeviceStorageAreaListener deviceStorageAreaListener;
 };
 
 // nsIDOMNavigatorDeviceStorage
@@ -398,8 +404,11 @@ partial interface Navigator {
   readonly attribute boolean mozE10sEnabled;
 };
 #endif
 
 [NoInterfaceObject, Exposed=(Window,Worker)]
 interface NavigatorConcurrentHardware {
   readonly attribute unsigned long long hardwareConcurrency;
 };
+
+partial interface Navigator {
+};