9aa28daafe
- Unify old Pool interface with the new context related interface - Add single threaded execution pool - Defer task killing back to OS context - Defer process listing in indicators back to OS context Bug: v8:12785 Cq-Include-Trybots: luci.v8.try:v8_numfuzz_dbg_ng,v8_numfuzz_ng,v8_numfuzz_tsan_ng,v8_android_arm64_n5x_rel_ng Change-Id: I8ffe01c5d567411203f69ecc451c718ff35d81c9 Reviewed-on: https://chromium-review.googlesource.com/c/v8/v8/+/3781347 Reviewed-by: Alexander Schulze <alexschulze@chromium.org> Commit-Queue: Liviu Rau <liviurau@google.com> Cr-Commit-Position: refs/heads/main@{#82371}
85 lines
2.1 KiB
Python
85 lines
2.1 KiB
Python
# Copyright 2022 the V8 project authors. All rights reserved.
|
|
# Use of this source code is governed by a BSD-style license that can be
|
|
# found in the LICENSE file.
|
|
|
|
from contextlib import contextmanager
|
|
import os
|
|
import signal
|
|
|
|
import subprocess
|
|
import sys
|
|
|
|
from ..local.android import Driver
|
|
from .command import AndroidCommand, PosixCommand, WindowsCommand, taskkill_windows
|
|
from .pool import DefaultExecutionPool
|
|
from ..testproc.util import list_processes_linux
|
|
|
|
|
|
class DefaultOSContext:
|
|
|
|
def __init__(self, command, pool=None):
|
|
self.command = command
|
|
self.pool = pool or DefaultExecutionPool(self)
|
|
|
|
@contextmanager
|
|
def handle_context(self, options):
|
|
yield
|
|
|
|
def list_processes(self):
|
|
return []
|
|
|
|
def terminate_process(self, process):
|
|
pass
|
|
|
|
|
|
class LinuxContext(DefaultOSContext):
|
|
|
|
def __init__(self):
|
|
super().__init__(PosixCommand)
|
|
|
|
def list_processes(self):
|
|
return list_processes_linux()
|
|
|
|
def terminate_process(self, process):
|
|
os.kill(process.pid, signal.SIGTERM)
|
|
|
|
|
|
class WindowsContext(DefaultOSContext):
|
|
|
|
def __init__(self):
|
|
super().__init__(WindowsCommand)
|
|
|
|
def terminate_process(self, process):
|
|
taskkill_windows(process, verbose=True, force=False)
|
|
|
|
|
|
class AndroidOSContext(DefaultOSContext):
|
|
|
|
def __init__(self):
|
|
super().__init__(AndroidCommand)
|
|
|
|
@contextmanager
|
|
def handle_context(self, options):
|
|
try:
|
|
AndroidCommand.driver = Driver.instance(options.device)
|
|
yield
|
|
finally:
|
|
AndroidCommand.driver.tear_down()
|
|
|
|
|
|
# TODO(liviurau): Add documentation with diagrams to describe how context and
|
|
# its components gets initialized and eventually teared down and how does it
|
|
# interact with both tests and underlying platform specific concerns.
|
|
def find_os_context_factory(target_os):
|
|
registry = dict(android=AndroidOSContext, windows=WindowsContext)
|
|
default = LinuxContext
|
|
return registry.get(target_os, default)
|
|
|
|
|
|
@contextmanager
|
|
def os_context(target_os, options):
|
|
factory = find_os_context_factory(target_os)
|
|
context_instance = factory()
|
|
with context_instance.handle_context(options):
|
|
yield context_instance
|