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

Side by Side Diff: third_party/WebKit/Source/core/style/ComputedStyle.cpp

Issue 2887333003: Generate StyleRareInheritedData in ComputedStyleBase. (Closed)
Patch Set: Rebase Created 3 years, 7 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 unified diff | Download patch
« no previous file with comments | « third_party/WebKit/Source/core/style/ComputedStyle.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org) 2 * Copyright (C) 1999 Antti Koivisto (koivisto@kde.org)
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights
4 * reserved. 4 * reserved.
5 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved. 5 * Copyright (C) 2011 Adobe Systems Incorporated. All rights reserved.
6 * 6 *
7 * This library is free software; you can redistribute it and/or 7 * This library is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU Library General Public 8 * modify it under the terms of the GNU Library General Public
9 * License as published by the Free Software Foundation; either 9 * License as published by the Free Software Foundation; either
10 * version 2 of the License, or (at your option) any later version. 10 * version 2 of the License, or (at your option) any later version.
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 RGBA32 color_; 65 RGBA32 color_;
66 unsigned bitfield_; 66 unsigned bitfield_;
67 }; 67 };
68 68
69 ASSERT_SIZE(BorderValue, SameSizeAsBorderValue); 69 ASSERT_SIZE(BorderValue, SameSizeAsBorderValue);
70 70
71 // Since different compilers/architectures pack ComputedStyle differently, 71 // Since different compilers/architectures pack ComputedStyle differently,
72 // re-create the same structure for an accurate size comparison. 72 // re-create the same structure for an accurate size comparison.
73 struct SameSizeAsComputedStyle : public RefCounted<SameSizeAsComputedStyle> { 73 struct SameSizeAsComputedStyle : public RefCounted<SameSizeAsComputedStyle> {
74 struct ComputedStyleBase { 74 struct ComputedStyleBase {
75 void* data_refs[5]; 75 void* data_refs[6];
76 unsigned bitfields_[4]; 76 unsigned bitfields_[4];
77 } base_; 77 } base_;
78 78
79 void* data_refs[2]; 79 void* data_refs[1];
80 void* own_ptrs[1]; 80 void* own_ptrs[1];
81 void* data_ref_svg_style; 81 void* data_ref_svg_style;
82 }; 82 };
83 83
84 // If this fails, the packing algorithm in make_computed_style_base.py has 84 // If this fails, the packing algorithm in make_computed_style_base.py has
85 // failed to produce the optimal packed size. To fix, update the algorithm to 85 // failed to produce the optimal packed size. To fix, update the algorithm to
86 // ensure that the buckets are placed so that each takes up at most 1 word. 86 // ensure that the buckets are placed so that each takes up at most 1 word.
87 ASSERT_SIZE(ComputedStyleBase<ComputedStyle>, SameSizeAsComputedStyleBase); 87 ASSERT_SIZE(ComputedStyleBase<ComputedStyle>, SameSizeAsComputedStyleBase);
88 88
89 // If this assert fails, it means that size of ComputedStyle has changed. Please 89 // If this assert fails, it means that size of ComputedStyle has changed. Please
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 rare_non_inherited_data_.Access()->deprecated_flexible_box_.Init(); 131 rare_non_inherited_data_.Access()->deprecated_flexible_box_.Init();
132 rare_non_inherited_data_.Access()->flexible_box_.Init(); 132 rare_non_inherited_data_.Access()->flexible_box_.Init();
133 rare_non_inherited_data_.Access()->multi_col_.Init(); 133 rare_non_inherited_data_.Access()->multi_col_.Init();
134 rare_non_inherited_data_.Access()->transform_.Init(); 134 rare_non_inherited_data_.Access()->transform_.Init();
135 rare_non_inherited_data_.Access()->will_change_.Init(); 135 rare_non_inherited_data_.Access()->will_change_.Init();
136 rare_non_inherited_data_.Access()->filter_.Init(); 136 rare_non_inherited_data_.Access()->filter_.Init();
137 rare_non_inherited_data_.Access()->backdrop_filter_.Init(); 137 rare_non_inherited_data_.Access()->backdrop_filter_.Init();
138 rare_non_inherited_data_.Access()->grid_.Init(); 138 rare_non_inherited_data_.Access()->grid_.Init();
139 rare_non_inherited_data_.Access()->grid_item_.Init(); 139 rare_non_inherited_data_.Access()->grid_item_.Init();
140 rare_non_inherited_data_.Access()->scroll_snap_.Init(); 140 rare_non_inherited_data_.Access()->scroll_snap_.Init();
141 rare_inherited_data_.Init();
142 svg_style_.Init(); 141 svg_style_.Init();
143 } 142 }
144 143
145 ALWAYS_INLINE ComputedStyle::ComputedStyle(const ComputedStyle& o) 144 ALWAYS_INLINE ComputedStyle::ComputedStyle(const ComputedStyle& o)
146 : ComputedStyleBase(o), 145 : ComputedStyleBase(o),
147 RefCounted<ComputedStyle>(), 146 RefCounted<ComputedStyle>(),
148 rare_non_inherited_data_(o.rare_non_inherited_data_), 147 rare_non_inherited_data_(o.rare_non_inherited_data_),
149 rare_inherited_data_(o.rare_inherited_data_),
150 svg_style_(o.svg_style_) {} 148 svg_style_(o.svg_style_) {}
151 149
152 static StyleRecalcChange DiffPseudoStyles(const ComputedStyle& old_style, 150 static StyleRecalcChange DiffPseudoStyles(const ComputedStyle& old_style,
153 const ComputedStyle& new_style) { 151 const ComputedStyle& new_style) {
154 // If the pseudoStyles have changed, ensure layoutObject triggers setStyle. 152 // If the pseudoStyles have changed, ensure layoutObject triggers setStyle.
155 if (!old_style.HasAnyPublicPseudoStyles() && 153 if (!old_style.HasAnyPublicPseudoStyles() &&
156 !new_style.HasAnyPublicPseudoStyles()) 154 !new_style.HasAnyPublicPseudoStyles())
157 return kNoChange; 155 return kNoChange;
158 for (PseudoId pseudo_id = kFirstPublicPseudoId; 156 for (PseudoId pseudo_id = kFirstPublicPseudoId;
159 pseudo_id < kFirstInternalPseudoId; 157 pseudo_id < kFirstInternalPseudoId;
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
315 const StyleContentAlignmentData& normal_value_behavior) const { 313 const StyleContentAlignmentData& normal_value_behavior) const {
316 return ResolvedContentAlignmentDistribution(AlignContent(), 314 return ResolvedContentAlignmentDistribution(AlignContent(),
317 normal_value_behavior); 315 normal_value_behavior);
318 } 316 }
319 317
320 void ComputedStyle::InheritFrom(const ComputedStyle& inherit_parent, 318 void ComputedStyle::InheritFrom(const ComputedStyle& inherit_parent,
321 IsAtShadowBoundary is_at_shadow_boundary) { 319 IsAtShadowBoundary is_at_shadow_boundary) {
322 EUserModify current_user_modify = UserModify(); 320 EUserModify current_user_modify = UserModify();
323 321
324 ComputedStyleBase::InheritFrom(inherit_parent, is_at_shadow_boundary); 322 ComputedStyleBase::InheritFrom(inherit_parent, is_at_shadow_boundary);
325 rare_inherited_data_ = inherit_parent.rare_inherited_data_;
326 if (svg_style_ != inherit_parent.svg_style_) 323 if (svg_style_ != inherit_parent.svg_style_)
327 svg_style_.Access()->InheritFrom(inherit_parent.svg_style_.Get()); 324 svg_style_.Access()->InheritFrom(inherit_parent.svg_style_.Get());
328 325
329 if (is_at_shadow_boundary == kAtShadowBoundary) { 326 if (is_at_shadow_boundary == kAtShadowBoundary) {
330 // Even if surrounding content is user-editable, shadow DOM should act as a 327 // Even if surrounding content is user-editable, shadow DOM should act as a
331 // single unit, and not necessarily be editable 328 // single unit, and not necessarily be editable
332 SetUserModify(current_user_modify); 329 SetUserModify(current_user_modify);
333 } 330 }
334 } 331 }
335 332
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
455 } 452 }
456 453
457 bool ComputedStyle::IndependentInheritedEqual( 454 bool ComputedStyle::IndependentInheritedEqual(
458 const ComputedStyle& other) const { 455 const ComputedStyle& other) const {
459 return ComputedStyleBase::IndependentInheritedEqual(other); 456 return ComputedStyleBase::IndependentInheritedEqual(other);
460 } 457 }
461 458
462 bool ComputedStyle::NonIndependentInheritedEqual( 459 bool ComputedStyle::NonIndependentInheritedEqual(
463 const ComputedStyle& other) const { 460 const ComputedStyle& other) const {
464 return ComputedStyleBase::NonIndependentInheritedEqual(other) && 461 return ComputedStyleBase::NonIndependentInheritedEqual(other) &&
465 svg_style_->InheritedEqual(*other.svg_style_) && 462 svg_style_->InheritedEqual(*other.svg_style_);
466 rare_inherited_data_ == other.rare_inherited_data_;
467 } 463 }
468 464
469 bool ComputedStyle::LoadingCustomFontsEqual(const ComputedStyle& other) const { 465 bool ComputedStyle::LoadingCustomFontsEqual(const ComputedStyle& other) const {
470 return GetFont().LoadingCustomFonts() == other.GetFont().LoadingCustomFonts(); 466 return GetFont().LoadingCustomFonts() == other.GetFont().LoadingCustomFonts();
471 } 467 }
472 468
473 bool ComputedStyle::NonInheritedEqual(const ComputedStyle& other) const { 469 bool ComputedStyle::NonInheritedEqual(const ComputedStyle& other) const {
474 // compare everything except the pseudoStyle pointer 470 // compare everything except the pseudoStyle pointer
475 return ComputedStyleBase::NonInheritedEqual(other) && 471 return ComputedStyleBase::NonInheritedEqual(other) &&
476 rare_non_inherited_data_ == other.rare_non_inherited_data_ && 472 rare_non_inherited_data_ == other.rare_non_inherited_data_ &&
477 svg_style_->NonInheritedEqual(*other.svg_style_); 473 svg_style_->NonInheritedEqual(*other.svg_style_);
478 } 474 }
479 475
480 bool ComputedStyle::InheritedDataShared(const ComputedStyle& other) const { 476 bool ComputedStyle::InheritedDataShared(const ComputedStyle& other) const {
481 // This is a fast check that only looks if the data structures are shared. 477 // This is a fast check that only looks if the data structures are shared.
482 return ComputedStyleBase::InheritedDataShared(other) && 478 return ComputedStyleBase::InheritedDataShared(other) &&
483 svg_style_.Get() == other.svg_style_.Get() && 479 svg_style_.Get() == other.svg_style_.Get();
484 rare_inherited_data_.Get() == other.rare_inherited_data_.Get();
485 } 480 }
486 481
487 static bool DependenceOnContentHeightHasChanged(const ComputedStyle& a, 482 static bool DependenceOnContentHeightHasChanged(const ComputedStyle& a,
488 const ComputedStyle& b) { 483 const ComputedStyle& b) {
489 // If top or bottom become auto/non-auto then it means we either have to solve 484 // If top or bottom become auto/non-auto then it means we either have to solve
490 // height based on the content or stop doing so 485 // height based on the content or stop doing so
491 // (http://www.w3.org/TR/CSS2/visudet.html#abs-non-replaced-height) 486 // (http://www.w3.org/TR/CSS2/visudet.html#abs-non-replaced-height)
492 // - either way requires a layout. 487 // - either way requires a layout.
493 return a.LogicalTop().IsAuto() != b.LogicalTop().IsAuto() || 488 return a.LogicalTop().IsAuto() != b.LogicalTop().IsAuto() ||
494 a.LogicalBottom().IsAuto() != b.LogicalBottom().IsAuto(); 489 a.LogicalBottom().IsAuto() != b.LogicalBottom().IsAuto();
(...skipping 1960 matching lines...) Expand 10 before | Expand all | Expand 10 after
2455 if (value < 0) 2450 if (value < 0)
2456 fvalue -= 0.5f; 2451 fvalue -= 0.5f;
2457 else 2452 else
2458 fvalue += 0.5f; 2453 fvalue += 0.5f;
2459 } 2454 }
2460 2455
2461 return RoundForImpreciseConversion<int>(fvalue / zoom_factor); 2456 return RoundForImpreciseConversion<int>(fvalue / zoom_factor);
2462 } 2457 }
2463 2458
2464 } // namespace blink 2459 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/style/ComputedStyle.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698