Commit 37a45086 authored by Rune Lillesveen's avatar Rune Lillesveen Committed by Commit Bot

Explicitly disable UKM reporting for MQ evaluation.

This is in preparation for avoiding excessive UKM reporting for viewport
size media queries in [1].

The skip_ukm_reporting_ will be set to true when we detect if any media
queries have changed, e.g. on window resize. The new result will be
detected later in RuleSet::AddRulesFromSheet for stylesheets and
MediaQueryList::UpdateMatches() for matchMedia() when the evaluation
actually changed.

[1] https://chromium-review.googlesource.com/c/chromium/src/+/2449913

Bug: 973801
Change-Id: Ic8db810c8be2f223e08113db040d5515c42e6592
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2479372Reviewed-by: default avatarMaksim Orlovich <morlovich@chromium.org>
Commit-Queue: Rune Lillesveen <futhark@chromium.org>
Cr-Commit-Position: refs/heads/master@{#818030}
parent bbda672b
......@@ -159,6 +159,7 @@ bool MediaQueryEvaluator::Eval(
bool MediaQueryEvaluator::DidResultsChange(
const MediaQueryResultList& results) const {
base::AutoReset<bool> skip(&skip_ukm_reporting_, true);
for (auto& result : results) {
if (Eval(result.Expression()) != result.Result())
return true;
......@@ -166,6 +167,16 @@ bool MediaQueryEvaluator::DidResultsChange(
return false;
}
bool MediaQueryEvaluator::DidResultsChange(
const Vector<MediaQuerySetResult>& results) const {
base::AutoReset<bool> skip(&skip_ukm_reporting_, true);
for (const auto& result : results) {
if (result.Result() != Eval(result.MediaQueries()))
return true;
}
return false;
}
template <typename T>
bool CompareValue(T a, T b, MediaFeaturePrefix op) {
switch (op) {
......
......@@ -38,6 +38,7 @@ class MediaQuery;
class MediaQueryExp;
class MediaQueryResult;
class MediaQuerySet;
class MediaQuerySetResult;
class MediaValues;
class MediaValuesInitialViewport;
......@@ -98,6 +99,10 @@ class CORE_EXPORT MediaQueryEvaluator final
// evaluation.
bool DidResultsChange(const MediaQueryResultList& results) const;
// Returns true if any of the media queries in the results lists changed its
// evaluation.
bool DidResultsChange(const Vector<MediaQuerySetResult>& results) const;
void Trace(Visitor*) const;
private:
......@@ -105,6 +110,10 @@ class CORE_EXPORT MediaQueryEvaluator final
String media_type_;
Member<MediaValues> media_values_;
// Even if UKM reporting is enabled, do not report any media query evaluation
// results if this is set to true.
mutable bool skip_ukm_reporting_{false};
};
} // namespace blink
......
......@@ -431,11 +431,7 @@ void RuleSet::CompactRules() {
bool RuleSet::DidMediaQueryResultsChange(
const MediaQueryEvaluator& evaluator) const {
for (const auto& result : media_query_set_results_) {
if (result.Result() != evaluator.Eval(result.MediaQueries()))
return true;
}
return false;
return evaluator.DidResultsChange(media_query_set_results_);
}
void MinimalRuleData::Trace(Visitor* visitor) 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