Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(684)

Unified Diff: Source/core/dom/Document.h

Issue 117703004: Free temporary GPU and memory resources held by inactive or hidden 2D canvases (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: improved test Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/core/dom/Document.h
diff --git a/Source/core/dom/Document.h b/Source/core/dom/Document.h
index 0a8f265a7edb0d75cd9a423611d5935e6992efca..d2d94793270a38c706672a471c424ad6b678767f 100644
--- a/Source/core/dom/Document.h
+++ b/Source/core/dom/Document.h
@@ -211,6 +211,26 @@ enum DocumentClass {
typedef unsigned char DocumentClassFlags;
+class Document;
+
+class DocumentVisibilityObserver {
+public:
+ DocumentVisibilityObserver(Document&);
+ virtual ~DocumentVisibilityObserver();
+
+ virtual void didChangeVisibilityState(PageVisibilityState) = 0;
+
+ // Classes that inherit Node and DocumentVisibilityObserver must have a
+ // virtual override of Node::didMoveToNewDocument that calls
+ // DocumentVisibilityObserver::setDocument
+ void setObservedDocument(Document&);
+
+private:
+ void registerObserver(Document&);
+ void unregisterObserver();
+ Document* m_document;
+};
+
class Document : public ContainerNode, public TreeScope, public SecurityContext, public ExecutionContext, public ExecutionContextClient
, public DocumentSupplementable, public LifecycleContext<Document> {
public:
@@ -361,7 +381,7 @@ public:
String visibilityState() const;
bool hidden() const;
- void dispatchVisibilityStateChangeEvent();
+ void didChangeVisibilityState();
PassRefPtr<Node> adoptNode(PassRefPtr<Node> source, ExceptionState&);
@@ -1019,6 +1039,9 @@ public:
bool hasViewportUnits() const { return m_hasViewportUnits; }
void notifyResizeForViewportUnits();
+ void registerVisibilityObserver(DocumentVisibilityObserver*);
+ void unregisterVisibilityObserver(DocumentVisibilityObserver*);
+
protected:
Document(const DocumentInit&, DocumentClassFlags = DefaultDocumentClass);
@@ -1313,6 +1336,8 @@ private:
HashSet<SVGUseElement*> m_useElementsNeedingUpdate;
bool m_hasViewportUnits;
+
+ HashSet<DocumentVisibilityObserver*> m_visibilityObservers;
};
inline void Document::notifyRemovePendingSheetIfNeeded()

Powered by Google App Engine
This is Rietveld 408576698