| 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 23 matching lines...) Expand all Loading... |
| 34 #include "wtf/Assertions.h" | 34 #include "wtf/Assertions.h" |
| 35 | 35 |
| 36 namespace blink { | 36 namespace blink { |
| 37 | 37 |
| 38 static DocumentLifecycle::DeprecatedTransition* s_deprecatedTransitionStack = 0; | 38 static DocumentLifecycle::DeprecatedTransition* s_deprecatedTransitionStack = 0; |
| 39 | 39 |
| 40 // TODO(skyostil): Come up with a better way to store cross-frame lifecycle | 40 // TODO(skyostil): Come up with a better way to store cross-frame lifecycle |
| 41 // related data to avoid this being a global setting. | 41 // related data to avoid this being a global setting. |
| 42 static unsigned s_allowThrottlingCount = 0; | 42 static unsigned s_allowThrottlingCount = 0; |
| 43 | 43 |
| 44 DocumentLifecycle::Scope::Scope(DocumentLifecycle& lifecycle, State finalState) | 44 DocumentLifecycle::Scope::Scope(DocumentLifecycle& lifecycle, LifecycleState fin
alState) |
| 45 : m_lifecycle(lifecycle) | 45 : m_lifecycle(lifecycle) |
| 46 , m_finalState(finalState) | 46 , m_finalState(finalState) |
| 47 { | 47 { |
| 48 } | 48 } |
| 49 | 49 |
| 50 DocumentLifecycle::Scope::~Scope() | 50 DocumentLifecycle::Scope::~Scope() |
| 51 { | 51 { |
| 52 m_lifecycle.advanceTo(m_finalState); | 52 m_lifecycle.advanceTo(m_finalState); |
| 53 } | 53 } |
| 54 | 54 |
| 55 DocumentLifecycle::DeprecatedTransition::DeprecatedTransition(State from, State
to) | 55 DocumentLifecycle::DeprecatedTransition::DeprecatedTransition(LifecycleState fro
m, LifecycleState to) |
| 56 : m_previous(s_deprecatedTransitionStack) | 56 : m_previous(s_deprecatedTransitionStack) |
| 57 , m_from(from) | 57 , m_from(from) |
| 58 , m_to(to) | 58 , m_to(to) |
| 59 { | 59 { |
| 60 s_deprecatedTransitionStack = this; | 60 s_deprecatedTransitionStack = this; |
| 61 } | 61 } |
| 62 | 62 |
| 63 DocumentLifecycle::DeprecatedTransition::~DeprecatedTransition() | 63 DocumentLifecycle::DeprecatedTransition::~DeprecatedTransition() |
| 64 { | 64 { |
| 65 s_deprecatedTransitionStack = m_previous; | 65 s_deprecatedTransitionStack = m_previous; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 81 , m_detachCount(0) | 81 , m_detachCount(0) |
| 82 { | 82 { |
| 83 } | 83 } |
| 84 | 84 |
| 85 DocumentLifecycle::~DocumentLifecycle() | 85 DocumentLifecycle::~DocumentLifecycle() |
| 86 { | 86 { |
| 87 } | 87 } |
| 88 | 88 |
| 89 #if ENABLE(ASSERT) | 89 #if ENABLE(ASSERT) |
| 90 | 90 |
| 91 bool DocumentLifecycle::canAdvanceTo(State nextState) const | 91 bool DocumentLifecycle::canAdvanceTo(LifecycleState nextState) const |
| 92 { | 92 { |
| 93 // We can stop from anywhere. | 93 // We can stop from anywhere. |
| 94 if (nextState == Stopping) | 94 if (nextState == Stopping) |
| 95 return true; | 95 return true; |
| 96 | 96 |
| 97 switch (m_state) { | 97 switch (m_state) { |
| 98 case Uninitialized: | 98 case Uninitialized: |
| 99 return nextState == Inactive; | 99 return nextState == Inactive; |
| 100 case Inactive: | 100 case Inactive: |
| 101 if (nextState == StyleClean) | 101 if (nextState == StyleClean) |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 241 case Stopped: | 241 case Stopped: |
| 242 return nextState == Disposed; | 242 return nextState == Disposed; |
| 243 case Disposed: | 243 case Disposed: |
| 244 // FIXME: We can dispose a document multiple times. This seems wrong. | 244 // FIXME: We can dispose a document multiple times. This seems wrong. |
| 245 // See https://code.google.com/p/chromium/issues/detail?id=301668. | 245 // See https://code.google.com/p/chromium/issues/detail?id=301668. |
| 246 return nextState == Disposed; | 246 return nextState == Disposed; |
| 247 } | 247 } |
| 248 return false; | 248 return false; |
| 249 } | 249 } |
| 250 | 250 |
| 251 bool DocumentLifecycle::canRewindTo(State nextState) const | 251 bool DocumentLifecycle::canRewindTo(LifecycleState nextState) const |
| 252 { | 252 { |
| 253 // This transition is bogus, but we've whitelisted it anyway. | 253 // This transition is bogus, but we've whitelisted it anyway. |
| 254 if (s_deprecatedTransitionStack && m_state == s_deprecatedTransitionStack->f
rom() && nextState == s_deprecatedTransitionStack->to()) | 254 if (s_deprecatedTransitionStack && m_state == s_deprecatedTransitionStack->f
rom() && nextState == s_deprecatedTransitionStack->to()) |
| 255 return true; | 255 return true; |
| 256 return m_state == StyleClean | 256 return m_state == StyleClean |
| 257 || m_state == LayoutSubtreeChangeClean | 257 || m_state == LayoutSubtreeChangeClean |
| 258 || m_state == AfterPerformLayout | 258 || m_state == AfterPerformLayout |
| 259 || m_state == LayoutClean | 259 || m_state == LayoutClean |
| 260 || m_state == CompositingClean | 260 || m_state == CompositingClean |
| 261 || m_state == PaintInvalidationClean | 261 || m_state == PaintInvalidationClean |
| 262 || m_state == PaintClean; | 262 || m_state == PaintClean; |
| 263 } | 263 } |
| 264 | 264 |
| 265 #endif | 265 #endif |
| 266 | 266 |
| 267 void DocumentLifecycle::advanceTo(State nextState) | 267 void DocumentLifecycle::advanceTo(LifecycleState nextState) |
| 268 { | 268 { |
| 269 ASSERT_WITH_MESSAGE(canAdvanceTo(nextState), | 269 ASSERT_WITH_MESSAGE(canAdvanceTo(nextState), |
| 270 "Cannot advance document lifecycle from %s to %s.", stateAsDebugString(m
_state), stateAsDebugString(nextState)); | 270 "Cannot advance document lifecycle from %s to %s.", stateAsDebugString(m
_state), stateAsDebugString(nextState)); |
| 271 m_state = nextState; | 271 m_state = nextState; |
| 272 } | 272 } |
| 273 | 273 |
| 274 void DocumentLifecycle::ensureStateAtMost(State state) | 274 void DocumentLifecycle::ensureStateAtMost(LifecycleState state) |
| 275 { | 275 { |
| 276 ASSERT(state == VisualUpdatePending || state == StyleClean || state == Layou
tClean); | 276 ASSERT(state == VisualUpdatePending || state == StyleClean || state == Layou
tClean); |
| 277 if (m_state <= state) | 277 if (m_state <= state) |
| 278 return; | 278 return; |
| 279 ASSERT_WITH_MESSAGE(canRewindTo(state), | 279 ASSERT_WITH_MESSAGE(canRewindTo(state), |
| 280 "Cannot rewind document lifecycle from %s to %s.", stateAsDebugString(m_
state), stateAsDebugString(state)); | 280 "Cannot rewind document lifecycle from %s to %s.", stateAsDebugString(m_
state), stateAsDebugString(state)); |
| 281 m_state = state; | 281 m_state = state; |
| 282 } | 282 } |
| 283 | 283 |
| 284 bool DocumentLifecycle::throttlingAllowed() const | 284 bool DocumentLifecycle::throttlingAllowed() const |
| 285 { | 285 { |
| 286 return s_allowThrottlingCount; | 286 return s_allowThrottlingCount; |
| 287 } | 287 } |
| 288 | 288 |
| 289 #if ENABLE(ASSERT) | 289 #if ENABLE(ASSERT) |
| 290 #define DEBUG_STRING_CASE(StateName) \ | 290 #define DEBUG_STRING_CASE(StateName) \ |
| 291 case StateName: return #StateName | 291 case StateName: return #StateName |
| 292 | 292 |
| 293 const char* DocumentLifecycle::stateAsDebugString(const State state) | 293 const char* DocumentLifecycle::stateAsDebugString(const LifecycleState state) |
| 294 { | 294 { |
| 295 switch (state) { | 295 switch (state) { |
| 296 DEBUG_STRING_CASE(Uninitialized); | 296 DEBUG_STRING_CASE(Uninitialized); |
| 297 DEBUG_STRING_CASE(Inactive); | 297 DEBUG_STRING_CASE(Inactive); |
| 298 DEBUG_STRING_CASE(VisualUpdatePending); | 298 DEBUG_STRING_CASE(VisualUpdatePending); |
| 299 DEBUG_STRING_CASE(InStyleRecalc); | 299 DEBUG_STRING_CASE(InStyleRecalc); |
| 300 DEBUG_STRING_CASE(StyleClean); | 300 DEBUG_STRING_CASE(StyleClean); |
| 301 DEBUG_STRING_CASE(InLayoutSubtreeChange); | 301 DEBUG_STRING_CASE(InLayoutSubtreeChange); |
| 302 DEBUG_STRING_CASE(LayoutSubtreeChangeClean); | 302 DEBUG_STRING_CASE(LayoutSubtreeChangeClean); |
| 303 DEBUG_STRING_CASE(InPreLayout); | 303 DEBUG_STRING_CASE(InPreLayout); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 316 DEBUG_STRING_CASE(Stopped); | 316 DEBUG_STRING_CASE(Stopped); |
| 317 DEBUG_STRING_CASE(Disposed); | 317 DEBUG_STRING_CASE(Disposed); |
| 318 } | 318 } |
| 319 | 319 |
| 320 ASSERT_NOT_REACHED(); | 320 ASSERT_NOT_REACHED(); |
| 321 return "Unknown"; | 321 return "Unknown"; |
| 322 } | 322 } |
| 323 #endif | 323 #endif |
| 324 | 324 |
| 325 } // namespace blink | 325 } // namespace blink |
| OLD | NEW |