Title: [288074] trunk/Source/ThirdParty/ANGLE
Revision
288074
Author
ddkil...@apple.com
Date
2022-01-16 13:34:17 -0800 (Sun, 16 Jan 2022)

Log Message

REGRESSION (r286603): Leak of three NSMutableDictionary objects each time rx::DisplayMtl::getMetalDeviceMatchingAttribute() is called
<https://webkit.org/b/235278>
<rdar://problem/87653812>

Reviewed by Darin Adler.

* src/libANGLE/renderer/metal/DisplayMtl.mm:
(rx::DisplayMtl::getMetalDeviceMatchingAttribute):
- Make use of mtl::adoptObjCObj<> so these objects are relaseed
  when the method returns.

Modified Paths

Diff

Modified: trunk/Source/ThirdParty/ANGLE/ChangeLog (288073 => 288074)


--- trunk/Source/ThirdParty/ANGLE/ChangeLog	2022-01-16 20:51:53 UTC (rev 288073)
+++ trunk/Source/ThirdParty/ANGLE/ChangeLog	2022-01-16 21:34:17 UTC (rev 288074)
@@ -1,3 +1,16 @@
+2022-01-16  David Kilzer  <ddkil...@apple.com>
+
+        REGRESSION (r286603): Leak of three NSMutableDictionary objects each time rx::DisplayMtl::getMetalDeviceMatchingAttribute() is called
+        <https://webkit.org/b/235278>
+        <rdar://problem/87653812>
+
+        Reviewed by Darin Adler.
+
+        * src/libANGLE/renderer/metal/DisplayMtl.mm:
+        (rx::DisplayMtl::getMetalDeviceMatchingAttribute):
+        - Make use of mtl::adoptObjCObj<> so these objects are relaseed
+          when the method returns.
+
 2022-01-14  Kyle Piddington  <kpidding...@apple.com>
 
         ANGLE: Supports32BitFloatFiltering is not supported on TVOS

Modified: trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm (288073 => 288074)


--- trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm	2022-01-16 20:51:53 UTC (rev 288073)
+++ trunk/Source/ThirdParty/ANGLE/src/libANGLE/renderer/metal/DisplayMtl.mm	2022-01-16 21:34:17 UTC (rev 288074)
@@ -238,22 +238,22 @@
 #if defined(ANGLE_PLATFORM_MACOS) || defined(ANGLE_PLATFORM_MACCATALYST)
     auto deviceList = mtl::adoptObjCObj(MTLCopyAllDevices());
 
-    NSMutableArray<id<MTLDevice>> *externalGPUs   = [[NSMutableArray alloc] init];
-    NSMutableArray<id<MTLDevice>> *integratedGPUs = [[NSMutableArray alloc] init];
-    NSMutableArray<id<MTLDevice>> *discreteGPUs   = [[NSMutableArray alloc] init];
+    auto externalGPUs = mtl::adoptObjCObj<NSMutableArray<id<MTLDevice>>>([[NSMutableArray alloc] init]);
+    auto integratedGPUs = mtl::adoptObjCObj<NSMutableArray<id<MTLDevice>>>([[NSMutableArray alloc] init]);
+    auto discreteGPUs = mtl::adoptObjCObj<NSMutableArray<id<MTLDevice>>>([[NSMutableArray alloc] init]);
     for (id<MTLDevice> device in deviceList.get())
     {
         if (device.removable)
         {
-            [externalGPUs addObject:device];
+            [externalGPUs.get() addObject:device];
         }
         else if (device.lowPower)
         {
-            [integratedGPUs addObject:device];
+            [integratedGPUs.get() addObject:device];
         }
         else
         {
-            [discreteGPUs addObject:device];
+            [discreteGPUs.get() addObject:device];
         }
     }
     // TODO(kpiddington: External GPU support. Do we prefer high power / low bandwidth for general
@@ -262,7 +262,7 @@
     if (attribs.get(EGL_POWER_PREFERENCE_ANGLE, 0) == EGL_HIGH_POWER_ANGLE)
     {
         // Search for a discrete GPU first.
-        for (id<MTLDevice> device in discreteGPUs)
+        for (id<MTLDevice> device in discreteGPUs.get())
         {
             if (![device isHeadless])
                 return device;
@@ -271,7 +271,7 @@
     else if (attribs.get(EGL_POWER_PREFERENCE_ANGLE, 0) == EGL_LOW_POWER_ANGLE)
     {
         // If we've selected a low power device, look through integrated devices.
-        for (id<MTLDevice> device in integratedGPUs)
+        for (id<MTLDevice> device in integratedGPUs.get())
         {
             if (![device isHeadless])
                 return device;
@@ -295,7 +295,7 @@
     }
 
     // Default to use a low power device, look through integrated devices.
-    for (id<MTLDevice> device in integratedGPUs)
+    for (id<MTLDevice> device in integratedGPUs.get())
     {
         if (![device isHeadless])
             return device;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to