New issue
Advanced search Search tips

Issue 897588 link

Starred by 1 user

Issue metadata

Status: Verified
Owner:
Closed: Oct 29
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: Chrome
Pri: 3
Type: Bug



Sign in to add a comment

tast.video.PlaybackPerfH264 seems flaky with error: Cannot set property 'loop' of undefined

Project Member Reported by johnylin@chromium.org, Oct 22

Issue description

Device: daisy, checll, celes and many others

https://cros-goldeneye.corp.google.com/chromeos/healthmonitoring/testDetails?milestone=72&daysBack=30&testName=tast.video.PlaybackPerfH264

Failure:

10/21 16:26:12.976 INFO |             utils:0287| [stdout] [16:26:12.362] Error at playback.go:88: Failed to collect performance values: failed to settle video looping: got exception: TypeError: Cannot set property 'loop' of undefined
10/21 16:26:12.977 INFO |             utils:0287| [stdout] [16:26:12.362] Stack trace:
10/21 16:26:12.977 INFO |             utils:0287| [stdout] Failed to collect performance values
10/21 16:26:12.977 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video/playback.RunTest (playback.go:88)
10/21 16:26:12.977 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video.PlaybackPerfH264 (playback_perf_h264.go:27)
10/21 16:26:12.977 INFO |             utils:0287| [stdout] 	at chromiumos/tast/testing.(*Test).Run.func4 (test.go:189)
10/21 16:26:12.978 INFO |             utils:0287| [stdout] 	at chromiumos/tast/testing.runAndRecover.func1 (stage.go:68)
10/21 16:26:12.978 INFO |             utils:0287| [stdout] 	at runtime.goexit (asm_amd64.s:2361)
10/21 16:26:12.978 INFO |             utils:0287| [stdout] failed to settle video looping
10/21 16:26:12.978 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video/playback.measureWithConfig (playback.go:148)
10/21 16:26:12.978 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video/playback.measure (playback.go:103)
10/21 16:26:12.978 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video/playback.RunTest (playback.go:87)
10/21 16:26:12.978 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video.PlaybackPerfH264 (playback_perf_h264.go:27)
10/21 16:26:12.978 INFO |             utils:0287| [stdout] 	at chromiumos/tast/testing.(*Test).Run.func4 (test.go:189)
10/21 16:26:12.979 INFO |             utils:0287| [stdout] 	at chromiumos/tast/testing.runAndRecover.func1 (stage.go:68)
10/21 16:26:12.979 INFO |             utils:0287| [stdout] 	at runtime.goexit (asm_amd64.s:2361)
10/21 16:26:12.979 INFO |             utils:0287| [stdout] got exception: TypeError: Cannot set property 'loop' of undefined
10/21 16:26:12.979 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/chrome.(*Conn).doEval (conn.go:101)
10/21 16:26:12.979 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/chrome.(*Conn).Exec (conn.go:54)
10/21 16:26:12.979 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video/playback.measureWithConfig (playback.go:147)
10/21 16:26:12.980 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video/playback.measure (playback.go:103)
10/21 16:26:12.980 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video/playback.RunTest (playback.go:87)
10/21 16:26:12.980 INFO |             utils:0287| [stdout] 	at chromiumos/tast/local/bundles/cros/video.PlaybackPerfH264 (playback_perf_h264.go:27)
10/21 16:26:12.980 INFO |             utils:0287| [stdout] 	at chromiumos/tast/testing.(*Test).Run.func4 (test.go:189)
10/21 16:26:12.980 INFO |             utils:0287| [stdout] 	at chromiumos/tast/testing.runAndRecover.func1 (stage.go:68)
10/21 16:26:12.980 INFO |             utils:0287| [stdout] 	...
10/21 16:26:13.826 INFO |             utils:0287| [stdout] Completed test video.PlaybackPerfH264 in 29.56s with 1 error(s)

According to the code:
https://cs.corp.google.com/chromeos_public/src/platform/tast-tests/src/chromiumos/tast/local/bundles/cros/video/playback/playback.go?type=cs&q=playback.measureWithConfig+package:chromeos_public&g=0&l=147

It seems like "document.getElementsByTagName('video')[0]" sometimes may be failed to get the object (so is undefined?)

 
Cc: nya@chromium.org derat@chromium.org
I wonder it is needed to wait until a document is loaded.
If NewConn is returned, is the page loaded?
The document doesn't note it.

In video_PlaybackPerf, we call WaitForDocumentReadyStateToBeComplete to wait for the page load.
https://chromium.googlesource.com/chromiumos/third_party/autotest/+/master/client/site_tests/video_PlaybackPerf/video_PlaybackPerf.py#75

+derat@, nya@
I'm not sure CDP guarantees anything about the state when NewConn is returned, so we should wait for the page to load.

Here's my change for ui.ChromeLogin:
https://chromium-review.googlesource.com/c/chromiumos/platform/tast-tests/+/1278509

However it was reverted due to flakiness ( crbug.com/895337 ). I'm investigating why.

Thanks, I was writing something similar. :-)

Maybe it'd be useful if NewConn either waited for the page to load before returning or accepted an option that could be used to request this behavior. It'd be unfortunate if almost every test ended up with its own copy of code to wait.
I think I found the cause. Maybe we inspected document.readyState before navigation started, i.e. about:blank. I will update the chrome package.

In the case of video playback test, I think it's better to wait for <video> to appear, rather than waiting for readyState, since it's not an usual HTML.

Project Member

Comment 5 by bugdroid1@chromium.org, Oct 25

The following revision refers to this bug:
  https://chromium.googlesource.com/chromiumos/platform/tast-tests/+/f541f7b3facf06975bfc18264e4fa4b85abc642f

commit f541f7b3facf06975bfc18264e4fa4b85abc642f
Author: Hirokazu Honda <hiroh@chromium.org>
Date: Thu Oct 25 11:26:38 2018

video.PlaybackPerf: Wait until video element is loaded in page

Formerly, video.PlaybackPerf can have tried to access a video element before it
is loaded. It fails the test due to the failure on accessing the video element.
This change fixes the issue as the test waits for the video element loading.

BUG= chromium:897588 ,  chromium:890733 
TEST=video.PlaybackPerfH264

Change-Id: I285c62e0819f284f73f977fa3f29ac9aca9db3c8
Reviewed-on: https://chromium-review.googlesource.com/1297795
Commit-Ready: Hirokazu Honda <hiroh@chromium.org>
Tested-by: Hirokazu Honda <hiroh@chromium.org>
Reviewed-by: Dan Erat <derat@chromium.org>
Reviewed-by: Shuhei Takahashi <nya@chromium.org>

[modify] https://crrev.com/f541f7b3facf06975bfc18264e4fa4b85abc642f/src/chromiumos/tast/local/bundles/cros/video/playback/playback.go

Status: Verified (was: Untriaged)
The error no longer occurs after the CL was landed.

Sign in to add a comment