Code Monkey home page Code Monkey logo

Comments (5)

pavelfeldman avatar pavelfeldman commented on July 18, 2024 2

This only collected 8 upvotes during the last 18 months, so I'm going to close it and defer to the third parties to resolve this. You can always open a new bug and link to this one with additional information!

from playwright.

JoelEinbinder avatar JoelEinbinder commented on July 18, 2024 1

Maybe we can directly provide some indication whether the rendering is stable? I'm very curious as to how your tool works.

from playwright.

Quramy avatar Quramy commented on July 18, 2024 1

@JoelEinbinder Thanks for reply.

I'm very curious as to how your tool works

The following figure is a screenshot of Chrome rendering pipeline.

chrome_rendering_pipeline

I really want the (A) timing to get stable page.screenshot() result, but, as far as I know, we can't get if painting/composition finished ( if you have some plans to get (A) timing, please tell me).

So we use (B) timing instead of (A). The (B) timing is closer to (A) than JS function call finished timing. The (B) timing means style recalculation and layouting finished and we wait for (B) using code such as:

let recalcStyleCountOfPreviousFrame = -1, layoutCountOfPreviousFrame = -1;
for (let i = 0; i < 100; i++) {
  const { RecalcStyleCount, LayoutCount } = await page.metrics();
  const isStable = 
    recalcStyleCountOfPreviousFrame === RecalcStyleCount &&
    LayoutCount === layoutCountOfPreviousFrame;
  if (isStable) {
    break;
  }
  recalcStyleCountOfPreviousFrame = RecalcStyleCount;
  layoutCountOfPreviousFrame = LayoutCount
  await new Promise(res => setTImeout(res, 16));
}

await page.screenshot();

Of course, I'm sure this logic is not perfect. But it works well to some extent.

Metrics API is not our goal. We really want a method/API to get (A) timing.

from playwright.

Quo0 avatar Quo0 commented on July 18, 2024

It would be great if we would have the same metrics API that we have in Puppeteer.
JSheap tracking is really important thing and I think that a lot of people would miss it in Playwright =)
It would be great if we would be able to track CPU usage, also.

from playwright.

JoelEinbinder avatar JoelEinbinder commented on July 18, 2024

You can measure memory in chromium by evaluating ‘performance.memory.usedJSHeapSize’ within the page.

from playwright.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.