Title: [161239] trunk/Source/WebCore
Revision
161239
Author
timothy_hor...@apple.com
Date
2014-01-02 16:10:48 -0800 (Thu, 02 Jan 2014)

Log Message

ImageBufferBackingStoreCache should use DeferrableOneShotTimer
https://bugs.webkit.org/show_bug.cgi?id=126155

Reviewed by Anders Carlsson.

Since ImageBufferBackingStoreCache's purge timer is pushed out every time
a backing store is deallocated, we can easily waste a lot of time rescheduling
the timer. Since it's a cache purge timer and doesn't need that kind of precision,
adopt DeferrableOneShotTimer, which is much more performant when deferred frequently.

* platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
(WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
(WebCore::ImageBufferBackingStoreCache::timerFired):
(WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
* platform/graphics/cg/ImageBufferBackingStoreCache.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (161238 => 161239)


--- trunk/Source/WebCore/ChangeLog	2014-01-02 23:58:16 UTC (rev 161238)
+++ trunk/Source/WebCore/ChangeLog	2014-01-03 00:10:48 UTC (rev 161239)
@@ -1,3 +1,21 @@
+2014-01-02  Tim Horton  <timothy_hor...@apple.com>
+
+        ImageBufferBackingStoreCache should use DeferrableOneShotTimer
+        https://bugs.webkit.org/show_bug.cgi?id=126155
+
+        Reviewed by Anders Carlsson.
+
+        Since ImageBufferBackingStoreCache's purge timer is pushed out every time
+        a backing store is deallocated, we can easily waste a lot of time rescheduling
+        the timer. Since it's a cache purge timer and doesn't need that kind of precision,
+        adopt DeferrableOneShotTimer, which is much more performant when deferred frequently.
+
+        * platform/graphics/cg/ImageBufferBackingStoreCache.cpp:
+        (WebCore::ImageBufferBackingStoreCache::ImageBufferBackingStoreCache):
+        (WebCore::ImageBufferBackingStoreCache::timerFired):
+        (WebCore::ImageBufferBackingStoreCache::schedulePurgeTimer):
+        * platform/graphics/cg/ImageBufferBackingStoreCache.h:
+
 2014-01-02  Myles C. Maxfield  <mmaxfi...@apple.com>
 
         Allow ImageBuffer to re-use IOSurfaces

Modified: trunk/Source/WebCore/platform/graphics/cg/ImageBufferBackingStoreCache.cpp (161238 => 161239)


--- trunk/Source/WebCore/platform/graphics/cg/ImageBufferBackingStoreCache.cpp	2014-01-02 23:58:16 UTC (rev 161238)
+++ trunk/Source/WebCore/platform/graphics/cg/ImageBufferBackingStoreCache.cpp	2014-01-03 00:10:48 UTC (rev 161239)
@@ -29,6 +29,8 @@
 #if USE(IOSURFACE_CANVAS_BACKING_STORE)
 #include <IOSurface/IOSurface.h>
 
+static const double purgeInterval = 5;
+
 namespace WebCore {
 
 static RetainPtr<IOSurfaceRef> createIOSurface(const IntSize& size)
@@ -69,6 +71,12 @@
     return adoptCF(IOSurfaceCreate(dict.get()));
 }
 
+ImageBufferBackingStoreCache::ImageBufferBackingStoreCache()
+    : m_purgeTimer(this, &ImageBufferBackingStoreCache::timerFired, purgeInterval)
+    , m_pixelsCached(0)
+    {
+    }
+
 ImageBufferBackingStoreCache& ImageBufferBackingStoreCache::get()
 {
     DEFINE_STATIC_LOCAL(ImageBufferBackingStoreCache, cache, ());
@@ -200,7 +208,7 @@
     schedulePurgeTimer();
 }
 
-void ImageBufferBackingStoreCache::timerFired(Timer<ImageBufferBackingStoreCache>*)
+void ImageBufferBackingStoreCache::timerFired(DeferrableOneShotTimer<ImageBufferBackingStoreCache>*)
 {
     while (!m_cachedSurfaces.isEmpty()) {
         CachedSurfaceMap::iterator iter = m_cachedSurfaces.begin();
@@ -210,11 +218,7 @@
 
 void ImageBufferBackingStoreCache::schedulePurgeTimer()
 {
-    if (m_purgeTimer.isActive())
-        m_purgeTimer.stop();
-
-    static const double purgeInterval = 5;
-    m_purgeTimer.startOneShot(purgeInterval);
+    m_purgeTimer.restart();
 }
 
 }

Modified: trunk/Source/WebCore/platform/graphics/cg/ImageBufferBackingStoreCache.h (161238 => 161239)


--- trunk/Source/WebCore/platform/graphics/cg/ImageBufferBackingStoreCache.h	2014-01-02 23:58:16 UTC (rev 161238)
+++ trunk/Source/WebCore/platform/graphics/cg/ImageBufferBackingStoreCache.h	2014-01-03 00:10:48 UTC (rev 161239)
@@ -63,11 +63,7 @@
     void deallocate(IOSurfaceRef);
 
 private:
-    ImageBufferBackingStoreCache()
-        : m_purgeTimer(this, &ImageBufferBackingStoreCache::timerFired)
-        , m_pixelsCached(0)
-    {
-    }
+    ImageBufferBackingStoreCache();
 
     struct IOSurfaceAndContextWithCreationParams : public IOSurfaceAndContext, public DoublyLinkedListNode<IOSurfaceAndContextWithCreationParams> {
         IOSurfaceAndContextWithCreationParams()
@@ -102,10 +98,10 @@
     bool tryTakeFromCache(const IntSize&, CGColorSpaceRef, bool needExactSize, IOSurfaceAndContextWithCreationParams& outInfo);
     bool isAcceptableSurface(const IOSurfaceAndContextWithCreationParams&, const IntSize&, CGColorSpaceRef, bool needExactSize) const;
 
-    void timerFired(Timer<ImageBufferBackingStoreCache>*);
+    void timerFired(DeferrableOneShotTimer<ImageBufferBackingStoreCache>*);
     void schedulePurgeTimer();
 
-    Timer<ImageBufferBackingStoreCache> m_purgeTimer;
+    DeferrableOneShotTimer<ImageBufferBackingStoreCache> m_purgeTimer;
     ActiveSurfaceMap m_activeSurfaces;
     CachedSurfaceMap m_cachedSurfaces;
     int m_pixelsCached;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to