Title: [219123] trunk/Source/WebCore
Revision
219123
Author
an...@apple.com
Date
2017-07-04 15:07:53 -0700 (Tue, 04 Jul 2017)

Log Message

RenderThemeCocoa::mediaControlsFormattedStringForDuration is leaking NSDateComponentsFormatters
https://bugs.webkit.org/show_bug.cgi?id=174138

Reviewed by Ryosuke Niwa.

Saw a random spin here during media playback. Looks like we are leaking.

* rendering/RenderThemeCocoa.h:
* rendering/RenderThemeCocoa.mm:
(WebCore::RenderThemeCocoa::mediaControlsFormattedStringForDuration):

    Reuse NSDateComponentsFormatter.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (219122 => 219123)


--- trunk/Source/WebCore/ChangeLog	2017-07-04 20:14:28 UTC (rev 219122)
+++ trunk/Source/WebCore/ChangeLog	2017-07-04 22:07:53 UTC (rev 219123)
@@ -1,5 +1,20 @@
 2017-07-04  Antti Koivisto  <an...@apple.com>
 
+        RenderThemeCocoa::mediaControlsFormattedStringForDuration is leaking NSDateComponentsFormatters
+        https://bugs.webkit.org/show_bug.cgi?id=174138
+
+        Reviewed by Ryosuke Niwa.
+
+        Saw a random spin here during media playback. Looks like we are leaking.
+
+        * rendering/RenderThemeCocoa.h:
+        * rendering/RenderThemeCocoa.mm:
+        (WebCore::RenderThemeCocoa::mediaControlsFormattedStringForDuration):
+
+            Reuse NSDateComponentsFormatter.
+
+2017-07-04  Antti Koivisto  <an...@apple.com>
+
         FrameView should not set RenderView::logicalWidth directly for printing
         https://bugs.webkit.org/show_bug.cgi?id=174135
 

Modified: trunk/Source/WebCore/rendering/RenderThemeCocoa.h (219122 => 219123)


--- trunk/Source/WebCore/rendering/RenderThemeCocoa.h	2017-07-04 20:14:28 UTC (rev 219122)
+++ trunk/Source/WebCore/rendering/RenderThemeCocoa.h	2017-07-04 22:07:53 UTC (rev 219123)
@@ -26,7 +26,12 @@
 #pragma once
 
 #include "RenderTheme.h"
+#include <wtf/RetainPtr.h>
 
+#if ENABLE(MEDIA_CONTROLS_SCRIPT)
+OBJC_CLASS NSDateComponentsFormatter;
+#endif
+
 namespace WebCore {
 
 class RenderThemeCocoa : public RenderTheme {
@@ -39,6 +44,9 @@
 #if ENABLE(VIDEO)
     String mediaControlsFormattedStringForDuration(double) override;
 #endif
+#if ENABLE(MEDIA_CONTROLS_SCRIPT)
+    RetainPtr<NSDateComponentsFormatter> m_durationFormatter;
+#endif
 };
 
 }

Modified: trunk/Source/WebCore/rendering/RenderThemeCocoa.mm (219122 => 219123)


--- trunk/Source/WebCore/rendering/RenderThemeCocoa.mm	2017-07-04 20:14:28 UTC (rev 219122)
+++ trunk/Source/WebCore/rendering/RenderThemeCocoa.mm	2017-07-04 22:07:53 UTC (rev 219123)
@@ -117,12 +117,14 @@
     if (!std::isfinite(durationInSeconds))
         return WEB_UI_STRING("indefinite time", "accessibility help text for an indefinite media controller time value");
 
-    NSDateComponentsFormatter *durationFormatter = [NSDateComponentsFormatter new];
-    durationFormatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
-    durationFormatter.allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
-    durationFormatter.formattingContext = NSFormattingContextStandalone;
-    durationFormatter.maximumUnitCount = 2;
-    return [durationFormatter stringFromTimeInterval:durationInSeconds];
+    if (!m_durationFormatter) {
+        m_durationFormatter = adoptNS([NSDateComponentsFormatter new]);
+        m_durationFormatter.get().unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
+        m_durationFormatter.get().allowedUnits = NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
+        m_durationFormatter.get().formattingContext = NSFormattingContextStandalone;
+        m_durationFormatter.get().maximumUnitCount = 2;
+    }
+    return [m_durationFormatter.get() stringFromTimeInterval:durationInSeconds];
 #else
     return emptyString();
 #endif
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to