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

Unified Diff: Source/core/rendering/FastTextAutosizer.h

Issue 101543009: Make cluster creation independent of fingerprinting. Keep track of current (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@pdr-multiplier
Patch Set: Created 6 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/core/frame/FrameView.cpp ('k') | Source/core/rendering/FastTextAutosizer.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/core/rendering/FastTextAutosizer.h
diff --git a/Source/core/rendering/FastTextAutosizer.h b/Source/core/rendering/FastTextAutosizer.h
index ebe41c6825f2166162af9b869c537de344db0f57..d502164cd447fb6a33bab6ef4b883755182ce9d0 100644
--- a/Source/core/rendering/FastTextAutosizer.h
+++ b/Source/core/rendering/FastTextAutosizer.h
@@ -58,51 +58,68 @@ public:
return adoptPtr(new FastTextAutosizer(document));
}
- void prepareForLayout();
-
void record(RenderBlock*);
void destroy(RenderBlock*);
+
+ void beginLayout(RenderBlock*);
void inflate(RenderBlock*);
+ void endLayout(RenderBlock*);
private:
- // FIXME(crbug.com/327811): make a proper API for this class.
struct Cluster {
- explicit Cluster(AtomicString fingerprint)
- : m_fingerprint(fingerprint)
- , m_multiplier(0)
+ explicit Cluster(RenderBlock* root, float multiplier)
+ : m_root(root)
+ , m_multiplier(multiplier)
{
}
-
- AtomicString m_fingerprint;
- WTF::HashSet<RenderBlock*> m_blocks;
+ RenderBlock* m_root;
float m_multiplier;
- const RenderObject* m_clusterRoot;
-
- void addBlock(RenderBlock* block)
- {
- m_blocks.add(block);
- setNeedsClusterRecalc();
- }
+ };
- void setNeedsClusterRecalc() { m_multiplier = 0; m_clusterRoot = 0; }
- bool needsClusterRecalc() const { return !m_clusterRoot || m_multiplier <= 0; }
+ typedef WTF::HashSet<RenderBlock*> BlockSet;
+ typedef WTF::HashMap<RenderBlock*, OwnPtr<Cluster> > ClusterMap;
+ typedef WTF::Vector<Cluster*> ClusterStack;
+
+ // Fingerprints are computed during style recalc, for (some subset of)
+ // blocks that will become cluster roots.
+ class FingerprintMapper {
+ public:
+ void add(RenderBlock*, AtomicString);
+ void remove(RenderBlock*);
+ AtomicString get(RenderBlock*);
+ BlockSet& getBlocks(AtomicString);
+ private:
+ typedef WTF::HashMap<RenderBlock*, AtomicString> FingerprintMap;
+ typedef WTF::HashMap<AtomicString, OwnPtr<BlockSet> > ReverseFingerprintMap;
+
+ FingerprintMap m_fingerprints;
+ ReverseFingerprintMap m_blocksForFingerprint;
};
explicit FastTextAutosizer(Document*);
- bool updateWindowWidth();
-
- AtomicString fingerprint(const RenderBlock*);
- void recalcClusterIfNeeded(Cluster*);
-
- int m_windowWidth;
+ bool enabled();
+ void prepareWindowInfo(RenderView*);
+ bool shouldBeClusterRoot(RenderBlock*);
+ bool clusterWantsAutosizing(RenderBlock*);
+ AtomicString computeFingerprint(RenderBlock*);
+ Cluster* getOrCreateCluster(RenderBlock*);
+ Cluster* createCluster(RenderBlock*);
+ Cluster* addSupercluster(AtomicString, RenderBlock*);
+ RenderBlock* deepestCommonAncestor(BlockSet&);
+ float computeMultiplier(RenderBlock*);
+ void applyMultiplier(RenderObject*, float);
Document* m_document;
-
- typedef WTF::HashMap<const RenderBlock*, Cluster*> BlockToClusterMap;
- typedef WTF::HashMap<AtomicString, OwnPtr<Cluster> > FingerprintToClusterMap;
- BlockToClusterMap m_clusterForBlock;
- FingerprintToClusterMap m_clusterForFingerprint;
+ int m_windowWidth; // Frame width in density-independent pixels (DIPs).
+ int m_layoutWidth; // Layout width in CSS pixels.
+
+ // Clusters are created and destroyed during layout. The map key is the
+ // cluster root. Clusters whose roots share the same fingerprint use the
+ // same multiplier.
+ ClusterMap m_clusters;
+ ClusterStack m_clusterStack;
+ FingerprintMapper m_fingerprintMapper;
};
} // namespace WebCore
« no previous file with comments | « Source/core/frame/FrameView.cpp ('k') | Source/core/rendering/FastTextAutosizer.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698