Closed
      
        Bug 1367523
      
      
        Opened 8 years ago
          Closed 8 years ago
      
        
    
  
stylo: determine if clone of fontface and counter style rules create a memory leak, and re-enable layout/style/test/test_stylesheet_clone_font_face.html     
    Categories
(Core :: CSS Parsing and Computation, enhancement, P2)
        Core
          
        
        
      
        
    
        CSS Parsing and Computation
          
        
        
      
        
    Tracking
()
        RESOLVED
        FIXED
        
    
  
People
(Reporter: bradwerth, Assigned: bradwerth)
References
Details
Attachments
(3 files, 3 obsolete files)
Bug 1339629 implements deep cloning of css rules, but some uses appear to leak memory. Mochitest layout/style/test/test_stylesheet_clone_font_face.html triggers cloning of a fontface rule, and appears to leak.
| Updated•8 years ago
           | 
| Updated•8 years ago
           | 
Priority: -- → P2
| Assignee | ||
| Updated•8 years ago
           | 
Summary: stylo: determine if clone of fontface rules creates a real memory leak, and re-enable layout/style/test/test_stylesheet_clone_font_face.html → stylo: determine if clone of fontface and counter style rules create a memory leak, and re-enable layout/style/test/test_stylesheet_clone_font_face.html
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| 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
           | 
        Attachment #8874570 -
        Attachment is obsolete: true
| Assignee | ||
| Updated•8 years ago
           | 
        Attachment #8874524 -
        Flags: review?(cam)
        Attachment #8874525 -
        Flags: review?(cam)
        Attachment #8874526 -
        Flags: review?(cam)
        Attachment #8874527 -
        Flags: review?(cam)
| Comment 14•8 years ago
           | ||
| mozreview-review | ||
Comment on attachment 8874524 [details]
Bug 1367523 Part 1: Servo-side define and call Gecko CounterStyle and FontFaceRule clone functions.
https://reviewboard.mozilla.org/r/145514/#review150512
::: servo/components/style/stylesheets/mod.rs:291
(Diff revision 3)
>                  let rule = arc.read_with(guard);
>                  CssRule::Media(Arc::new(
>                      lock.wrap(rule.deep_clone_with_lock(lock, guard))))
>              },
>              CssRule::FontFace(ref arc) => {
> -                let rule = arc.read_with(guard);
> +                let rule = arc.read_with(&guard);
Why do we need this "&"?
::: servo/components/style/stylesheets/mod.rs:296
(Diff revision 3)
> -                let rule = arc.read_with(guard);
> -                CssRule::FontFace(Arc::new(lock.wrap(rule.clone())))
> +                let rule = arc.read_with(&guard);
> +                CssRule::FontFace(Arc::new(lock.wrap(
> +                    rule.deep_clone_from_gecko())))
>              },
>              CssRule::CounterStyle(ref arc) => {
> -                let rule = arc.read_with(guard);
> +                let rule = arc.read_with(&guard);
...and here?
        Attachment #8874524 -
        Flags: review?(cam) → review+
| Comment 15•8 years ago
           | ||
| mozreview-review | ||
Comment on attachment 8874525 [details]
Bug 1367523 Part 2: Gecko-side implement the CounterStyle and FontFaceRule clone functions.
https://reviewboard.mozilla.org/r/145516/#review150514
        Attachment #8874525 -
        Flags: review?(cam) → review+
| Comment 16•8 years ago
           | ||
| mozreview-review | ||
Comment on attachment 8874526 [details]
Bug 1367523 Part 3: Re-enable layout/style/test/test_stylesheet_clone_font_face.html.
https://reviewboard.mozilla.org/r/145892/#review150516
        Attachment #8874526 -
        Flags: review?(cam) → review+
| Comment 17•8 years ago
           | ||
| mozreview-review | ||
Comment on attachment 8874527 [details]
Bug 1367523 Part 4: Update the layout/reftests/stylesheet-cloning/counter-style-rule-clone.html test to use correct unicode literals.
https://reviewboard.mozilla.org/r/145894/#review150520
Is there a problem with the non-ASCII values?
        Attachment #8874527 -
        Flags: review?(cam) → review+
| Assignee | ||
| Comment 18•8 years ago
           | ||
| mozreview-review-reply | ||
Comment on attachment 8874527 [details]
Bug 1367523 Part 4: Update the layout/reftests/stylesheet-cloning/counter-style-rule-clone.html test to use correct unicode literals.
https://reviewboard.mozilla.org/r/145894/#review150520
Yes, strangely, setting the symbols property to a string that contains unicode characters doesn't "stick". I'll search for an existing bug and file one if necessary.
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| 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
           | 
        Attachment #8875512 -
        Flags: review?(cam)
| Comment hidden (mozreview-request) | 
| Assignee | ||
| Comment 28•8 years ago
           | ||
| mozreview-review-reply | ||
Comment on attachment 8874527 [details]
Bug 1367523 Part 4: Update the layout/reftests/stylesheet-cloning/counter-style-rule-clone.html test to use correct unicode literals.
https://reviewboard.mozilla.org/r/145894/#review150520
Nevermind; I was using incorrect unicode literals -- correct for CSS, wrong for JS.
| Comment 29•8 years ago
           | ||
| mozreview-review | ||
Comment on attachment 8875512 [details]
Bug 1367523 Part 1b: Servo-side make cloning of FontFaceRule and CounterStyleRule compile for both servo and gecko configs.
https://reviewboard.mozilla.org/r/146938/#review151056
::: servo/components/style/stylesheets/mod.rs:293
(Diff revision 1)
> -                    if cfg!(feature = "gecko") {
> +                    rule.clone_conditionally_gecko_or_servo())))
> -                        rule.deep_clone_from_gecko()
> -                    } else {
> -                        rule.clone()
> -                    })))
This change is fine.  But FWIW you can do real conditional compilation on expression blocks, like this, if you wanted to keep the switching behaviour in here:
  CSSRule::FontFace(Arc::new(lock.wrap(
      #[cfg(feature = "gecko")]
      {
          rule.deep_clone_from_gecko()
      }
      #[cfg(not(feature = "gecko"))]
      {
          rule.clone()
      }
  )))
        Attachment #8875512 -
        Flags: review?(cam) → review+
| Assignee | ||
| Comment 30•8 years ago
           | ||
| mozreview-review | ||
Comment on attachment 8875512 [details]
Bug 1367523 Part 1b: Servo-side make cloning of FontFaceRule and CounterStyleRule compile for both servo and gecko configs.
https://reviewboard.mozilla.org/r/146938/#review151374
::: servo/components/style/stylesheets/mod.rs:293
(Diff revision 1)
> -                    if cfg!(feature = "gecko") {
> +                    rule.clone_conditionally_gecko_or_servo())))
> -                        rule.deep_clone_from_gecko()
> -                    } else {
> -                        rule.clone()
> -                    })))
Rust compiler choked on that, not happy to find another # directive after the first block. I wasn't able to find a way to fight through it, so I'm keeping the proposed method.
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Comment hidden (mozreview-request) | 
| Assignee | ||
| Updated•8 years ago
           | 
        Attachment #8874524 -
        Attachment is obsolete: true
| Assignee | ||
| Updated•8 years ago
           | 
        Attachment #8875512 -
        Attachment is obsolete: true
| Comment 34•8 years ago
           | ||
Pushed by bwerth@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/f0ce0e021b87
Part 2: Gecko-side implement the CounterStyle and FontFaceRule clone functions. r=heycam
https://hg.mozilla.org/integration/autoland/rev/2d26be0ac13f
Part 3: Re-enable layout/style/test/test_stylesheet_clone_font_face.html. r=heycam
https://hg.mozilla.org/integration/autoland/rev/30a798334757
Part 4: Update the layout/reftests/stylesheet-cloning/counter-style-rule-clone.html test to use correct unicode literals. r=heycam
| Assignee | ||
| Comment 35•8 years ago
           | ||
Landed in mozilla-central:
changeset:   363082:30a798334757
user:        Brad Werth <bwerth@mozilla.com>
date:        Mon Jun 05 11:59:24 2017 -0700
summary:     Bug 1367523 Part 4: Update the layout/reftests/stylesheet-cloning/counter-style-rule-clone.html test to use correct unicode literals. r=heycam
changeset:   363081:2d26be0ac13f
user:        Brad Werth <bwerth@mozilla.com>
date:        Tue May 30 17:55:42 2017 -0700
summary:     Bug 1367523 Part 3: Re-enable layout/style/test/test_stylesheet_clone_font_face.html. r=heycam
changeset:   363080:f0ce0e021b87
user:        Brad Werth <bwerth@mozilla.com>
date:        Mon May 22 17:21:09 2017 -0700
summary:     Bug 1367523 Part 2: Gecko-side implement the CounterStyle and FontFaceRule clone functions. r=heycam
Status: NEW → RESOLVED
Closed: 8 years ago
Resolution: --- → FIXED
          You need to log in
          before you can comment on or make changes to this bug.
        
Description
•