Title: [99555] trunk/Source/WebCore
- Revision
- 99555
- Author
- [email protected]
- Date
- 2011-11-08 05:22:03 -0800 (Tue, 08 Nov 2011)
Log Message
CSSCanvasValue: Remove inheritance from CanvasObserver.
<http://webkit.org/b/71796>
Reviewed by Antti Koivisto.
To completely devirtualize all the CSSValues, we need to remove
CSSCanvasValue's inheritance from CanvasObserver, as that is forcing
a vptr into the class.
Use the same approach as CSSImportRule and make a simple proxying
CanvasObserver subclass and put that as a member variable of the value.
* css/CSSCanvasValue.cpp:
(WebCore::CSSCanvasValue::~CSSCanvasValue):
(WebCore::CSSCanvasValue::element):
* css/CSSCanvasValue.h:
(WebCore::CSSCanvasValue::CSSCanvasValue):
(WebCore::CSSCanvasValue::CanvasObserverProxy::CanvasObserverProxy):
(WebCore::CSSCanvasValue::CanvasObserverProxy::~CanvasObserverProxy):
(WebCore::CSSCanvasValue::CanvasObserverProxy::canvasChanged):
(WebCore::CSSCanvasValue::CanvasObserverProxy::canvasResized):
(WebCore::CSSCanvasValue::CanvasObserverProxy::canvasDestroyed):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (99554 => 99555)
--- trunk/Source/WebCore/ChangeLog 2011-11-08 13:06:11 UTC (rev 99554)
+++ trunk/Source/WebCore/ChangeLog 2011-11-08 13:22:03 UTC (rev 99555)
@@ -1,3 +1,28 @@
+2011-11-08 Andreas Kling <[email protected]>
+
+ CSSCanvasValue: Remove inheritance from CanvasObserver.
+ <http://webkit.org/b/71796>
+
+ Reviewed by Antti Koivisto.
+
+ To completely devirtualize all the CSSValues, we need to remove
+ CSSCanvasValue's inheritance from CanvasObserver, as that is forcing
+ a vptr into the class.
+
+ Use the same approach as CSSImportRule and make a simple proxying
+ CanvasObserver subclass and put that as a member variable of the value.
+
+ * css/CSSCanvasValue.cpp:
+ (WebCore::CSSCanvasValue::~CSSCanvasValue):
+ (WebCore::CSSCanvasValue::element):
+ * css/CSSCanvasValue.h:
+ (WebCore::CSSCanvasValue::CSSCanvasValue):
+ (WebCore::CSSCanvasValue::CanvasObserverProxy::CanvasObserverProxy):
+ (WebCore::CSSCanvasValue::CanvasObserverProxy::~CanvasObserverProxy):
+ (WebCore::CSSCanvasValue::CanvasObserverProxy::canvasChanged):
+ (WebCore::CSSCanvasValue::CanvasObserverProxy::canvasResized):
+ (WebCore::CSSCanvasValue::CanvasObserverProxy::canvasDestroyed):
+
2011-11-08 Yury Semikhatsky <[email protected]>
Web Inspector: display notification in the front-end when inspected worker terminates
Modified: trunk/Source/WebCore/css/CSSCanvasValue.cpp (99554 => 99555)
--- trunk/Source/WebCore/css/CSSCanvasValue.cpp 2011-11-08 13:06:11 UTC (rev 99554)
+++ trunk/Source/WebCore/css/CSSCanvasValue.cpp 2011-11-08 13:22:03 UTC (rev 99555)
@@ -34,7 +34,7 @@
CSSCanvasValue::~CSSCanvasValue()
{
if (m_element)
- m_element->removeObserver(this);
+ m_element->removeObserver(&m_canvasObserver);
}
String CSSCanvasValue::cssText() const
@@ -78,7 +78,7 @@
m_element = document->getCSSCanvasElement(m_name);
if (!m_element)
return 0;
- m_element->addObserver(this);
+ m_element->addObserver(&m_canvasObserver);
}
return m_element;
}
Modified: trunk/Source/WebCore/css/CSSCanvasValue.h (99554 => 99555)
--- trunk/Source/WebCore/css/CSSCanvasValue.h 2011-11-08 13:06:11 UTC (rev 99554)
+++ trunk/Source/WebCore/css/CSSCanvasValue.h 2011-11-08 13:22:03 UTC (rev 99555)
@@ -33,7 +33,7 @@
class Document;
-class CSSCanvasValue : public CSSImageGeneratorValue, private CanvasObserver {
+class CSSCanvasValue : public CSSImageGeneratorValue {
public:
static PassRefPtr<CSSCanvasValue> create() { return adoptRef(new CSSCanvasValue); }
virtual ~CSSCanvasValue();
@@ -49,16 +49,41 @@
private:
CSSCanvasValue()
: CSSImageGeneratorValue(CanvasClass)
+ , m_canvasObserver(this)
, m_element(0)
{
}
- virtual void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect);
- virtual void canvasResized(HTMLCanvasElement*);
- virtual void canvasDestroyed(HTMLCanvasElement*);
+ // NOTE: We put the CanvasObserver in a member instead of inheriting from it
+ // to avoid adding a vptr to CSSCanvasValue.
+ class CanvasObserverProxy : public CanvasObserver {
+ public:
+ CanvasObserverProxy(CSSCanvasValue* ownerValue) : m_ownerValue(ownerValue) { }
+ virtual ~CanvasObserverProxy() { }
+ virtual void canvasChanged(HTMLCanvasElement* canvas, const FloatRect& changedRect)
+ {
+ m_ownerValue->canvasChanged(canvas, changedRect);
+ }
+ virtual void canvasResized(HTMLCanvasElement* canvas)
+ {
+ m_ownerValue->canvasResized(canvas);
+ }
+ virtual void canvasDestroyed(HTMLCanvasElement* canvas)
+ {
+ m_ownerValue->canvasDestroyed(canvas);
+ }
+ private:
+ CSSCanvasValue* m_ownerValue;
+ };
+ void canvasChanged(HTMLCanvasElement*, const FloatRect& changedRect);
+ void canvasResized(HTMLCanvasElement*);
+ void canvasDestroyed(HTMLCanvasElement*);
+
HTMLCanvasElement* element(Document*);
+ CanvasObserverProxy m_canvasObserver;
+
// The name of the canvas.
String m_name;
// The document supplies the element and owns it.
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes