From 0867caaab3570fa947b8f937ef9b707e1c60d8e2 Mon Sep 17 00:00:00 2001 From: Boris Zbarsky Date: Wed, 7 Jun 2017 04:13:50 -0700 Subject: [PATCH] servo: Merge #17198 - Increase the size of the style sharing cache to 31 (from bzbarsky:bigger-sharing-cache); r=bholley Still a lot of guesswork here, but this does seem to get us better sharing. See https://bugzilla.mozilla.org/show_bug.cgi?id=1369621 for some data. --- - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix https://bugzilla.mozilla.org/show_bug.cgi?id=1369621 - [ ] There are tests for these changes OR - [ ] These changes do not require tests because _____ Source-Repo: https://github.com/servo/servo Source-Revision: fdd1d719f34dccb2e808f91977bf134dc0bc6ab7 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : f0aa8402e468e98650faee53072ee43732478d80 --- servo/components/style/parallel.rs | 10 ++++++---- servo/components/style/sharing/mod.rs | 6 ++++-- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/servo/components/style/parallel.rs b/servo/components/style/parallel.rs index 859548d3c8b8..fe6bceb4da14 100644 --- a/servo/components/style/parallel.rs +++ b/servo/components/style/parallel.rs @@ -37,9 +37,11 @@ use traversal::{DomTraversal, PerLevelTraversalData, PreTraverseToken}; /// /// Larger values will increase style sharing cache hits and general DOM locality /// at the expense of decreased opportunities for parallelism. The style sharing -/// cache can hold 8 entries, but not all styles are shareable, so we set this -/// value to 16. These values have not been measured and could potentially be -/// tuned. +/// cache can hold 31 entries, but not all styles are shareable, so we set this +/// value to 16. The size of the cache has been measured to provide pretty good +/// sharing on a few pages, but could probably use more measurement and tuning. +/// The work unit size is a bit of a guess at the moment; again could use +/// measurement and tuning. pub const WORK_UNIT_MAX: usize = 16; /// Verify that the style sharing cache size doesn't change. If it does, we should @@ -48,7 +50,7 @@ pub const WORK_UNIT_MAX: usize = 16; /// have surprising effects on the parallelism characteristics of the style system. #[allow(dead_code)] fn static_assert() { - unsafe { mem::transmute::<_, [u32; STYLE_SHARING_CANDIDATE_CACHE_SIZE]>([1; 8]); } + unsafe { mem::transmute::<_, [u32; STYLE_SHARING_CANDIDATE_CACHE_SIZE]>([1; 31]); } } /// A list of node pointers. diff --git a/servo/components/style/sharing/mod.rs b/servo/components/style/sharing/mod.rs index f996538fb6be..7f9b2bc32d6c 100644 --- a/servo/components/style/sharing/mod.rs +++ b/servo/components/style/sharing/mod.rs @@ -84,8 +84,10 @@ use stylist::{ApplicableDeclarationBlock, Stylist}; mod checks; /// The amount of nodes that the style sharing candidate cache should hold at -/// most. -pub const STYLE_SHARING_CANDIDATE_CACHE_SIZE: usize = 8; +/// most. We'd somewhat like 32, but ArrayDeque only implements certain backing +/// store sizes. A cache size of 32 would mean a backing store of 33, but +/// that's not an implemented size: we can do 32 or 40. +pub const STYLE_SHARING_CANDIDATE_CACHE_SIZE: usize = 31; /// Controls whether the style sharing cache is used. #[derive(Clone, Copy, PartialEq)]