2008-04-12  David Hyatt  <hyatt@apple.com>

        Memory management cleanup for the new StyleCachedImage and StyleGeneratedImage classes.  Make the back end
        values hold refptrs to cached front end values.  This will avoid malloc churn as RenderStyles get
        re-resolved.

        Reviewed by olliej

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed):
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSCursorImageValue.h:
        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::CSSImageGeneratorValue):
        (WebCore::CSSImageGeneratorValue::generatedImage):
        * css/CSSImageGeneratorValue.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::CSSImageValue):
        (WebCore::CSSImageValue::~CSSImageValue):
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::createStyleImage):
        * css/CSSStyleSelector.h:
        * rendering/RenderStyle.h:
        (WebCore::StyleCachedImage::cachedImage):
        (WebCore::StyleGeneratedImage::StyleGeneratedImage):
        (WebCore::StyleGeneratedImage::data):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@31849 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/WebCore/css/CSSImageGeneratorValue.h b/WebCore/css/CSSImageGeneratorValue.h
index e2d1adf..847c8e5 100644
--- a/WebCore/css/CSSImageGeneratorValue.h
+++ b/WebCore/css/CSSImageGeneratorValue.h
@@ -32,6 +32,7 @@
 #include "IntSizeHash.h"
 #include <wtf/HashMap.h>
 #include <wtf/HashCountedSet.h>
+#include <wtf/PassRefPtr.h>
 #include <wtf/RefPtr.h>
 #include <wtf/Vector.h>
 
@@ -39,10 +40,12 @@
 
 class Image;
 class IntSize;
+class StyleGeneratedImage;
 class RenderObject;
 
 class CSSImageGeneratorValue : public CSSValue {
 public:
+    CSSImageGeneratorValue();
     virtual ~CSSImageGeneratorValue();
 
     virtual bool isImageGeneratorValue() const { return true; }
@@ -50,6 +53,8 @@
     void addClient(RenderObject*, const IntSize&);
     void removeClient(RenderObject*);
     virtual Image* image(RenderObject*, const IntSize&) = 0;
+
+    StyleGeneratedImage* generatedImage();
     
 protected:
     Image* getImage(RenderObject*, const IntSize&);
@@ -59,6 +64,8 @@
     HashMap<RenderObject*, IntSize> m_clients; // A map from RenderObjects to image sizes.
     HashMap<IntSize, Image*> m_images; // A map from sizes to generated images.
     
+    RefPtr<StyleGeneratedImage> m_image;
+    bool m_accessedImage;
 };
 
 } // namespace WebCore