OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2012 Google Inc. All rights reserved. | 2 * Copyright (C) 2012 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 | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * | 7 * |
8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
(...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
513 if (m_layer && !m_destructionInProgress) | 513 if (m_layer && !m_destructionInProgress) |
514 checkSurfaceValid(); // To ensure rate limiter is disabled if context is
lost. | 514 checkSurfaceValid(); // To ensure rate limiter is disabled if context is
lost. |
515 return m_contextProvider ? m_contextProvider->context3d() : 0; | 515 return m_contextProvider ? m_contextProvider->context3d() : 0; |
516 } | 516 } |
517 | 517 |
518 bool Canvas2DLayerBridge::checkSurfaceValid() | 518 bool Canvas2DLayerBridge::checkSurfaceValid() |
519 { | 519 { |
520 ASSERT(!m_destructionInProgress); | 520 ASSERT(!m_destructionInProgress); |
521 if (m_destructionInProgress) | 521 if (m_destructionInProgress) |
522 return false; | 522 return false; |
| 523 if (isHibernating()) |
| 524 return true; |
523 if (!m_layer) | 525 if (!m_layer) |
524 return true; | 526 return true; |
525 if (!m_surface) | 527 if (!m_surface) |
526 return false; | 528 return false; |
527 if (m_contextProvider->context3d()->isContextLost()) { | 529 if (m_contextProvider->context3d()->isContextLost()) { |
528 m_surface.clear(); | 530 m_surface.clear(); |
529 for (auto mailboxInfo = m_mailboxes.begin(); mailboxInfo != m_mailboxes.
end(); ++mailboxInfo) { | 531 for (auto mailboxInfo = m_mailboxes.begin(); mailboxInfo != m_mailboxes.
end(); ++mailboxInfo) { |
530 if (mailboxInfo->m_image) | 532 if (mailboxInfo->m_image) |
531 mailboxInfo->m_image.clear(); | 533 mailboxInfo->m_image.clear(); |
532 } | 534 } |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
575 bool Canvas2DLayerBridge::prepareMailbox(WebExternalTextureMailbox* outMailbox,
WebExternalBitmap* bitmap) | 577 bool Canvas2DLayerBridge::prepareMailbox(WebExternalTextureMailbox* outMailbox,
WebExternalBitmap* bitmap) |
576 { | 578 { |
577 if (m_destructionInProgress) { | 579 if (m_destructionInProgress) { |
578 // It can be hit in the following sequence. | 580 // It can be hit in the following sequence. |
579 // 1. Canvas draws something. | 581 // 1. Canvas draws something. |
580 // 2. The compositor begins the frame. | 582 // 2. The compositor begins the frame. |
581 // 3. Javascript makes a context be lost. | 583 // 3. Javascript makes a context be lost. |
582 // 4. Here. | 584 // 4. Here. |
583 return false; | 585 return false; |
584 } | 586 } |
585 ASSERT(isAccelerated() || isHibernating()); | 587 ASSERT(isAccelerated() || isHibernating() || m_softwareRenderingWhileHidden)
; |
586 | 588 |
587 // if hibernating but not hidden, we want to wake up from | 589 // if hibernating but not hidden, we want to wake up from |
588 // hibernation | 590 // hibernation |
589 if (isHibernating() && isHidden()) | 591 if ((isHibernating() || m_softwareRenderingWhileHidden) && isHidden()) |
590 return false; | 592 return false; |
591 | 593 |
592 if (bitmap) { | 594 if (bitmap) { |
593 // Using accelerated 2d canvas with software renderer, which | 595 // Using accelerated 2d canvas with software renderer, which |
594 // should only happen in tests that use fake graphics contexts | 596 // should only happen in tests that use fake graphics contexts |
595 // or in Android WebView in software mode. In this case, we do | 597 // or in Android WebView in software mode. In this case, we do |
596 // not care about producing any results for this canvas. | 598 // not care about producing any results for this canvas. |
597 skipQueuedDrawCommands(); | 599 skipQueuedDrawCommands(); |
598 m_lastImageId = 0; | 600 m_lastImageId = 0; |
599 return false; | 601 return false; |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
820 m_image = other.m_image; | 822 m_image = other.m_image; |
821 m_parentLayerBridge = other.m_parentLayerBridge; | 823 m_parentLayerBridge = other.m_parentLayerBridge; |
822 } | 824 } |
823 | 825 |
824 void Canvas2DLayerBridge::Logger::reportHibernationEvent(HibernationEvent event) | 826 void Canvas2DLayerBridge::Logger::reportHibernationEvent(HibernationEvent event) |
825 { | 827 { |
826 blink::Platform::current()->histogramEnumeration("Canvas.HibernationEvents",
event, HibernationEventCount); | 828 blink::Platform::current()->histogramEnumeration("Canvas.HibernationEvents",
event, HibernationEventCount); |
827 } | 829 } |
828 | 830 |
829 } // namespace blink | 831 } // namespace blink |
OLD | NEW |