WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Proposed patch
bug-71796.diff (text/plain), 4.17 KB, created by
Andreas Kling
on 2011-11-08 04:38:54 PST
(
hide
)
Description:
Proposed patch
Filename:
MIME Type:
Creator:
Andreas Kling
Created:
2011-11-08 04:38:54 PST
Size:
4.17 KB
patch
obsolete
>diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 60a15c8..291dfc2 100755 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,28 @@ >+2011-11-08 Andreas Kling <kling@webkit.org> >+ >+ CSSCanvasValue: Remove inheritance from CanvasObserver. >+ <http://webkit.org/b/71796> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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-07 Andreas Kling <kling@webkit.org> > > CSSValue: Devirtualize isFooType(). >diff --git a/Source/WebCore/css/CSSCanvasValue.cpp b/Source/WebCore/css/CSSCanvasValue.cpp >index 76e77f6..056a5fd 100644 >--- a/Source/WebCore/css/CSSCanvasValue.cpp >+++ b/Source/WebCore/css/CSSCanvasValue.cpp >@@ -34,7 +34,7 @@ namespace WebCore { > CSSCanvasValue::~CSSCanvasValue() > { > if (m_element) >- m_element->removeObserver(this); >+ m_element->removeObserver(&m_canvasObserver); > } > > String CSSCanvasValue::cssText() const >@@ -78,7 +78,7 @@ HTMLCanvasElement* CSSCanvasValue::element(Document* document) > m_element = document->getCSSCanvasElement(m_name); > if (!m_element) > return 0; >- m_element->addObserver(this); >+ m_element->addObserver(&m_canvasObserver); > } > return m_element; > } >diff --git a/Source/WebCore/css/CSSCanvasValue.h b/Source/WebCore/css/CSSCanvasValue.h >index 4cee2f7..4f6fef5 100644 >--- a/Source/WebCore/css/CSSCanvasValue.h >+++ b/Source/WebCore/css/CSSCanvasValue.h >@@ -33,7 +33,7 @@ namespace WebCore { > > 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 @@ public: > 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.
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
koivisto
:
review+
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 71796
: 114040