Commit 881c7dcd authored by Fredrik Söderquist's avatar Fredrik Söderquist Committed by Commit Bot

Sink interval notification out of SVGSMILElement::ResolveFirstInterval

In the majority of cases SMILTimeContainer::NotifyIntervalsChanged is
already called - or doesn't need to be called either because we're about
to perform an update already (Reset()), or because there is no time
container to notify anyway (constructor).

Bug: 998526
Change-Id: I2e36cbd622a79f3f74f2edf170e6e1d34be3582c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1810897Reviewed-by: default avatarPhilip Rogers <pdr@chromium.org>
Commit-Queue: Fredrik Söderquist <fs@opera.com>
Cr-Commit-Position: refs/heads/master@{#697630}
parent f9bd7a16
...@@ -190,8 +190,12 @@ struct SMILInterval { ...@@ -190,8 +190,12 @@ struct SMILInterval {
SMILTime end; SMILTime end;
}; };
inline bool operator==(const SMILInterval& a, const SMILInterval& b) {
return a.begin == b.begin && a.end == b.end;
}
inline bool operator!=(const SMILInterval& a, const SMILInterval& b) { inline bool operator!=(const SMILInterval& a, const SMILInterval& b) {
return a.begin != b.begin || a.end != b.end; return !(a == b);
} }
struct SMILTimeHash { struct SMILTimeHash {
......
...@@ -857,17 +857,14 @@ SMILInterval SVGSMILElement::ResolveInterval( ...@@ -857,17 +857,14 @@ SMILInterval SVGSMILElement::ResolveInterval(
return SMILInterval(SMILTime::Unresolved(), SMILTime::Unresolved()); return SMILInterval(SMILTime::Unresolved(), SMILTime::Unresolved());
} }
void SVGSMILElement::ResolveFirstInterval() { bool SVGSMILElement::ResolveFirstInterval() {
SMILInterval first_interval = ResolveInterval(kFirstInterval); SMILInterval first_interval = ResolveInterval(kFirstInterval);
DCHECK(!first_interval.begin.IsIndefinite()); DCHECK(!first_interval.begin.IsIndefinite());
if (!first_interval.IsResolved() || first_interval == interval_)
if (!first_interval.begin.IsUnresolved() && first_interval != interval_) { return false;
interval_ = first_interval; interval_ = first_interval;
NotifyDependentsIntervalChanged(interval_); NotifyDependentsIntervalChanged(interval_);
return true;
if (time_container_)
time_container_->NotifyIntervalsChanged();
}
} }
base::Optional<SMILInterval> SVGSMILElement::ResolveNextInterval() { base::Optional<SMILInterval> SVGSMILElement::ResolveNextInterval() {
...@@ -1113,7 +1110,8 @@ bool SVGSMILElement::NeedsToProgress(SMILTime elapsed) { ...@@ -1113,7 +1110,8 @@ bool SVGSMILElement::NeedsToProgress(SMILTime elapsed) {
if (is_waiting_for_first_interval_) { if (is_waiting_for_first_interval_) {
is_waiting_for_first_interval_ = false; is_waiting_for_first_interval_ = false;
ResolveFirstInterval(); if (ResolveFirstInterval())
time_container_->NotifyIntervalsChanged();
} }
return true; return true;
} }
......
...@@ -185,7 +185,7 @@ class CORE_EXPORT SVGSMILElement : public SVGElement, public SVGTests { ...@@ -185,7 +185,7 @@ class CORE_EXPORT SVGSMILElement : public SVGElement, public SVGTests {
enum IntervalSelector { kFirstInterval, kNextInterval }; enum IntervalSelector { kFirstInterval, kNextInterval };
SMILInterval ResolveInterval(IntervalSelector) const; SMILInterval ResolveInterval(IntervalSelector) const;
void ResolveFirstInterval(); bool ResolveFirstInterval();
base::Optional<SMILInterval> ResolveNextInterval(); base::Optional<SMILInterval> ResolveNextInterval();
SMILTime ResolveActiveEnd(SMILTime resolved_begin, SMILTime ResolveActiveEnd(SMILTime resolved_begin,
SMILTime resolved_end) const; SMILTime resolved_end) const;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment