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