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

Side by Side Diff: Source/core/css/MediaQueryMatcher.h

Issue 348893004: Rework MediaQueryMatcher to batch up listener notification (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: ordering test Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 2 * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies)
3 * 3 *
4 * This library is free software; you can redistribute it and/or 4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public 5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either 6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version. 7 * version 2 of the License, or (at your option) any later version.
8 * 8 *
9 * This library is distributed in the hope that it will be useful, 9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 23 matching lines...) Expand all
34 class MediaQuerySet; 34 class MediaQuerySet;
35 35
36 // MediaQueryMatcher class is responsible for keeping a vector of pairs 36 // MediaQueryMatcher class is responsible for keeping a vector of pairs
37 // MediaQueryList x MediaQueryListListener. It is responsible for evaluating the queries 37 // MediaQueryList x MediaQueryListListener. It is responsible for evaluating the queries
38 // whenever it is needed and to call the listeners if the corresponding query ha s changed. 38 // whenever it is needed and to call the listeners if the corresponding query ha s changed.
39 // The listeners must be called in the very same order in which they have been a dded. 39 // The listeners must be called in the very same order in which they have been a dded.
40 40
41 class MediaQueryMatcher FINAL : public RefCountedWillBeGarbageCollected<MediaQue ryMatcher> { 41 class MediaQueryMatcher FINAL : public RefCountedWillBeGarbageCollected<MediaQue ryMatcher> {
42 DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(MediaQueryMatcher); 42 DECLARE_EMPTY_DESTRUCTOR_WILL_BE_REMOVED(MediaQueryMatcher);
43 public: 43 public:
44 static PassRefPtrWillBeRawPtr<MediaQueryMatcher> create(Document* document) { return adoptRefWillBeNoop(new MediaQueryMatcher(document)); } 44 static PassRefPtrWillBeRawPtr<MediaQueryMatcher> create(Document& document) { return adoptRefWillBeNoop(new MediaQueryMatcher(document)); }
45 void documentDestroyed(); 45 void documentDetached();
46 46
47 void addListener(PassRefPtrWillBeRawPtr<MediaQueryListListener>, PassRefPtrW illBeRawPtr<MediaQueryList>); 47 void addMediaQueryList(MediaQueryList*);
48 void removeListener(MediaQueryListListener*, MediaQueryList*); 48 void removeMediaQueryList(MediaQueryList*);
49 49
50 PassRefPtrWillBeRawPtr<MediaQueryList> matchMedia(const String&); 50 PassRefPtrWillBeRawPtr<MediaQueryList> matchMedia(const String&);
51 51
52 unsigned evaluationRound() const { return m_evaluationRound; } 52 void mediaFeaturesChanged();
53 void styleResolverChanged();
54 bool evaluate(const MediaQuerySet*); 53 bool evaluate(const MediaQuerySet*);
55 54
56 void trace(Visitor*); 55 void trace(Visitor*);
57 56
58 private: 57 private:
59 class Listener FINAL : public NoBaseWillBeGarbageCollected<Listener> { 58 explicit MediaQueryMatcher(Document&);
60 public:
61 Listener(PassRefPtrWillBeRawPtr<MediaQueryListListener>, PassRefPtrWillB eRawPtr<MediaQueryList>);
62 void evaluate(MediaQueryEvaluator*);
63 59
64 MediaQueryListListener* listener() { return m_listener.get(); }
65 MediaQueryList* query() { return m_query.get(); }
66
67 void trace(Visitor*);
68
69 private:
70 RefPtrWillBeMember<MediaQueryListListener> m_listener;
71 RefPtrWillBeMember<MediaQueryList> m_query;
72 };
73
74 MediaQueryMatcher(Document*);
75 PassOwnPtr<MediaQueryEvaluator> prepareEvaluator() const;
76 AtomicString mediaType() const; 60 AtomicString mediaType() const;
77 61
62 PassOwnPtr<MediaQueryEvaluator> createEvaluator() const;
63
78 RawPtrWillBeMember<Document> m_document; 64 RawPtrWillBeMember<Document> m_document;
79 WillBeHeapVector<OwnPtrWillBeMember<Listener> > m_listeners; 65 OwnPtr<MediaQueryEvaluator> m_evaluator;
80 66
81 // This value is incremented at style selector changes. 67 typedef HeapListHashSet<RawPtrWillBeMember<MediaQueryList> > MediaQueryListS et;
82 // It is used to avoid evaluating queries more then once and to make sure 68 MediaQueryListSet m_mediaLists;
83 // that a media query result change is notified exactly once.
84 unsigned m_evaluationRound;
85 }; 69 };
86 70
87 } 71 }
88 72
89 #endif // MediaQueryMatcher_h 73 #endif // MediaQueryMatcher_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698