01 Apr 2011

See also: IRC log


tomayac_, [MicrosoftSVC], +1.617.575.aaaa, +1.617.575.aabb


<plh> Jason: in the ideal, setTimeout would really be 0

<plh> James: the odds that people will only properly setImmediate properly on popular websites will be slim

<plh> Jason: if we all go into it together, we have the chance to change the behavior

<plh> Jason: [shows data]

<plh> ... 13% of the sites will use setTimeout(0)

<plh> James: but what if they switch to setImmediate()?

<plh> Jason: their users will complain

<plh> James: no, they'll complain to the browser maker

<plh> Jason: I would love to increase by 60% the perf of [unnamed website]...

<plh> Cameron: I share the same concern about people misusing the API

<plh> ... do website break if you remove the clamp or do they eat the cpu?

<plh> James: we only clamp nested setTimeout

<plh> James: the first setTimeout(0) is free for us. if the script goes in a loop, we'll clamp

<plh> James: with postMessage, you can build something similar as well. nobody clamp that today...

<plh> Jason: I'm not hearing a lot of enthusiast ...

<plh> Steve: i'll be interested in doing something with setTimeout(0)

<plh> James: we got burned by setTimeout(0), we'll get burn with setImmediate() as well...

<plh> ... we'll have to clamp it

<plh> Steve: let's call it lockMyCPu()

<plh> ... :)

<plh> Jason: is there agreement we should do something

<plh> James: we're worried about power consumption, but do you change the API or the current implementation?

<plh> ... we're working on the implementation side

<plh> ... changing the timer, etc.

<plh> .... nested setTimeout/setInterval, modifying the clamp

<plh> ... lots of things you can do to get better performance

<plh> Steve: should we spec those things?

<plh> Plh: how about writing some guidelines on how to use setTimeout(0) properly?

<plh> Jason: would take time to change the behaviors

<plh> Steve: you can also detect the situation and report it possibly

<plh> ... evangelism would still be good to do

<plh> ... like change setTimeout(0) to setTimeout(16)

<plh> Cam: even if the new API gets deployed, it won't be a lot of overhead for implementation and we'll just be in the same situation as now

<mdelaney> jamesr: hey! (belated)

<plh> James: getting some feedback from javascript devs would be good

<heycam> so it's not terrible, if we implement setImmediate and people end up misusing it

Page Visibility


Arvind: Alex, please talk about this proposal. We are projecting the proposal.

Alex: When a page is being prerendered so it can behave approperiately.
... There are currently a number of heuristics that a user is viewing your webpage, but there is no
... good way to determine when you page is not visible.
... the proposal is only suggesting a few simple APIs. document.visible returns the current visible state of the page.

<plh> does visible mean that it's likely that more than 0% of the page is visible?

Alex: document.visibilityState describes the visible state. When "visible" it is likely that the page is visible. When "hidden" it is guaranteed that the page is hidden.

Arvind: Not sure if everyone knows what pre-rendering is. When a page embeds a link into a page, Chrome will go load the link in a hidden tab before the user clicks on it.
... the API is mostly motivated by that. So when the user clicks on a link, it will make it really fast because the page is already visible.
... We're going siginificantly further than current Firefox implementation and loading the entire page. Before the user actually clicks on the link, if we run the script from the hidden page
... there could be some side effects. This API will help give the visibility so we don't run script before the page is shown.
... There are other use cases where this is useful. For example, analytics metrics are broken because its not determinstic whether the user is actually looking at a visible page.
... Jason also mentioned the case where when the tab is actually hidden, we don't want to set as much resources on that page. E.g., When a page is not visible, we don't want to play video if the user can't see it.
... That was the background. The goal today was let's look at the API and see what we all think about it.

Jason: We agree with the visibility concept. We shouldn't use resources when in background.
... We had some concerns with the current naming. document.visible may have collisions with other APIs.

Alex: We haven't done any crawls, but with document, someone would have to explictly add to the document name. I don't think this is a common pattern.

Steve: I bet folks are less likely to extend document than window.

Jason: What about other states? We have peek in Windows 7?

Alex: document.visibleState defines a common of states like "preview", something that Windows 7 could use.

Steve: Can it be a value that is not mentioned here?

Alex: The proposal explictly made it clear that future values could be added with a vendor prefix.

Zhiheng: Prerender and cache both seem to be depend on current implementation. Even from a standard point of view, we should make sure the implementation is the same across browsers.

Alex: Couldn't hear you.

Zhiheng: What about prerendering if a browser doesn't implement it?

Steve: Zhiheng's point is that the verbage should be clear that one browser's definition of prerender doesn't differ from another browser, so it would confuse web developers.

Arvind: Zhiheng's other point was cache.

Jatinder: How is the cache value useful?

Alex: We could just move that one and it should be fine.

Ben: Should their be a private state that protects you?

<plh> if (page.visible) { showAdAndPlayFanfare(); }

Jatinder: Agree. I wouldn't want an IM chat site to know when I'm not looking at the site and notify other users.

Alex: You can use onBlur() today to see if users are using the site.

Jason: Also, if the site is visible it doesn't mean the user is there.

<plh> if (!page.visible) { startFireAlarm(); }

Ben: I'm more worried about the hidden state.

Arvind: We should talk about the two properties. Visible or not and the other one with the states.

Jatinder: Should we make it more granular? I'm in the background tab vs. the computer is asleep.

Alex: We can extend. I can definitely see cases where it's a background tab, or it's hidden.
... We want the prerendered case to help that scenario.

Cameron: You can do the prerender with existing events.

Alex: If we were developing just for prerendered case, we could have made a simpler api.

Jason: The general use case is interesting.

Tony: It'll be interesting to see the difference between sleep and background tab case. Maybe a low battery notification?

Arvind: So the question is, should we go ahead and start working on it?

Jason: I think it's clear that we should do the visibility work. We should start working on the spec.

Steve: It's interesting because from an ad's point of view, this isn't really perf related. But the prerendering makes it perf related.
... Seems like a very useful API.

Arvind: Is there anyone interested in the editing the spec?

James: Is there any more to edit?

Arvind: Yes, this isn't even in the spec format.

Jason: We are willing to help edit.

Arvind: Good.

Cameron: Is this even in the Charter?

Jason: Are we going to remove the cache event?

Alex: I'm fully supported to removing it.

<plh> --> http://lists.w3.org/Archives/Public/public-device-apis/2009Apr/att-0001/sysinfo.html#batteryleveldata_interface Nokia's proposal for battery level

Christian: I don't think it's a particularly useful usecase.

Arvind: From a Chrome's implementation point of view, I think we've only done visible or not.

<plh> --> http://bondi.omtp.org/1.1/apis/devicestatus.html The BONDI devicestatus Module

Arvind: isVisible would return false for prerendered case?

Shishir: Yes.

Paint Notification

Moving on to Paint Notification.

Cameron: The goal for the paint notification is to give the browser the ability paint when it needs to.

<plh> --> http://blog.pearce.org.nz/2011/03/html5-video-painting-performance.html HTML5 Video painting performance statistics in Firefox 5

Cameron: This is the basic API: window.requestAnimationFrame( function(t) { }

<plh> --> https://developer.mozilla.org/en/DOM/window.mozRequestAnimationFrame Mozilla's requestAnimationFrame

Cameron: Slight differences between webkit and mozilla's implementations.

James: Imagine you have a canvas or a banner ad, you can avoid painting for something that is off screen or not visible.

<plh> Timing control for script-based animations

Jatinder: Why isn't this just simpler like onPaint(func callback)? The UA would determine when is the best time to make the callback, e.g., before you paint.

Jason: Painting and animation frames is a bit complimentary.
... The current API wouldn't give the script the ability to control the paint.
... What happens when you drop to 30Hz, how the script deal with that?
... Would you be able to align the frequency of the paint updates (display frequency) with how often you do the callback?

James: With requestFrameAnimation you can make better decisions, because with setTimeout you don't know why they're doing.

Jason: Let me show a demo.

James: Sure.

Jason: Wouldn't you always want to match the display rate?

James: Not exactly. What if you're video is running at a slower rate and you want your animation to match that?

Jason: Showing http://ie.microsoft.com/testdrive/Performance/PsychedelicBrowsing/Default.html

Jason is running an xperf trace.

James: How do you know when to fire the timer?
... Let's say I'm in a background tab, and I'm running a timer. How do you know when it's related to graphics work?

Jason: We feel that we've solved a lot of these problems by aligning to the display time.

Cameron: Theres not much difference how it's done between setTimeout and requestAnimationFrame

Jason: We should solve the case where you see flicker on a resize.

James: This API has got a lot of good response from the Javascript libraries.

Cameron: I like to know which of things you were discussing, Jason, that would impact that API?
... the stuff about the vblank didn't seem like a required part.

Jason: The APIs are just fine. I'm not sure what the additional value is that the setInterval model we have today.
... We haven't found cases where we are guessing wrong. I'm a big fan of better APIs in the platform that would solves these problems. But they come with the cost of more cost, learn new patterns, best practices.

James: The interesting thing is the way it interacts with animations APIs.
... theres work going to improve the ability of frame based animation.

Cameron: There were things you were mentioning like synchronizing the names of the animations.

James: As we get more script control of this animation, right now the script base control is not very powerful. Script based animation and declaritive animation is off on it's own.

Jason: We should make sure that frames are not dropped. Curently it's possible with setInterval, setTimeout
... Does Firefox vblank align?

Cameron: I don't know.

Christian: No, I don't believe so.

Cameron: So you'd always want to drop to 30 frames but never 50 frames? Also half?

Always* half?

Jason: Game developers usually go down to half.

James: Worse is 60, 59, 60. Looks visually bad.

Cameron: Are you looking to building these in as requirements?

Jason: Yes, it would be good to have these are requirements. We should talk to game developers, and partners see what their thinking.

James: It may be difficult to enforce a requirement. Imagine a test case.
... We want to help provide a consistent rendering experience. That'd be good.
... I saw most javascript library seems to use setInterval. It shouldn't be hard to change libraries.

Cameron: If you noticed that animation is done, you could always throttled down.

James: It may be hard to tell.

Jason: The objectives seems like you want an ability to throttle down, control frame rate, it would be better if there was a vblank alignment. Do you agree with these objectives?

Cameron: I agree that the vblank alignment would be good for better quality. Not sure how that impacts the API. Maybe a mention in the spec.
... I should follow up and ask people if their intention was to vblank align with this.
... Another thing Zhiheng had brought up before was synchronizing with video. Maybe that is something else we can align with.

<heycam> jamesr, plh, http://dev.w3.org/html5/spec/timers.html#timers

Summary of Action Items

[End of minutes]

Minutes formatted by David Booth's scribe.perl version 1.135 (CVS log)
$Date: 2011/04/01 20:41:33 $

Scribe.perl diagnostic output

[Delete this section before finalizing the minutes.]
This is scribe.perl Revision: 1.135  of Date: 2009/03/02 03:52:20  
Check for newer version at http://dev.w3.org/cvsweb/~checkout~/2002/scribe/

Guessing input format: RRSAgent_Text_Format (score 1.00)

Succeeded: s/(0)//
Succeeded: s/it will be a lot of overhead/it won't be a lot of overhead/
Succeeded: s/won't improve the situation/we'll just be in the same situation as now/
No ScribeNick specified.  Guessing ScribeNick: Jatinder
Inferring Scribes: Jatinder
Default Present: tomayac_, [MicrosoftSVC], +1.617.575.aaaa, +1.617.575.aabb
Present: tomayac_ [MicrosoftSVC] +1.617.575.aaaa +1.617.575.aabb

WARNING: No meeting title found!
You should specify the meeting title like this:
<dbooth> Meeting: Weekly Baking Club Meeting

WARNING: No meeting chair found!
You should specify the meeting chair like this:
<dbooth> Chair: dbooth

Got date from IRC log name: 01 Apr 2011
Guessing minutes URL: http://www.w3.org/2011/04/01-webperf-minutes.html
People with action items: 

[End of scribe.perl diagnostic output]