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 641 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
652 | 652 |
653 return false; | 653 return false; |
654 } | 654 } |
655 | 655 |
656 FastTextAutosizer::Cluster* FastTextAutosizer::currentCluster() const | 656 FastTextAutosizer::Cluster* FastTextAutosizer::currentCluster() const |
657 { | 657 { |
658 ASSERT(!m_clusterStack.isEmpty()); | 658 ASSERT(!m_clusterStack.isEmpty()); |
659 return m_clusterStack.last().get(); | 659 return m_clusterStack.last().get(); |
660 } | 660 } |
661 | 661 |
662 #ifndef NDEBUG | |
663 bool FastTextAutosizer::FingerprintMapper::mapsAreConsistent() | |
664 { | |
665 // For each fingerprint -> block mapping in m_blocksForFingerprint we should have an associated | |
666 // map from block -> fingerprint in m_fingerprints. | |
667 ReverseFingerprintMap::iterator end = m_blocksForFingerprint.end(); | |
668 for (ReverseFingerprintMap::iterator fingerprintIt = m_blocksForFingerprint. begin(); fingerprintIt != end; ++fingerprintIt) { | |
669 Fingerprint fingerprint = fingerprintIt->key; | |
670 BlockSet* blocks = fingerprintIt->value.get(); | |
671 for (BlockSet::iterator blockIt = blocks->begin(); blockIt != blocks->en d(); ++blockIt) { | |
672 const RenderBlock* block = (*blockIt); | |
673 ASSERT(m_fingerprints.get(block) == fingerprint); | |
674 } | |
675 } | |
676 | |
677 return true; | |
skobes
2014/03/05 04:12:22
It's a bit silly to have a return value that is al
pdr.
2014/03/05 04:20:31
Fair point. I was jumping through silly hoops to a
| |
678 } | |
679 #endif | |
680 | |
662 void FastTextAutosizer::FingerprintMapper::add(const RenderObject* renderer, Fin gerprint fingerprint) | 681 void FastTextAutosizer::FingerprintMapper::add(const RenderObject* renderer, Fin gerprint fingerprint) |
663 { | 682 { |
683 // Make sure to remove any existing fingerprint mapping for this renderer. | |
684 Fingerprint oldFingerprint = m_fingerprints.get(renderer); | |
685 if (oldFingerprint && renderer->isRenderBlock()) { | |
686 ReverseFingerprintMap::iterator blocksIter = m_blocksForFingerprint.find (oldFingerprint); | |
687 if (blocksIter != m_blocksForFingerprint.end()) | |
688 blocksIter->value->remove(toRenderBlock(renderer)); | |
skobes
2014/03/05 04:12:22
I think I liked it better when this just called Fi
pdr.
2014/03/05 04:20:31
Yeah, I agree. This will have one unnecessary hash
| |
689 } | |
690 | |
664 m_fingerprints.set(renderer, fingerprint); | 691 m_fingerprints.set(renderer, fingerprint); |
692 | |
693 ASSERT(mapsAreConsistent()); | |
665 } | 694 } |
666 | 695 |
667 void FastTextAutosizer::FingerprintMapper::addTentativeClusterRoot(const RenderB lock* block, Fingerprint fingerprint) | 696 void FastTextAutosizer::FingerprintMapper::addTentativeClusterRoot(const RenderB lock* block, Fingerprint fingerprint) |
668 { | 697 { |
669 add(block, fingerprint); | 698 add(block, fingerprint); |
670 | 699 |
671 ReverseFingerprintMap::AddResult addResult = m_blocksForFingerprint.add(fing erprint, PassOwnPtr<BlockSet>()); | 700 ReverseFingerprintMap::AddResult addResult = m_blocksForFingerprint.add(fing erprint, PassOwnPtr<BlockSet>()); |
672 if (addResult.isNewEntry) | 701 if (addResult.isNewEntry) |
673 addResult.storedValue->value = adoptPtr(new BlockSet); | 702 addResult.storedValue->value = adoptPtr(new BlockSet); |
674 addResult.storedValue->value->add(block); | 703 addResult.storedValue->value->add(block); |
704 ASSERT(mapsAreConsistent()); | |
675 } | 705 } |
676 | 706 |
677 void FastTextAutosizer::FingerprintMapper::remove(const RenderObject* renderer) | 707 void FastTextAutosizer::FingerprintMapper::remove(const RenderObject* renderer) |
678 { | 708 { |
679 Fingerprint fingerprint = m_fingerprints.take(renderer); | 709 Fingerprint fingerprint = m_fingerprints.take(renderer); |
680 if (!fingerprint || !renderer->isRenderBlock()) | 710 if (!fingerprint || !renderer->isRenderBlock()) |
681 return; | 711 return; |
682 | 712 |
683 ReverseFingerprintMap::iterator blocksIter = m_blocksForFingerprint.find(fin gerprint); | 713 ReverseFingerprintMap::iterator blocksIter = m_blocksForFingerprint.find(fin gerprint); |
684 if (blocksIter == m_blocksForFingerprint.end()) | 714 if (blocksIter == m_blocksForFingerprint.end()) |
685 return; | 715 return; |
686 | 716 |
687 BlockSet& blocks = *blocksIter->value; | 717 BlockSet& blocks = *blocksIter->value; |
688 blocks.remove(toRenderBlock(renderer)); | 718 blocks.remove(toRenderBlock(renderer)); |
689 if (blocks.isEmpty()) | 719 if (blocks.isEmpty()) |
690 m_blocksForFingerprint.remove(blocksIter); | 720 m_blocksForFingerprint.remove(blocksIter); |
721 ASSERT(mapsAreConsistent()); | |
691 } | 722 } |
692 | 723 |
693 FastTextAutosizer::Fingerprint FastTextAutosizer::FingerprintMapper::get(const R enderObject* renderer) | 724 FastTextAutosizer::Fingerprint FastTextAutosizer::FingerprintMapper::get(const R enderObject* renderer) |
694 { | 725 { |
695 return m_fingerprints.get(renderer); | 726 return m_fingerprints.get(renderer); |
696 } | 727 } |
697 | 728 |
698 FastTextAutosizer::BlockSet& FastTextAutosizer::FingerprintMapper::getTentativeC lusterRoots(Fingerprint fingerprint) | 729 FastTextAutosizer::BlockSet& FastTextAutosizer::FingerprintMapper::getTentativeC lusterRoots(Fingerprint fingerprint) |
699 { | 730 { |
700 return *m_blocksForFingerprint.get(fingerprint); | 731 return *m_blocksForFingerprint.get(fingerprint); |
(...skipping 27 matching lines...) Expand all Loading... | |
728 m_textAutosizer = 0; | 759 m_textAutosizer = 0; |
729 } | 760 } |
730 | 761 |
731 FastTextAutosizer::LayoutScope::~LayoutScope() | 762 FastTextAutosizer::LayoutScope::~LayoutScope() |
732 { | 763 { |
733 if (m_textAutosizer) | 764 if (m_textAutosizer) |
734 m_textAutosizer->endLayout(m_block); | 765 m_textAutosizer->endLayout(m_block); |
735 } | 766 } |
736 | 767 |
737 } // namespace WebCore | 768 } // namespace WebCore |
OLD | NEW |