// Copyright 2012 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef GPU_IPC_SERVICE_GPU_WATCHDOG_THREAD_H_ #define GPU_IPC_SERVICE_GPU_WATCHDOG_THREAD_H_ #include "base/atomicops.h" #include "base/memory/raw_ptr.h" #include "base/memory/raw_ptr_exclusion.h" #include "base/memory/weak_ptr.h" #include "base/power_monitor/power_observer.h" #include "base/task/task_observer.h" #include "base/threading/thread.h" #include "base/time/time.h" #include "build/build_config.h" #include "build/chromecast_buildflags.h" #include "gpu/ipc/common/gpu_watchdog_timeout.h" #include "gpu/ipc/service/gpu_ipc_service_export.h" #include "ui/gfx/native_widget_types.h" #include "ui/gl/progress_reporter.h" namespace gpu { // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class GpuWatchdogThreadEvent { … }; // These values are persisted to logs. Entries should not be renumbered and // numeric values should never be reused. enum class GpuWatchdogTimeoutEvent { … }; #if BUILDFLAG(IS_WIN) // If the actual time the watched GPU thread spent doing actual work is less // than the watchdog timeout, the GPU thread can continue running through // OnGPUWatchdogTimeout for at most 4 times before the gpu thread is killed. constexpr int kMaxCountOfMoreGpuThreadTimeAllowed = 3; #endif constexpr int kMaxExtraCyclesBeforeKill = …; // If the scheduled timeout function is delayed by more than // kUnreasonableTimeoutDelay, we assume the system is in a unexpected state and // the GPU watchdog will NOT terminate the GPU process if no progress is made in // the GPU main thread or in the GPU display compositor thread. This is used in // determining SlowWatchdogThread. constexpr base::TimeDelta kUnreasonableTimeoutDelay = …; // A thread that intermitently sends tasks to a group of watched message loops // and deliberately crashes if one of them does not respond after a timeout. class GPU_IPC_SERVICE_EXPORT GpuWatchdogThread : public base::Thread, public base::PowerSuspendObserver, public base::TaskObserver, public gl::ProgressReporter { … }; } // namespace gpu #endif // GPU_IPC_SERVICE_GPU_WATCHDOG_THREAD_H_