OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
143 : m_documentLifecycle(documentLifecycle) { | 143 : m_documentLifecycle(documentLifecycle) { |
144 m_documentLifecycle.incrementDetachCount(); | 144 m_documentLifecycle.incrementDetachCount(); |
145 } | 145 } |
146 | 146 |
147 ~DetachScope() { m_documentLifecycle.decrementDetachCount(); } | 147 ~DetachScope() { m_documentLifecycle.decrementDetachCount(); } |
148 | 148 |
149 private: | 149 private: |
150 DocumentLifecycle& m_documentLifecycle; | 150 DocumentLifecycle& m_documentLifecycle; |
151 }; | 151 }; |
152 | 152 |
| 153 // This scope should only be used when we need to call hasEditableStyle(), but |
| 154 // the document's style may be dirty and cannot be updated due to some other |
| 155 // blockers. In the long term, we should fix those blockers and remove this |
| 156 // scope. See crbug.com/667575 for details. |
| 157 class DisallowStyleRecalcScope { |
| 158 STACK_ALLOCATED(); |
| 159 DISALLOW_COPY_AND_ASSIGN(DisallowStyleRecalcScope); |
| 160 |
| 161 public: |
| 162 explicit DisallowStyleRecalcScope(DocumentLifecycle& documentLifecycle) |
| 163 : m_documentLifecycle(documentLifecycle) { |
| 164 m_documentLifecycle.incrementNoStyleRecalcCount(); |
| 165 } |
| 166 |
| 167 ~DisallowStyleRecalcScope() { |
| 168 m_documentLifecycle.decrementNoStyleRecalcCount(); |
| 169 } |
| 170 |
| 171 private: |
| 172 DocumentLifecycle& m_documentLifecycle; |
| 173 }; |
| 174 |
153 // Throttling is disabled by default. Instantiating this class allows | 175 // Throttling is disabled by default. Instantiating this class allows |
154 // throttling (e.g., during BeginMainFrame). If a script needs to run inside | 176 // throttling (e.g., during BeginMainFrame). If a script needs to run inside |
155 // this scope, DisallowThrottlingScope should be used to let the script | 177 // this scope, DisallowThrottlingScope should be used to let the script |
156 // perform a synchronous layout if necessary. | 178 // perform a synchronous layout if necessary. |
157 class CORE_EXPORT AllowThrottlingScope { | 179 class CORE_EXPORT AllowThrottlingScope { |
158 STACK_ALLOCATED(); | 180 STACK_ALLOCATED(); |
159 WTF_MAKE_NONCOPYABLE(AllowThrottlingScope); | 181 WTF_MAKE_NONCOPYABLE(AllowThrottlingScope); |
160 | 182 |
161 public: | 183 public: |
162 AllowThrottlingScope(DocumentLifecycle&); | 184 AllowThrottlingScope(DocumentLifecycle&); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 m_disallowTransitionCount--; | 219 m_disallowTransitionCount--; |
198 } | 220 } |
199 | 221 |
200 bool inDetach() const { return m_detachCount; } | 222 bool inDetach() const { return m_detachCount; } |
201 void incrementDetachCount() { m_detachCount++; } | 223 void incrementDetachCount() { m_detachCount++; } |
202 void decrementDetachCount() { | 224 void decrementDetachCount() { |
203 DCHECK_GT(m_detachCount, 0); | 225 DCHECK_GT(m_detachCount, 0); |
204 m_detachCount--; | 226 m_detachCount--; |
205 } | 227 } |
206 | 228 |
| 229 bool styleRecalcDisallowed() const { return m_disallowStyleRecalcCount; } |
| 230 void incrementNoStyleRecalcCount() { ++m_disallowStyleRecalcCount; } |
| 231 void decrementNoStyleRecalcCount() { --m_disallowStyleRecalcCount; } |
| 232 |
207 bool throttlingAllowed() const; | 233 bool throttlingAllowed() const; |
208 | 234 |
209 private: | 235 private: |
210 #if DCHECK_IS_ON() | 236 #if DCHECK_IS_ON() |
211 static const char* stateAsDebugString(const LifecycleState); | 237 static const char* stateAsDebugString(const LifecycleState); |
212 bool canAdvanceTo(LifecycleState) const; | 238 bool canAdvanceTo(LifecycleState) const; |
213 bool canRewindTo(LifecycleState) const; | 239 bool canRewindTo(LifecycleState) const; |
214 #endif | 240 #endif |
215 | 241 |
216 LifecycleState m_state; | 242 LifecycleState m_state; |
217 int m_detachCount; | 243 int m_detachCount; |
218 int m_disallowTransitionCount; | 244 int m_disallowTransitionCount; |
| 245 int m_disallowStyleRecalcCount; |
219 }; | 246 }; |
220 | 247 |
221 inline bool DocumentLifecycle::stateAllowsTreeMutations() const { | 248 inline bool DocumentLifecycle::stateAllowsTreeMutations() const { |
222 // FIXME: We should not allow mutations in InPreLayout or AfterPerformLayout | 249 // FIXME: We should not allow mutations in InPreLayout or AfterPerformLayout |
223 // either, but we need to fix MediaList listeners and plugins first. | 250 // either, but we need to fix MediaList listeners and plugins first. |
224 return m_state != InStyleRecalc && m_state != InPerformLayout && | 251 return m_state != InStyleRecalc && m_state != InPerformLayout && |
225 m_state != InCompositingUpdate && m_state != InPrePaint && | 252 m_state != InCompositingUpdate && m_state != InPrePaint && |
226 m_state != InPaint; | 253 m_state != InPaint; |
227 } | 254 } |
228 | 255 |
(...skipping 17 matching lines...) Expand all Loading... |
246 | 273 |
247 inline bool DocumentLifecycle::stateAllowsLayoutInvalidation() const { | 274 inline bool DocumentLifecycle::stateAllowsLayoutInvalidation() const { |
248 return m_state != InPerformLayout && m_state != InCompositingUpdate && | 275 return m_state != InPerformLayout && m_state != InCompositingUpdate && |
249 m_state != InPaintInvalidation && m_state != InPrePaint && | 276 m_state != InPaintInvalidation && m_state != InPrePaint && |
250 m_state != InPaint; | 277 m_state != InPaint; |
251 } | 278 } |
252 | 279 |
253 } // namespace blink | 280 } // namespace blink |
254 | 281 |
255 #endif | 282 #endif |
OLD | NEW |