Changeset 220812 in webkit


Ignore:
Timestamp:
Aug 16, 2017 3:12:12 PM (7 years ago)
Author:
Simon Fraser
Message:

Add a log channel for media queries
https://bugs.webkit.org/show_bug.cgi?id=175591

Reviewed by Zalan Bujtas.

Add a "MediaQueries" log channel which logs data about media query evaluation.

  • css/MediaList.cpp:

(WebCore::MediaQuerySet::MediaQuerySet):
(WebCore::operator<<):

  • css/MediaList.h:
  • css/MediaQuery.cpp:

(WebCore::operator<<):

  • css/MediaQuery.h:
  • css/MediaQueryEvaluator.cpp:

(WebCore::operator<<):
(WebCore::MediaQueryEvaluator::evaluate const):
(WebCore::aspectRatioValueAsString):
(WebCore::orientationEvaluate):
(WebCore::aspectRatioEvaluate):
(WebCore::deviceAspectRatioEvaluate):
(WebCore::evaluateResolution):
(WebCore::deviceHeightEvaluate):
(WebCore::deviceWidthEvaluate):
(WebCore::heightEvaluate):
(WebCore::widthEvaluate):

  • css/MediaQueryExpression.cpp:

(WebCore::operator<<):

  • css/MediaQueryExpression.h:
  • css/MediaQueryMatcher.cpp:

(WebCore::MediaQueryMatcher::styleResolverChanged):

  • css/StyleResolver.cpp:

(WebCore::StyleResolver::hasMediaQueriesAffectedByViewportChange const):
(WebCore::StyleResolver::hasMediaQueriesAffectedByAccessibilitySettingsChange const):

  • dom/InlineStyleSheetOwner.cpp:

(WebCore::InlineStyleSheetOwner::createSheet):

  • html/HTMLImageElement.cpp:

(WebCore::HTMLImageElement::bestFitSourceFromPictureElement):

  • html/HTMLLinkElement.cpp:

(WebCore::HTMLLinkElement::process):

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::selectNextSourceChild):

  • html/HTMLPictureElement.cpp:

(WebCore::HTMLPictureElement::viewportChangeAffectedPicture const):

  • html/parser/HTMLPreloadScanner.cpp:

(WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):

  • page/FrameView.cpp:

(WebCore::FrameView::layout):

  • platform/Logging.cpp:

(WebCore::initializeLogChannelsIfNecessary):

  • platform/Logging.h:
  • platform/URL.cpp:

(WebCore::isSchemeFirstChar):
(WebCore::operator<<):

  • platform/URL.h:
Location:
trunk/Source/WebCore
Files:
20 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r220811 r220812  
     12017-08-16  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Add a log channel for media queries
     4        https://bugs.webkit.org/show_bug.cgi?id=175591
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        Add a "MediaQueries" log channel which logs data about media query evaluation.
     9
     10        * css/MediaList.cpp:
     11        (WebCore::MediaQuerySet::MediaQuerySet):
     12        (WebCore::operator<<):
     13        * css/MediaList.h:
     14        * css/MediaQuery.cpp:
     15        (WebCore::operator<<):
     16        * css/MediaQuery.h:
     17        * css/MediaQueryEvaluator.cpp:
     18        (WebCore::operator<<):
     19        (WebCore::MediaQueryEvaluator::evaluate const):
     20        (WebCore::aspectRatioValueAsString):
     21        (WebCore::orientationEvaluate):
     22        (WebCore::aspectRatioEvaluate):
     23        (WebCore::deviceAspectRatioEvaluate):
     24        (WebCore::evaluateResolution):
     25        (WebCore::deviceHeightEvaluate):
     26        (WebCore::deviceWidthEvaluate):
     27        (WebCore::heightEvaluate):
     28        (WebCore::widthEvaluate):
     29        * css/MediaQueryExpression.cpp:
     30        (WebCore::operator<<):
     31        * css/MediaQueryExpression.h:
     32        * css/MediaQueryMatcher.cpp:
     33        (WebCore::MediaQueryMatcher::styleResolverChanged):
     34        * css/StyleResolver.cpp:
     35        (WebCore::StyleResolver::hasMediaQueriesAffectedByViewportChange const):
     36        (WebCore::StyleResolver::hasMediaQueriesAffectedByAccessibilitySettingsChange const):
     37        * dom/InlineStyleSheetOwner.cpp:
     38        (WebCore::InlineStyleSheetOwner::createSheet):
     39        * html/HTMLImageElement.cpp:
     40        (WebCore::HTMLImageElement::bestFitSourceFromPictureElement):
     41        * html/HTMLLinkElement.cpp:
     42        (WebCore::HTMLLinkElement::process):
     43        * html/HTMLMediaElement.cpp:
     44        (WebCore::HTMLMediaElement::selectNextSourceChild):
     45        * html/HTMLPictureElement.cpp:
     46        (WebCore::HTMLPictureElement::viewportChangeAffectedPicture const):
     47        * html/parser/HTMLPreloadScanner.cpp:
     48        (WebCore::TokenPreloadScanner::StartTagScanner::processAttribute):
     49        * page/FrameView.cpp:
     50        (WebCore::FrameView::layout):
     51        * platform/Logging.cpp:
     52        (WebCore::initializeLogChannelsIfNecessary):
     53        * platform/Logging.h:
     54        * platform/URL.cpp:
     55        (WebCore::isSchemeFirstChar):
     56        (WebCore::operator<<):
     57        * platform/URL.h:
     58
    1592017-08-16  Sam Weinig  <sam@webkit.org>
    260
  • trunk/Source/WebCore/css/MediaList.cpp

    r219856 r220812  
    3030#include <wtf/NeverDestroyed.h>
    3131#include <wtf/text/StringBuilder.h>
     32#include <wtf/text/TextStream.h>
    3233
    3334namespace WebCore {
     
    7071
    7172MediaQuerySet::MediaQuerySet()
    72     : m_lastLine(0)
    7373{
    7474}
     
    278278#endif
    279279
    280 }
     280TextStream& operator<<(TextStream& ts, const MediaQuerySet& querySet)
     281{
     282    ts << querySet.mediaText();
     283    return ts;
     284}
     285
     286TextStream& operator<<(TextStream& ts, const MediaList& mediaList)
     287{
     288    ts << mediaList.mediaText();
     289    return ts;
     290}
     291
     292} // namespace WebCore
     293
  • trunk/Source/WebCore/css/MediaList.h

    r208847 r220812  
    2525#include <wtf/Forward.h>
    2626#include <wtf/Vector.h>
     27
     28namespace WTF {
     29class TextStream;
     30}
    2731
    2832namespace WebCore {
     
    6771    MediaQuerySet(const MediaQuerySet&);
    6872
    69     signed m_lastLine;
     73    int m_lastLine { 0 };
    7074    Vector<MediaQuery> m_queries;
    7175};
     
    122126#endif
    123127
     128WTF::TextStream& operator<<(WTF::TextStream&, const MediaQuerySet&);
     129WTF::TextStream& operator<<(WTF::TextStream&, const MediaList&);
     130
    124131} // namespace
  • trunk/Source/WebCore/css/MediaQuery.cpp

    r201441 r220812  
    3131
    3232#include <wtf/text/StringBuilder.h>
     33#include <wtf/text/TextStream.h>
    3334
    3435namespace WebCore {
     
    107108}
    108109
     110TextStream& operator<<(TextStream& ts, const MediaQuery& query)
     111{
     112    ts << query.cssText();
     113    return ts;
     114}
     115
    109116} //namespace
  • trunk/Source/WebCore/css/MediaQuery.h

    r212252 r220812  
    6262};
    6363
     64WTF::TextStream& operator<<(WTF::TextStream&, const MediaQuery&);
     65
    6466} // namespace
  • trunk/Source/WebCore/css/MediaQueryEvaluator.cpp

    r220730 r220812  
    3535#include "CSSValueKeywords.h"
    3636#include "FrameView.h"
     37#include "Logging.h"
    3738#include "MainFrame.h"
    3839#include "MediaFeatureNames.h"
     
    4849#include "Theme.h"
    4950#include <wtf/HashMap.h>
     51#include <wtf/text/TextStream.h>
    5052
    5153#if ENABLE(3D_TRANSFORMS)
     
    5658
    5759enum MediaFeaturePrefix { MinPrefix, MaxPrefix, NoPrefix };
     60
     61static TextStream& operator<<(TextStream& ts, MediaFeaturePrefix op)
     62{
     63    switch (op) {
     64    case MinPrefix: ts << "min"; break;
     65    case MaxPrefix: ts << "max"; break;
     66    case NoPrefix: ts << ""; break;
     67    }
     68    return ts;
     69}
    5870
    5971typedef bool (*MediaQueryFunction)(CSSValue*, const CSSToLengthConversionData&, Frame&, MediaFeaturePrefix);
     
    124136bool MediaQueryEvaluator::evaluate(const MediaQuerySet& querySet, StyleResolver* styleResolver) const
    125137{
     138    LOG_WITH_STREAM(MediaQueries, stream << "MediaQueryEvaluator::evaluate on " << (m_frame && m_frame->document() ? m_frame->document()->url().string() : emptyString()));
     139
    126140    auto& queries = querySet.queryVector();
    127     if (!queries.size())
     141    if (!queries.size()) {
     142        LOG_WITH_STREAM(MediaQueries, stream << "MediaQueryEvaluator::evaluate " << querySet << " returning true");
    128143        return true; // Empty query list evaluates to true.
     144    }
    129145
    130146    // Iterate over queries, stop if any of them eval to true (OR semantics).
     
    156172    }
    157173
     174    LOG_WITH_STREAM(MediaQueries, stream << "MediaQueryEvaluator::evaluate " << querySet << " returning " << result);
    158175    return result;
    159176}
     
    203220}
    204221
     222#if !LOG_DISABLED
     223static String aspectRatioValueAsString(CSSValue* value)
     224{
     225    if (!is<CSSAspectRatioValue>(value))
     226        return emptyString();
     227
     228    auto& aspectRatio = downcast<CSSAspectRatioValue>(*value);
     229    return String::format("%f/%f", aspectRatio.numeratorValue(), aspectRatio.denominatorValue());
     230}
     231#endif
     232
    205233static bool compareAspectRatioValue(CSSValue* value, int width, int height, MediaFeaturePrefix op)
    206234{
     
    312340
    313341    auto keyword = downcast<CSSPrimitiveValue>(*value).valueID();
     342    bool result;
    314343    if (viewSize.width() > viewSize.height()) // Square viewport is portrait.
    315         return keyword == CSSValueLandscape;
    316     return keyword == CSSValuePortrait;
     344        result = keyword == CSSValueLandscape;
     345    else
     346        result = keyword == CSSValuePortrait;
     347
     348    LOG_WITH_STREAM(MediaQueries, stream << "  orientationEvaluate: view size " << viewSize.width() << "x" << viewSize.height() << " is " << value->cssText() << ": " << result);
     349    return result;
    317350}
    318351
     
    327360        return true;
    328361    auto viewSize = view->layoutSizeForMediaQuery();
    329     return compareAspectRatioValue(value, viewSize.width(), viewSize.height(), op);
     362    bool result = compareAspectRatioValue(value, viewSize.width(), viewSize.height(), op);
     363    LOG_WITH_STREAM(MediaQueries, stream << "  aspectRatioEvaluate: " << op << " " << aspectRatioValueAsString(value) << " actual view size " << viewSize << ": " << result);
     364    return result;
    330365}
    331366
     
    338373
    339374    auto size = screenRect(frame.mainFrame().view()).size();
    340     return compareAspectRatioValue(value, size.width(), size.height(), op);
     375    bool result = compareAspectRatioValue(value, size.width(), size.height(), op);
     376    LOG_WITH_STREAM(MediaQueries, stream << "  deviceAspectRatioEvaluate: " << op << " " << aspectRatioValueAsString(value) << " actual screen size " << size << ": " << result);
     377    return result;
    341378}
    342379
     
    371408
    372409    auto& resolution = downcast<CSSPrimitiveValue>(*value);
    373     return compareValue(deviceScaleFactor, resolution.isNumber() ? resolution.floatValue() : resolution.floatValue(CSSPrimitiveValue::CSS_DPPX), op);
     410    float resolutionValue = resolution.isNumber() ? resolution.floatValue() : resolution.floatValue(CSSPrimitiveValue::CSS_DPPX);
     411    bool result = compareValue(deviceScaleFactor, resolutionValue, op);
     412    LOG_WITH_STREAM(MediaQueries, stream << "  evaluateResolution: " << op << " " << resolutionValue << " device scale factor " << deviceScaleFactor << ": " << result);
     413    return result;
    374414}
    375415
     
    424464    int length;
    425465    auto height = screenRect(frame.mainFrame().view()).height();
    426     return computeLength(value, !frame.document()->inQuirksMode(), conversionData, length) && compareValue(height, length, op);
     466    if (!computeLength(value, !frame.document()->inQuirksMode(), conversionData, length))
     467        return false;
     468
     469    LOG_WITH_STREAM(MediaQueries, stream << "  deviceHeightEvaluate: query " << op << " height " << length << ", actual height " << height << " result: " << compareValue(height, length, op));
     470
     471    return compareValue(height, length, op);
    427472}
    428473
     
    435480    int length;
    436481    auto width = screenRect(frame.mainFrame().view()).width();
    437     return computeLength(value, !frame.document()->inQuirksMode(), conversionData, length) && compareValue(width, length, op);
     482    if (!computeLength(value, !frame.document()->inQuirksMode(), conversionData, length))
     483        return false;
     484
     485    LOG_WITH_STREAM(MediaQueries, stream << "  deviceWidthEvaluate: query " << op << " width " << length << ", actual width " << width << " result: " << compareValue(width, length, op));
     486
     487    return compareValue(width, length, op);
    438488}
    439489
     
    448498    if (auto* renderView = frame.document()->renderView())
    449499        height = adjustForAbsoluteZoom(height, *renderView);
     500
    450501    int length;
    451     return computeLength(value, !frame.document()->inQuirksMode(), conversionData, length) && compareValue(height, length, op);
     502    if (!computeLength(value, !frame.document()->inQuirksMode(), conversionData, length))
     503        return false;
     504
     505    LOG_WITH_STREAM(MediaQueries, stream << "  heightEvaluate: query " << op << " height " << length << ", actual height " << height << " result: " << compareValue(height, length, op));
     506
     507    return compareValue(height, length, op);
    452508}
    453509
     
    462518    if (auto* renderView = frame.document()->renderView())
    463519        width = adjustForAbsoluteZoom(width, *renderView);
     520
    464521    int length;
    465     return computeLength(value, !frame.document()->inQuirksMode(), conversionData, length) && compareValue(width, length, op);
     522    if (!computeLength(value, !frame.document()->inQuirksMode(), conversionData, length))
     523        return false;
     524
     525    LOG_WITH_STREAM(MediaQueries, stream << "  widthEvaluate: query " << op << " width " << length << ", actual width " << width << " result: " << compareValue(width, length, op));
     526
     527    return compareValue(width, length, op);
    466528}
    467529
  • trunk/Source/WebCore/css/MediaQueryExpression.cpp

    r220730 r220812  
    3333#include "CSSPrimitiveValue.h"
    3434#include "MediaFeatureNames.h"
     35#include <wtf/text/TextStream.h>
    3536#include <wtf/text/StringBuilder.h>
    3637
     
    226227}
    227228
     229TextStream& operator<<(TextStream& ts, const MediaQueryExpression& expression)
     230{
     231    ts << expression.serialize();
     232    return ts;
     233}
     234
     235
    228236} // namespace
  • trunk/Source/WebCore/css/MediaQueryExpression.h

    r212252 r220812  
    3131#include "CSSValue.h"
    3232#include <memory>
     33
     34namespace WTF {
     35class TextStream;
     36}
    3337
    3438namespace WebCore {
     
    7680}
    7781
     82WTF::TextStream& operator<<(WTF::TextStream&, const MediaQueryExpression&);
     83
    7884} // namespace
  • trunk/Source/WebCore/css/MediaQueryMatcher.cpp

    r217134 r220812  
    2424#include "Frame.h"
    2525#include "FrameView.h"
     26#include "Logging.h"
    2627#include "MediaList.h"
    2728#include "MediaQueryEvaluator.h"
     
    3233#include "StyleResolver.h"
    3334#include "StyleScope.h"
     35#include <wtf/text/TextStream.h>
    3436
    3537namespace WebCore {
     
    119121        return;
    120122
     123    LOG_WITH_STREAM(MediaQueries, stream << "MediaQueryMatcher::styleResolverChanged " << m_document->url());
     124
    121125    MediaQueryEvaluator evaluator { mediaType(), *m_document, style.get() };
    122126    Vector<Listener> listeners;
  • trunk/Source/WebCore/css/StyleResolver.cpp

    r220706 r220812  
    6868#include "KeyframeList.h"
    6969#include "LinkHash.h"
     70#include "Logging.h"
    7071#include "MathMLElement.h"
    7172#include "MathMLNames.h"
     
    18731874bool StyleResolver::hasMediaQueriesAffectedByViewportChange() const
    18741875{
     1876    LOG(MediaQueries, "StyleResolver::hasMediaQueriesAffectedByViewportChange evaluating queries");
    18751877    for (auto& result : m_viewportDependentMediaQueryResults) {
    18761878        if (m_mediaQueryEvaluator.evaluate(result.expression) != result.result)
     
    18871889bool StyleResolver::hasMediaQueriesAffectedByAccessibilitySettingsChange() const
    18881890{
     1891    LOG(MediaQueries, "StyleResolver::hasMediaQueriesAffectedByAccessibilitySettingsChange evaluating queries");
    18891892    for (auto& result : m_accessibilitySettingsDependentMediaQueryResults) {
    18901893        if (m_mediaQueryEvaluator.evaluate(result.expression) != result.result)
  • trunk/Source/WebCore/dom/InlineStyleSheetOwner.cpp

    r213446 r220812  
    2424#include "ContentSecurityPolicy.h"
    2525#include "Element.h"
     26#include "Logging.h"
    2627#include "MediaList.h"
    2728#include "MediaQueryEvaluator.h"
     
    175176    MediaQueryEvaluator screenEval(ASCIILiteral("screen"), true);
    176177    MediaQueryEvaluator printEval(ASCIILiteral("print"), true);
     178    LOG(MediaQueries, "InlineStyleSheetOwner::createSheet evaluating queries");
    177179    if (!screenEval.evaluate(*mediaQueries) && !printEval.evaluate(*mediaQueries))
    178180        return;
  • trunk/Source/WebCore/html/HTMLImageElement.cpp

    r219237 r220812  
    3434#include "HTMLSourceElement.h"
    3535#include "HTMLSrcsetParser.h"
     36#include "Logging.h"
    3637#include "MIMETypeRegistry.h"
    3738#include "MediaList.h"
     
    170171        MediaQueryEvaluator evaluator { document().printing() ? "print" : "screen", document(), documentElement ? documentElement->computedStyle() : nullptr };
    171172        auto* queries = source.parsedMediaAttribute();
     173        LOG(MediaQueries, "HTMLImageElement %p bestFitSourceFromPictureElement evaluating media queries", this);
    172174        auto evaluation = !queries || evaluator.evaluate(*queries, picture->viewportDependentResults());
    173175        if (picture->hasViewportDependentResults())
  • trunk/Source/WebCore/html/HTMLLinkElement.cpp

    r220760 r220812  
    4545#include "HTMLNames.h"
    4646#include "HTMLParserIdioms.h"
     47#include "Logging.h"
    4748#include "MediaList.h"
    4849#include "MediaQueryEvaluator.h"
     
    288289                documentStyle = Style::resolveForDocument(document());
    289290            auto media = MediaQuerySet::create(m_media);
     291            LOG(MediaQueries, "HTMLLinkElement::process evaluating queries");
    290292            mediaQueryMatches = MediaQueryEvaluator { document().frame()->view()->mediaType(), document(), documentStyle ? &*documentStyle : nullptr }.evaluate(media.get());
    291293        }
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r220759 r220812  
    42974297#endif
    42984298            auto* renderer = this->renderer();
     4299            LOG(MediaQueries, "HTMLMediaElement %p selectNextSourceChild evaluating media queries", this);
    42994300            if (!MediaQueryEvaluator { "screen", document(), renderer ? &renderer->style() : nullptr }.evaluate(*media))
    43004301                goto CheckAgain;
  • trunk/Source/WebCore/html/HTMLPictureElement.cpp

    r217876 r220812  
    2929#include "ElementChildIterator.h"
    3030#include "HTMLImageElement.h"
     31#include "Logging.h"
    3132
    3233namespace WebCore {
     
    6566    MediaQueryEvaluator evaluator { document().printing() ? "print" : "screen", document(), documentElement ? documentElement->computedStyle() : nullptr };
    6667    for (auto& result : m_viewportDependentMediaQueryResults) {
     68        LOG(MediaQueries, "HTMLPictureElement %p viewportChangeAffectedPicture evaluating media queries", this);
    6769        if (evaluator.evaluate(result.expression) != result.result)
    6870            return true;
  • trunk/Source/WebCore/html/parser/HTMLPreloadScanner.cpp

    r217247 r220812  
    3636#include "LinkLoader.h"
    3737#include "LinkRelAttribute.h"
     38#include "Logging.h"
    3839#include "MediaList.h"
    3940#include "MediaQueryEvaluator.h"
     
    216217                auto mediaSet = MediaQuerySet::create(attributeValue);
    217218                auto* documentElement = document.documentElement();
     219                LOG(MediaQueries, "HTMLPreloadScanner %p processAttribute evaluating media queries", this);
    218220                m_mediaMatched = MediaQueryEvaluator { document.printing() ? "print" : "screen", document, documentElement ? documentElement->computedStyle() : nullptr }.evaluate(mediaSet.get());
    219221            }
  • trunk/Source/WebCore/page/FrameView.cpp

    r220806 r220812  
    13171317
    13181318    if (inChildFrameLayoutWithFrameFlattening) {
    1319         if (!m_frameFlatteningViewSizeForMediaQuery)
     1319        if (!m_frameFlatteningViewSizeForMediaQuery) {
     1320            LOG_WITH_STREAM(MediaQueries, stream << "FrameView " << this << " snapshotting size " <<  ScrollView::layoutSize() << " for media queries");
    13201321            m_frameFlatteningViewSizeForMediaQuery = ScrollView::layoutSize();
     1322        }
    13211323        startLayoutAtMainFrameViewIfNeeded(allowSubtree);
    13221324        RenderElement* root = m_layoutRoot ? m_layoutRoot : frame().document()->renderView();
  • trunk/Source/WebCore/platform/Logging.h

    r219301 r220812  
    6363    M(Media) \
    6464    M(MediaCaptureSamples) \
     65    M(MediaQueries) \
    6566    M(MediaSource) \
    6667    M(MediaStream) \
  • trunk/Source/WebCore/platform/URL.cpp

    r219338 r220812  
    4242#include <wtf/text/StringBuilder.h>
    4343#include <wtf/text/StringHash.h>
     44#include <wtf/text/TextStream.h>
    4445
    4546// FIXME: This file makes too much use of the + operator on String.
     
    13351336}
    13361337
    1337 }
     1338TextStream& operator<<(TextStream& ts, const URL& url)
     1339{
     1340    ts << url.string();
     1341    return ts;
     1342}
     1343
     1344} // namespace WebCore
  • trunk/Source/WebCore/platform/URL.h

    r219338 r220812  
    4343#endif
    4444
     45namespace WTF {
     46class TextStream;
     47}
     48
    4549namespace WebCore {
    4650
     
    442446}
    443447
     448WTF::TextStream& operator<<(WTF::TextStream&, const URL&);
     449
    444450} // namespace WebCore
    445451
Note: See TracChangeset for help on using the changeset viewer.