[webkit-dev] Possible device scale factor emulation approaches?

Dana Jansens danakj at chromium.org
Wed Dec 5 17:36:15 PST 2012


On Wed, Dec 5, 2012 at 8:28 PM, Adam Barth <abarth at webkit.org> wrote:
> On Wed, Dec 5, 2012 at 7:16 AM, Alexander Pavlov <apavlov at chromium.org> wrote:
>> I'm working on emulating the device scale factor with Web Inspector. My goal
>> is to let web developers see their pages on "normal" (device pixel ratio ==
>> 1) monitors the way they would look on e.g. retina screens.
>> Page::setDeviceScaleFactor() is not something we can use, since it will have
>> the reverse effect when used by platform-specific compositor code (which I
>> saw on Chromium, and its compositor is far from being ready for such
>> abnormal treatment.)
>
> I'm not sure I fully understand what you're trying to accomplish.  Is
> the developer using a high density screen or a low density screen?
>
> Chromium has a command line option for setting a fake device pixel
> ratio.  For example, if you're using a low density screen, you can
> pass something like --device-pixel-ratio 2 to ask Chromium to render
> as if your device has a high density display.  The net effect is that
> the glyphs get really big (since they use 2x the pixels in each
> dimension).
>
> Alternatively, I can imagine that the developer is using a high
> density screen but wants to develop a web site that looks good on a
> low density screen.  In that case, they want to set a
> --device-pixel-ratio 1 but then render the web page pixel doubled
> (i.e., rasterizing each pixel as a 2x2 quad).  I don't think there's a
> command line option for that in Chromium, but it's something you might
> reasonably do in the compositor.
>
> In general, though, trying to shim this feature into WebCore isn't
> likely the right approach.  For WebKit2, for example, both the UI
> process and the web process need to agree about the device pixel ratio
> or else the system gets confused about how big various regions of
> memory ought to be.  If you look at how we test high density rendering
> on low density machines, you'll see that we override the device's
> actual pixel density via the WebKit/WebKit2 API.  That's to avoid this
> confusion.
>
>> I took the approach of instrumenting the WebCore/css and WebCore/page code
>> relying on the page->deviceScaleFactor() value. This worked pretty well, and
>> you can see the respective patch at
>> https://bugs.webkit.org/attachment.cgi?id=172046&action=prettypatch
>> (https://bugs.webkit.org/show_bug.cgi?id=100762), but now I'm wondering if
>> there are better ways to implement this without instrumenting lots of
>> page->deviceScaleFactor() call sites.
>>
>> Comments, ideas, suggestions, please?
>
> If you want to see how this is done in Chromium, you might want to
> study the --device-pixel-ratio command line flag.  In general, I don't
> think you want to try to implementing this feature by hacking WebCore
> as it requires coordination beyond WebCore to do correctly.

I think Adam is refering to the --force-device-scale-factor=2 flag for
chromium. To try it out, you may need to build with the use_ash=1
flag.


> Adam
> _______________________________________________
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
> http://lists.webkit.org/mailman/listinfo/webkit-dev


More information about the webkit-dev mailing list