Closed
Bug 1343516
Opened 8 years ago
Closed 8 years ago
Clean up the mess of PropertyProvider and its implementations
Categories
(Core :: Layout: Text and Fonts, enhancement)
Core
Layout: Text and Fonts
Tracking
()
RESOLVED
FIXED
mozilla55
Tracking | Status | |
---|---|---|
firefox55 | --- | fixed |
People
(Reporter: chenpighead, Assigned: chenpighead)
Details
Attachments
(6 files, 2 obsolete files)
59 bytes,
text/x-review-board-request
|
jfkthame
:
review+
|
Details |
59 bytes,
text/x-review-board-request
|
jfkthame
:
review+
|
Details |
59 bytes,
text/x-review-board-request
|
jfkthame
:
review+
|
Details |
59 bytes,
text/x-review-board-request
|
jfkthame
:
review+
|
Details |
59 bytes,
text/x-review-board-request
|
jfkthame
:
review+
|
Details |
26.04 KB,
patch
|
chenpighead
:
review+
|
Details | Diff | Splinter Review |
Per bug 1056516 comment 90,
```
At present, PropertyProvider and its implementations are pretty messy. It would be nice to annotate the overrides to make it clear what they are, remove any redundant methods (e.g. there's already a StyleText() accessor in the nsTextFrame implementation that nobody currently uses, afaics), make methods and data members 'const' where possible, declare the implementations 'final', etc.
```
Assignee | ||
Comment 1•8 years ago
|
||
MozReview-Commit-ID: J6VNxGye6ET
Comment 2•8 years ago
|
||
Comment on attachment 8847017 [details] [diff] [review]
(wip).
Review of attachment 8847017 [details] [diff] [review]:
-----------------------------------------------------------------
::: gfx/src/nsFontMetrics.cpp
@@ +82,5 @@
> };
>
> class StubPropertyProvider : public gfxTextRun::PropertyProvider {
> public:
> virtual void GetHyphenationBreaks(gfxTextRun::Range aRange,
Delete "virtual" and the "override" in this declaration according to the coding style quoted below. Same for all other cases throughout this patch.
Method declarations must use at most one of the following keywords: virtual, override, or final.
https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Coding_Style#Methods
Attachment #8847017 -
Flags: feedback+
Assignee | ||
Comment 3•8 years ago
|
||
1. Explicitly make methods 'const' for PropertyProvider abstract class.
2. Explicitly make methods in the two sub-classes (nsTextFrame.cpp and nsFontMetrics.cpp) 'final'.
3. Remove the redundant method StyleText().
4. Make methods of PropertyProvider in nsTextFrame.cpp 'const' where possible.
MozReview-Commit-ID: J6VNxGye6ET
Assignee | ||
Comment 4•8 years ago
|
||
Comment on attachment 8847043 [details] [diff] [review]
clean up PropertyProvider and its implementations.
One thing that may not be perfect is, I can't make GetHyphenWidth() and GetSpacing() 'const', because they may update/access some member variables (ex. mHyphenWidth, mTabWidths, etc.). I thought about using 'volatile' for the member variables (and maybe some methods as well) so we can make all the methods in the abstract class 'const'. But, I'm not sure if this is something worth doing...
Attachment #8847043 -
Flags: review?(jfkthame)
Assignee | ||
Comment 5•8 years ago
|
||
Comment on attachment 8847017 [details] [diff] [review]
(wip).
Ting-Yu, thank you for the feedback. :)
Attachment #8847017 -
Attachment is obsolete: true
Comment 6•8 years ago
|
||
(In reply to Jeremy Chen [:jeremychen] UTC+8 from comment #4)
> Comment on attachment 8847043 [details] [diff] [review]
> clean up PropertyProvider and its implementations.
>
> One thing that may not be perfect is, I can't make GetHyphenWidth() and
> GetSpacing() 'const', because they may update/access some member variables
> (ex. mHyphenWidth, mTabWidths, etc.). I thought about using 'volatile' for
> the member variables (and maybe some methods as well) so we can make all the
> methods in the abstract class 'const'. But, I'm not sure if this is
> something worth doing...
'volatile' would not be appropriate; that tells the compiler that a variable might unexpectedly change at any time due to some outside effect. What you want here is 'mutable' for the member variables like mHyphenWidth that serve purely as internal caching within the class. That will allow them to be modified (mutated) even when the object is const (e.g. within a 'const' method).
I think many of the member vars in nsTextFrame's PropertyProvider can also be made 'const', as they're set once (by the initializer list) during construction, and never changed after that.
Assignee | ||
Comment 7•8 years ago
|
||
Comment on attachment 8847043 [details] [diff] [review]
clean up PropertyProvider and its implementations.
Got great feedbacks from Jonathan, will update the patchset and re-request review then.
Attachment #8847043 -
Attachment is obsolete: true
Attachment #8847043 -
Flags: review?(jfkthame)
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Comment hidden (mozreview-request) |
Assignee | ||
Updated•8 years ago
|
Assignee: nobody → jeremychen
Status: NEW → ASSIGNED
Assignee | ||
Comment 13•8 years ago
|
||
Comment 14•8 years ago
|
||
mozreview-review |
Comment on attachment 8847497 [details]
Bug 1343516 - make all methods 'const' for the abstract class of PropertyProvider.
https://reviewboard.mozilla.org/r/120474/#review123362
Thanks for doing this, it cleans things up nicely (and might even help the compiler optimize better).
The series of patches presents it in a logical way for review, but please fold the patches together before landing (as the tree wouldn't actually build in some of the intermediate stages, e.g. when the abstract PropertyProvider interface has been modified but the implementations haven't yet been fixed).
Attachment #8847497 -
Flags: review?(jfkthame) → review+
Comment 15•8 years ago
|
||
mozreview-review |
Comment on attachment 8847498 [details]
Bug 1343516 - make all methods 'const' and 'final' for nsFontMetrics's StubPropertyProvider.
https://reviewboard.mozilla.org/r/120476/#review123050
::: gfx/src/nsFontMetrics.cpp:84
(Diff revision 1)
> }
>
> RefPtr<gfxTextRun> mTextRun;
> };
>
> class StubPropertyProvider : public gfxTextRun::PropertyProvider {
You could just do
```
class StubPropertyProvider final : public ...
```
rather than adding the `final` specifier to each of the individual methods.
Attachment #8847498 -
Flags: review?(jfkthame) → review+
Comment 16•8 years ago
|
||
mozreview-review |
Comment on attachment 8847499 [details]
Bug 1343516 - make overridden methods 'const' and 'final' for nsTextFrame's PropertyProvider.
https://reviewboard.mozilla.org/r/120478/#review123054
::: gfx/thebes/gfxTextRun.cpp:2190
(Diff revision 1)
> return MakeTextRun(&dash, 1, aDrawTarget, aAppUnitsPerDevUnit,
> gfxFontGroup::TEXT_IS_PERSISTENT, nullptr);
> }
>
> gfxFloat
> -gfxFontGroup::GetHyphenWidth(gfxTextRun::PropertyProvider *aProvider)
> +gfxFontGroup::GetHyphenWidth(const gfxTextRun::PropertyProvider *aProvider)
While you're touching this, please move the `*` across to attach to the type instead of the parameter name.
::: layout/generic/nsTextFrame.cpp:3161
(Diff revision 1)
> - virtual void GetSpacing(Range aRange, Spacing* aSpacing);
> - virtual gfxFloat GetHyphenWidth();
> - virtual void GetHyphenationBreaks(Range aRange, HyphenType* aBreakBefore);
> - virtual StyleHyphens GetHyphensOption() {
> + void GetSpacing(Range aRange, Spacing* aSpacing) const final;
> + gfxFloat GetHyphenWidth() const final;
> + void GetHyphenationBreaks(Range aRange, HyphenType* aBreakBefore) const final;
> + StyleHyphens GetHyphensOption() const final {
> return mTextStyle->mHyphens;
> }
>
> - virtual already_AddRefed<DrawTarget> GetDrawTarget() {
> + already_AddRefed<DrawTarget> GetDrawTarget() const final {
> return CreateReferenceDrawTarget(GetFrame());
> }
>
> - virtual uint32_t GetAppUnitsPerDevUnit() {
> + uint32_t GetAppUnitsPerDevUnit() const final {
> return mTextRun->GetAppUnitsPerDevUnit();
> }
Like with StubPropertyProvider, you can just declare the class as `final` rather than each individual method.
Attachment #8847499 -
Flags: review?(jfkthame) → review+
Comment 17•8 years ago
|
||
mozreview-review |
Comment on attachment 8847500 [details]
Bug 1343516 - make the member variables in nsTextFrame's PropertyProvider to be 'const'.
https://reviewboard.mozilla.org/r/120480/#review123364
Attachment #8847500 -
Flags: review?(jfkthame) → review+
Comment 18•8 years ago
|
||
mozreview-review |
Comment on attachment 8847501 [details]
Bug 1343516 - coding style fix for nsTextFrame's PropertyProvider.
https://reviewboard.mozilla.org/r/120482/#review123366
Attachment #8847501 -
Flags: review?(jfkthame) → review+
Assignee | ||
Comment 19•8 years ago
|
||
mozreview-review-reply |
Comment on attachment 8847497 [details]
Bug 1343516 - make all methods 'const' for the abstract class of PropertyProvider.
https://reviewboard.mozilla.org/r/120474/#review123362
No problem. Will fold the patchset together before landing. Thank you for the review. :)
Comment 20•8 years ago
|
||
Pushed by jichen@mozilla.com:
https://hg.mozilla.org/integration/mozilla-inbound/rev/156ee3ddc810
clean up the mess of PropertyProvider and its implementations. r=jfkthame
Assignee | ||
Comment 21•8 years ago
|
||
The cleanup work includes:
part 1: make all methods 'const' for the abstract class of PropertyProvider.
part 2: make nsFontMetrics's StubPropertyProvider final.
part 3: make nsTextFrame's PropertyProvider final.
Make some methods 'const' and some variables 'mutable', so we could let all the
overridden methods stay const.
We also need to make the pass-in parameter of gfxFontGroup's GetHyphenWidth const.
Note that the comment of GetHyphenWidth seem outdated, so I fixed it as well.
part 4: make the member variables in nsTextFrame's PropertyProvider to be 'const'.
Make all the member variables 'const' except mStart, mLength,
mJustificationArrayStart, and mJustificationSpacings.
The static function AdvanceToNextTab is fixed since we only use 2 of the 4 parameters.
part 5: coding style fix for nsTextFrame's PropertyProvider.
MozReview-Commit-ID: 1kbWPwx27aQ
Assignee | ||
Comment 22•8 years ago
|
||
Comment on attachment 8848470 [details] [diff] [review]
clean up the mess of PropertyProvider and its implementations. r=jfkthame
This is the final folded version.
Attachment #8848470 -
Flags: review+
Comment 23•8 years ago
|
||
bugherder |
Status: ASSIGNED → RESOLVED
Closed: 8 years ago
status-firefox55:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla55
You need to log in
before you can comment on or make changes to this bug.
Description
•