mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-12-01 01:36:09 +03:00
69 lines
2.5 KiB
C++
69 lines
2.5 KiB
C++
// Copyright 2018 The Chromium Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef BASE_TASK_TASK_SCHEDULER_SERVICE_THREAD_H_
|
|
#define BASE_TASK_TASK_SCHEDULER_SERVICE_THREAD_H_
|
|
|
|
#include "base/base_export.h"
|
|
#include "base/macros.h"
|
|
#include "base/threading/thread.h"
|
|
#include "base/time/time.h"
|
|
#include "base/timer/timer.h"
|
|
|
|
namespace base {
|
|
namespace internal {
|
|
|
|
class TaskTracker;
|
|
|
|
// The TaskScheduler's ServiceThread is a mostly idle thread that is responsible
|
|
// for handling async events (e.g. delayed tasks and async I/O). Its role is to
|
|
// merely forward such events to their destination (hence staying mostly idle
|
|
// and highly responsive).
|
|
// It aliases Thread::Run() to enforce that ServiceThread::Run() be on the stack
|
|
// and make it easier to identify the service thread in stack traces.
|
|
class BASE_EXPORT ServiceThread : public Thread {
|
|
public:
|
|
// Constructs a ServiceThread which will record heartbeat metrics. This
|
|
// includes metrics recorded through |report_heartbeat_metrics_callback|,
|
|
// in addition to latency metrics through |task_tracker| if non-null. In that
|
|
// case, this ServiceThread will assume a registered TaskScheduler instance
|
|
// and that |task_tracker| will outlive this ServiceThread.
|
|
explicit ServiceThread(const TaskTracker* task_tracker,
|
|
RepeatingClosure report_heartbeat_metrics_callback);
|
|
|
|
~ServiceThread() override;
|
|
|
|
// Overrides the default interval at which |heartbeat_latency_timer_| fires.
|
|
// Call this with a |heartbeat| of zero to undo the override.
|
|
// Must not be called while the ServiceThread is running.
|
|
static void SetHeartbeatIntervalForTesting(TimeDelta heartbeat);
|
|
|
|
private:
|
|
// Thread:
|
|
void Init() override;
|
|
void Run(RunLoop* run_loop) override;
|
|
|
|
void ReportHeartbeatMetrics() const;
|
|
|
|
// Kicks off a single async task which will record a histogram on the latency
|
|
// of a randomly chosen set of TaskTraits.
|
|
void PerformHeartbeatLatencyReport() const;
|
|
|
|
const TaskTracker* const task_tracker_;
|
|
|
|
// Fires a recurring heartbeat task to record metrics which are independent
|
|
// from any execution sequence. This is done on the service thread to avoid
|
|
// all external dependencies (even main thread).
|
|
base::RepeatingTimer heartbeat_metrics_timer_;
|
|
|
|
RepeatingClosure report_heartbeat_metrics_callback_;
|
|
|
|
DISALLOW_COPY_AND_ASSIGN(ServiceThread);
|
|
};
|
|
|
|
} // namespace internal
|
|
} // namespace base
|
|
|
|
#endif // BASE_TASK_TASK_SCHEDULER_SERVICE_THREAD_H_
|