mirror of
https://gitee.com/sui-feng-cb/AzurLaneAutoScript1
synced 2026-03-19 23:33:33 +08:00
Opt: Lazy aScreenCap initialization
This commit is contained in:
@@ -19,8 +19,8 @@ class Connection:
|
|||||||
self.serial = str(self.config.SERIAL)
|
self.serial = str(self.config.SERIAL)
|
||||||
self.device = self.connect(self.serial)
|
self.device = self.connect(self.serial)
|
||||||
self.disable_uiautomator2_auto_quit()
|
self.disable_uiautomator2_auto_quit()
|
||||||
if self.config.DEVICE_SCREENSHOT_METHOD == 'aScreenCap':
|
# if self.config.DEVICE_SCREENSHOT_METHOD == 'aScreenCap':
|
||||||
self._ascreencap_init()
|
# self._ascreencap_init()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def adb_command(cmd, serial=None):
|
def adb_command(cmd, serial=None):
|
||||||
|
|||||||
@@ -14,6 +14,10 @@ from module.device.connection import Connection
|
|||||||
from module.logger import logger
|
from module.logger import logger
|
||||||
|
|
||||||
|
|
||||||
|
class AscreencapError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class Screenshot(Connection):
|
class Screenshot(Connection):
|
||||||
_screenshot_method = 0
|
_screenshot_method = 0
|
||||||
_screenshot_method_fixed = False
|
_screenshot_method_fixed = False
|
||||||
@@ -63,7 +67,7 @@ class Screenshot(Connection):
|
|||||||
if self._bytepointer >= len(byte_array):
|
if self._bytepointer >= len(byte_array):
|
||||||
text = 'Repositioning byte pointer failed, corrupted aScreenCap data received'
|
text = 'Repositioning byte pointer failed, corrupted aScreenCap data received'
|
||||||
logger.warning(text)
|
logger.warning(text)
|
||||||
exit(1)
|
raise AscreencapError(text)
|
||||||
return byte_array[self._bytepointer:]
|
return byte_array[self._bytepointer:]
|
||||||
|
|
||||||
def _screenshot_ascreencap(self):
|
def _screenshot_ascreencap(self):
|
||||||
@@ -77,7 +81,7 @@ class Screenshot(Connection):
|
|||||||
text = f'aScreenCap header verification failure, corrupted image received. ' \
|
text = f'aScreenCap header verification failure, corrupted image received. ' \
|
||||||
f'HEADER IN HEX = {compressed_data_header.tobytes().hex()}'
|
f'HEADER IN HEX = {compressed_data_header.tobytes().hex()}'
|
||||||
logger.warning(text)
|
logger.warning(text)
|
||||||
exit(1)
|
raise AscreencapError(text)
|
||||||
|
|
||||||
uncompressed_data_size = compressed_data_header[1].item()
|
uncompressed_data_size = compressed_data_header[1].item()
|
||||||
data = lz4.block.decompress(raw_compressed_data[20:], uncompressed_size=uncompressed_data_size)
|
data = lz4.block.decompress(raw_compressed_data[20:], uncompressed_size=uncompressed_data_size)
|
||||||
@@ -86,7 +90,7 @@ class Screenshot(Connection):
|
|||||||
image = Image.fromarray(image)
|
image = Image.fromarray(image)
|
||||||
return image
|
return image
|
||||||
|
|
||||||
@retry()
|
@retry(wait_fixed=5000)
|
||||||
# @timer
|
# @timer
|
||||||
def screenshot(self):
|
def screenshot(self):
|
||||||
"""
|
"""
|
||||||
@@ -98,7 +102,13 @@ class Screenshot(Connection):
|
|||||||
method = self.config.DEVICE_SCREENSHOT_METHOD
|
method = self.config.DEVICE_SCREENSHOT_METHOD
|
||||||
|
|
||||||
if method == 'aScreenCap':
|
if method == 'aScreenCap':
|
||||||
self.image = self._screenshot_ascreencap()
|
try:
|
||||||
|
self.image = self._screenshot_ascreencap()
|
||||||
|
except AscreencapError:
|
||||||
|
logger.warning('Error when calling aScreenCap, re-initializing')
|
||||||
|
self._ascreencap_init()
|
||||||
|
self._bytepointer = 0
|
||||||
|
|
||||||
elif method == 'uiautomator2':
|
elif method == 'uiautomator2':
|
||||||
self.image = self._screenshot_uiautomator2()
|
self.image = self._screenshot_uiautomator2()
|
||||||
else:
|
else:
|
||||||
|
|||||||
Reference in New Issue
Block a user