Skip to content

Commit 47fd7c4

Browse files
committed
test change for arm macs
1 parent 336fbf7 commit 47fd7c4

1 file changed

Lines changed: 76 additions & 23 deletions

File tree

testing/mozbase/mozscreenshot/mozscreenshot/__init__.py

Lines changed: 76 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import os
66
import subprocess
77
import tempfile
8+
import time
89

910
import mozinfo
1011
from mozlog.formatters.process import strstatus
@@ -31,38 +32,90 @@ def dump_screen(utilityPath, log, prefix="mozilla-test-fail-screenshot_"):
3132

3233
is_structured_log = hasattr(log, "process_exit")
3334

35+
# Get dir where to write the screenshot file
36+
parent_dir = os.environ.get("MOZ_UPLOAD_DIR", None)
37+
if not parent_dir:
38+
log.info("Failed to retrieve MOZ_UPLOAD_DIR env var")
39+
return
40+
3441
# Need to figure out which OS-dependent tool to use
3542
if mozinfo.isLinux:
3643
utility = [os.path.join(utilityPath, "screentopng")]
3744
utilityname = "screentopng"
45+
# Run the capture
46+
try:
47+
tmpfd, imgfilename = tempfile.mkstemp(
48+
prefix=prefix, suffix=".png", dir=parent_dir
49+
)
50+
os.close(tmpfd)
51+
if is_structured_log:
52+
log.process_start(utilityname)
53+
returncode = subprocess.call(utility + [imgfilename])
54+
if is_structured_log:
55+
log.process_exit(utilityname, returncode)
56+
else:
57+
printstatus(utilityname, returncode)
58+
except OSError as err:
59+
log.info("Failed to start %s for screenshot: %s" % (utility[0], err.strerror))
3860
elif mozinfo.isMac:
39-
utility = ["/usr/sbin/screencapture", "-C", "-x", "-t", "png"]
4061
utilityname = "screencapture"
62+
trigger_file = "/Users/cltbld/.trigger_screenshot"
63+
launchagent_plist = "/Users/cltbld/Library/LaunchAgents/com.mozilla.screencapture.plist"
64+
65+
# Check if trigger-based system is available (ARM workers)
66+
use_trigger = os.path.exists(launchagent_plist)
67+
68+
try:
69+
tmpfd, imgfilename = tempfile.mkstemp(
70+
prefix=prefix, suffix=".png", dir=parent_dir
71+
)
72+
os.close(tmpfd)
73+
if is_structured_log:
74+
log.process_start(utilityname)
75+
76+
if use_trigger:
77+
# Use trigger-based screenshot capture via LaunchAgent (ARM workers)
78+
# Write the desired output path to the trigger file
79+
with open(trigger_file, "w") as f:
80+
f.write(imgfilename)
81+
# Wait for the screenshot to be created (up to 5 seconds)
82+
for _ in range(50):
83+
if os.path.exists(imgfilename) and os.path.getsize(imgfilename) > 0:
84+
returncode = 0
85+
break
86+
time.sleep(0.1)
87+
else:
88+
log.info("Screenshot was not created within timeout")
89+
returncode = 1
90+
else:
91+
# Use direct screencapture command (Intel workers)
92+
utility = ["/usr/sbin/screencapture", "-C", "-x", "-t", "png"]
93+
returncode = subprocess.call(utility + [imgfilename])
94+
95+
if is_structured_log:
96+
log.process_exit(utilityname, returncode)
97+
else:
98+
printstatus(utilityname, returncode)
99+
except (OSError, IOError) as err:
100+
log.info("Failed to capture screenshot: %s" % str(err))
41101
elif mozinfo.isWin:
42102
utility = [os.path.join(utilityPath, "screenshot.exe")]
43103
utilityname = "screenshot"
44-
45-
# Get dir where to write the screenshot file
46-
parent_dir = os.environ.get("MOZ_UPLOAD_DIR", None)
47-
if not parent_dir:
48-
log.info("Failed to retrieve MOZ_UPLOAD_DIR env var")
49-
return
50-
51-
# Run the capture
52-
try:
53-
tmpfd, imgfilename = tempfile.mkstemp(
54-
prefix=prefix, suffix=".png", dir=parent_dir
55-
)
56-
os.close(tmpfd)
57-
if is_structured_log:
58-
log.process_start(utilityname)
59-
returncode = subprocess.call(utility + [imgfilename])
60-
if is_structured_log:
61-
log.process_exit(utilityname, returncode)
62-
else:
63-
printstatus(utilityname, returncode)
64-
except OSError as err:
65-
log.info("Failed to start %s for screenshot: %s" % (utility[0], err.strerror))
104+
# Run the capture
105+
try:
106+
tmpfd, imgfilename = tempfile.mkstemp(
107+
prefix=prefix, suffix=".png", dir=parent_dir
108+
)
109+
os.close(tmpfd)
110+
if is_structured_log:
111+
log.process_start(utilityname)
112+
returncode = subprocess.call(utility + [imgfilename])
113+
if is_structured_log:
114+
log.process_exit(utilityname, returncode)
115+
else:
116+
printstatus(utilityname, returncode)
117+
except OSError as err:
118+
log.info("Failed to start %s for screenshot: %s" % (utility[0], err.strerror))
66119

67120

68121
def dump_device_screen(device, log, prefix="mozilla-test-fail-screenshot_"):

0 commit comments

Comments
 (0)